自动化部署流程
现代 Web 开发中,自动化部署是提升效率的关键环节。通过配置 Git webhook,可以实现代码推送到远程仓库后自动触发服务器部署,无需手动操作。
流程概述
典型的自动化部署流程如下:
- 开发者在本地完成代码修改
- 将代码推送到远程仓库(如 CNB)
- 远程仓库触发 webhook 事件
- 服务器接收 webhook 请求并执行部署脚本
- 部署脚本拉取最新代码并更新站点
Git 分支策略
对于小型静态站点,推荐使用简化的分支策略:
- main 分支:主分支,存放源码,推送后触发云端构建
- dist 分支:发布分支,存放构建产物,服务器拉取该分支部署
- feature 分支:功能分支,用于开发新功能
分支工作流示例
# 创建功能分支
git checkout -b feature/new-article
# 在功能分支上开发
# ... 编辑文件 ...
# 提交更改
git add .
git commit -m "feat: 添加新文章"
# 切换到主分支并合并
git checkout main
git merge feature/new-article
# 推送到远程仓库(触发 CNB 自动构建)
git push origin main
Webhook 配置
以宝塔面板为例,配置 webhook 的步骤:
- 登录宝塔面板
- 进入「软件商店」→「宝塔插件」
- 安装「Webhook」插件
- 添加新的 webhook,填写执行脚本
Webhook 执行脚本
服务器 webhook 拉取的是构建产物分支(dist),而非源码:
#!/usr/bin/env bash
set -euo pipefail
# 进入站点目录
cd /www/wwwroot/hefei.space
# 拉取 dist 分支产物(已由 CNB 构建完成)
git fetch origin dist
git reset --hard origin/dist
部署脚本详解
部署脚本的关键命令说明:
git fetch vs git pull
git fetch 只下载远程仓库的更新,不会自动合并。而 git pull 会下载并自动合并。在部署场景中,推荐使用 git fetch + git reset 的组合,因为:
- 可以避免合并冲突
- 确保服务器代码与远程仓库完全一致
- 执行速度更快
git reset --hard
git reset --hard origin/dist 会将本地分支重置为远程仓库的状态,丢弃所有本地修改。这在部署场景中是安全的,因为服务器上的代码不应该有本地修改。
安全注意事项
- Webhook 密钥:配置 webhook 密钥,防止未授权的部署请求
- 权限控制:确保部署脚本以最小权限运行
- 日志记录:记录部署日志,便于排查问题
- 回滚机制:保留历史版本,便于快速回滚
常见问题
部署失败怎么办?
如果部署失败,可以手动执行部署脚本并查看错误信息:
# 手动执行部署
cd /www/wwwroot/hefei.space
bash server/webhook-deploy.sh
# 查看 Git 状态
git status
git log --oneline -5
如何回滚到指定版本?
如果需要回滚到指定版本,可以使用以下命令:
# 查看提交历史
git log --oneline -10
# 回滚到指定提交
git reset --hard <commit-hash>
# 强制推送(谨慎使用)
git push -f origin dist