1. 宝塔面板配置Webhook
- 登录宝塔面板,进入「软件商店」→ 搜索「Webhook」并安装。
- 添加Webhook:
- 名称:自定义(如
Gitee自动部署
) - 脚本:编写部署脚本,示例如下:
#!/bin/bash# 项目路径(需替换为你的实际路径) PROJECT_PATH="/www/wwwroot/your_project" # Gitee仓库地址(推荐SSH格式,如 git@gitee.com:username/repo.git) GIT_REPO="git@gitee.com:username/repo.git" # 分支名(如 master 或 main) BRANCH="master"# 验证请求(可选,需在Gitee的Webhook中配置密钥) # 宝塔Webhook默认暂不支持自动验证,建议通过脚本验证签名(此处略,需自行实现)# 进入项目目录 cd $PROJECT_PATH || exit 1# 强制重置代码(避免冲突) git reset --hard HEAD git clean -fd# 拉取最新代码 git pull $GIT_REPO $BRANCH# 安装依赖(如npm、pip等) # npm install # pip install -r requirements.txt# 重启服务(如Nginx、PHP等) # systemctl restart nginxecho "自动部署完成"
- 保存后,复制生成的Webhook URL(形如
http://服务器IP:端口/hook?access_key=xxx
)。
- 名称:自定义(如
2. Gitee仓库配置Webhook
- 进入Gitee仓库 → 「管理」→ 「WebHooks」→ 「添加WebHook」。
- 填写配置:
- URL:粘贴宝塔生成的Webhook URL。
- 密钥(可选):若需签名验证,填写密钥并在宝塔脚本中验证。
- 触发事件:选择「Push」事件。
- 保存设置。
3. 配置SSH密钥(避免每次输入密码)
- 生成密钥对(如未生成过):
ssh-keygen -t rsa -C "your_email@example.com" # 默认路径为 ~/.ssh/id_rsa # 打开终端(Linux/macOS)或 Git Bash(Windows)
- 参数说明:
-t rsa
: 使用 RSA 算法。-C "your_email"
: 备注(建议填写邮箱)。
- 交互提示:
- 按回车使用默认密钥路径(
~/.ssh/id_rsa
)。 - 输入密钥密码(可选,直接回车跳过)
- 按回车使用默认密钥路径(
- 添加公钥到Gitee:
- 复制
cat ~/.ssh/id_rsa.pub
输出的内容(从ssh-rsa
到邮箱结尾)。 - 点击设置
- 然后点击ssh公钥,命名并填入公钥的内容
- 复制
- 测试 SSH 连接:
-
验证是否配置成功:
ssh -T git@gitee.com
-
成功响应:
Hello YourUsername! You've successfully authenticated, but GITEE.COM does not provide shell access.
- 配置 Git 仓库使用 SSH 地址:
-
如果之前使用的是 HTTPS 地址,需修改为 SSH 协议:
# 进入项目目录 cd /path/to/your/project# 查看当前远程仓库地址 git remote -v# 修改为 SSH 地址(格式:git@gitee.com:username/repo.git) git remote set-url origin git@gitee.com:username/repo.git
4. 测试与排查
- 手动触发测试:
- 在宝塔的Webhook页面点击「测试」,查看日志是否执行成功。
- 在Gitee仓库推送代码,观察宝塔日志(路径:
/www/wwwlogs/webhook.log
)。
- 常见问题:
- 权限不足:确保项目目录用户权限与脚本执行用户一致(如
chown -R www:www /www/wwwroot
)。 - Git拉取失败:检查SSH密钥是否生效(
ssh -T git@gitee.com
)。 - 脚本路径错误:使用绝对路径,或先
cd
到目录再操作。 - 依赖缺失:确保服务器已安装Git、Node.js等必要工具。
- 权限不足:确保项目目录用户权限与脚本执行用户一致(如
补充:增加安全性(可选)
在脚本中添加签名验证(需Gitee配置密钥):
# 获取请求头中的签名
SIGNATURE=$HTTP_X_GITEE_TOKEN
# 计算本地签名(需安装jq)
# JSON=$(cat /dev/stdin)
# CALC_SIGN=$(echo -n "$JSON" | openssl sha256 -hmac "你的密钥" | awk '{print $2}')
# 对比 $SIGNATURE 与 $CALC_SIGN 是否一致
通过以上步骤,即可实现Gitee代码推送后自动触发宝塔Webhook完成部署。