Git 自动拉取代码配置

需求背景:1. 测试环境安全性要求不高,需要及时自动拉取代码,省去手动拉取繁琐步骤

  1. 有自己的代码管理服务器Gogs搭建的,开发前先把Gogs的代码拉取到本地,本地开发好后,上传到Gogs,网站服务器上再从Gogs拉取代码。本地推送代码后,怎么让网站服务器自动拉取最新代码

工作流程是:

  1. 本地开发 → 2. 推送代码到 Gogs → 3. 服务器从 Gogs 拉取代码

  2. 想要实现的是第 2 步到第 3 步的自动化:当您将代码推送到 Gogs 服务器后,网站服务器能够自动从 Gogs 拉取最新代码

在网站服务器上使用 WebHook(推荐)

这是最简单和可靠的方法。您需要在 Gogs 中设置 WebHook,当有推送事件时,Gogs 会通知您的网站服务器执行拉取代码的操作。

步骤 1:在网站服务器上创建 WebHook 接收端

您可以使用宝塔面板的 WebHook 插件,或者在网站服务器上自己创建一个简单的 HTTP 服务。

使用宝塔 WebHook 插件:

  1. 安装宝塔的「宝塔WebHook」插件

  2. 添加一个新的 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

  1. 登录您的 Gogs 服务器

  2. 进入您的代码仓库 → 「设置」 → 「Web 钩子」

  3. 点击「添加 Web 钩子」 → 选择「Gogs」

  4. 填写以下信息:

    • 有效载荷 URLhttp://您的网站服务器IP:宝塔WebHook端口/hook?access_key=您的密钥&param=pull

      (宝塔 WebHook 地址可以在插件设置中找到)

    • 密码/签名密钥:可选,增加安全性

    • 触发事件:选择「推送事件」

  5. 点击「添加 Web 钩子」

重要注意事项:

  1. 避免权限问题:宝塔WebHook脚本中使用sudo执行命令

  2. SSL证书问题:如果宝塔面板开启了SSL证书,不能使用自签证书,要使用Let’s Encrypt,否则会有证书验证问题。Gogs 不认宝塔自签证书。或者关闭宝塔面板SSL证书,在Gogs WebHook配置中使用HTTP而非HTTPS。

  3. 日志监控:自动部署的日志会记录在 /var/log/git-auto-deploy.log 文件中,可以定期查看。

  4. 首次配置:确保网站目录 /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
  1. 分支匹配:根据实际情况调整脚本中的分支名称,如果是master分支,将脚本中的 CURRENT_BRANCH="dev" 改为 CURRENT_BRANCH="master"

完成上述配置后,当您在本地推送代码到Gogs的dev分支时,网站服务器会自动拉取最新代码,实现自动化部署。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐