测试环境Git自动拉取代码:宝塔WebHook配置指南
需求背景:1. 测试环境安全性要求不高,需要及时自动拉取代码,省去手动拉取繁琐步骤→ 2.→ 3.想要实现的是:当您将代码推送到 Gogs 服务器后,网站服务器能够自动从 Gogs 拉取最新代码。
Git 自动拉取代码配置
需求背景:1. 测试环境安全性要求不高,需要及时自动拉取代码,省去手动拉取繁琐步骤
- 有自己的代码管理服务器Gogs搭建的,开发前先把Gogs的代码拉取到本地,本地开发好后,上传到Gogs,网站服务器上再从Gogs拉取代码。本地推送代码后,怎么让网站服务器自动拉取最新代码
工作流程是:
-
本地开发 → 2. 推送代码到 Gogs → 3. 服务器从 Gogs 拉取代码
-
想要实现的是第 2 步到第 3 步的自动化:当您将代码推送到 Gogs 服务器后,网站服务器能够自动从 Gogs 拉取最新代码
在网站服务器上使用 WebHook(推荐)
这是最简单和可靠的方法。您需要在 Gogs 中设置 WebHook,当有推送事件时,Gogs 会通知您的网站服务器执行拉取代码的操作。
步骤 1:在网站服务器上创建 WebHook 接收端
您可以使用宝塔面板的 WebHook 插件,或者在网站服务器上自己创建一个简单的 HTTP 服务。
使用宝塔 WebHook 插件:
-
安装宝塔的「宝塔WebHook」插件
-
添加一个新的 Hook,设置执行脚本:
#!/bin/bash
REPO_ROOT="/www/wwwroot/your_project_path"
LOG_FILE="/var/log/git-auto-deploy.log"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
exec >> "$LOG_FILE" 2>&1
echo "=== [$TIMESTAMP] WebHook 触发 ==="
cd "$REPO_ROOT" || { echo "❌ 目录不存在"; exit 1; }
if [[ ! -d ".git" ]]; then
echo "❌ 非 Git 仓库目录"
exit 1
fi
CURRENT_BRANCH=$(git branch --show-current 2>/dev/null)
[[ -z "$CURRENT_BRANCH" ]] && CURRENT_BRANCH="dev"
echo "✅ 当前分支: $CURRENT_BRANCH"
sudo git fetch origin || { echo "❌ 拉取失败"; exit 1; }
sudo git reset --hard origin/"$CURRENT_BRANCH" || { echo "❌ 重置失败"; exit 1; }
echo "✅ 代码更新完成"
echo "========================================"
步骤 2:在 Gogs 中配置 WebHook
-
登录您的 Gogs 服务器
-
进入您的代码仓库 → 「设置」 → 「Web 钩子」
-
点击「添加 Web 钩子」 → 选择「Gogs」
-
填写以下信息:
-
有效载荷 URL:
http://您的网站服务器IP:宝塔WebHook端口/hook?access_key=您的密钥¶m=pull(宝塔 WebHook 地址可以在插件设置中找到)
-
密码/签名密钥:可选,增加安全性
-
触发事件:选择「推送事件」
-
-
点击「添加 Web 钩子」
重要注意事项:
-
避免权限问题:宝塔WebHook脚本中使用sudo执行命令
-
SSL证书问题:如果宝塔面板开启了SSL证书,不能使用自签证书,要使用Let’s Encrypt,否则会有证书验证问题。Gogs 不认宝塔自签证书。或者关闭宝塔面板SSL证书,在Gogs WebHook配置中使用HTTP而非HTTPS。
-
日志监控:自动部署的日志会记录在
/var/log/git-auto-deploy.log文件中,可以定期查看。 -
首次配置:确保网站目录
/www/wwwroot/your_project_path已经初始化为Git仓库,并且已设置Gogs为远程仓库:
cd /www/wwwroot/your_project_path
git init
git remote add origin http://您的Gogs服务器IP:端口/用户名/仓库名.git
git pull origin dev
- 分支匹配:根据实际情况调整脚本中的分支名称,如果是master分支,将脚本中的
CURRENT_BRANCH="dev"改为CURRENT_BRANCH="master"。
完成上述配置后,当您在本地推送代码到Gogs的dev分支时,网站服务器会自动拉取最新代码,实现自动化部署。
更多推荐
所有评论(0)