git推送自动下拉代码
在持续集成与自动化部署场景中,Git Webhook 是一种常见且高效的触发机制。本文介绍如何使用 Python 工具 gitwebhooks 搭建一个 Webhook 服务,通过监听指定端口接收 Git 平台推送事件,自动执行系统命令(如 git pull),实现代码的自动拉取与部署。整个方案基于 systemd 服务管理,支持 Gitee、GitHub、GitLab 等主流平台。
一、环境准备(使用 pipx 安装)
1.1 安装 pipx(Python 应用市场)
如果本地已有 Python 环境管理工具(如 pyenv),可先阅读第二步再回来执行。
sudo apt update
sudo apt install pipx
pipx ensurepath # 让 pipx 生效
1.2 安装 gitwebhooks
推荐方式:使用 pipx 独立安装,便于后续修改或删除时独立管理,不影响系统 Python 环境。
如果使用 pyenv 等 Python 环境,可将 pipx 指定到 pyenv 中的 Python:
pipx install gitwebhooks --python "$(pyenv which python)"
也可以让 pipx 自动安装并管理自己的 Python 环境。
备选方式:本地环境安装(不建议,耦合度较高):
python3 -m pip install gitwebhooks
安装完成后,执行以下命令或将内容放入 .bashrc 后重新登录,使 gitwebhooks-cli 命令可用:
export PATH="$HOME/.local/bin:$PATH"
二、配置并安装 gitwebhooks 服务
2.1 启动服务并注册为系统服务
sudo gitwebhooks-cli serve install
执行后会提示选择配置文件级别:
Select configuration file level for the service:
1. User level (~/.gitwebhooks.ini) - Single user, highest priority # 当前用户
2. Local level (/usr/local/etc/gitwebhooks.ini) - Local system, medium priority # 本地所有配置
3. System level (/etc/gitwebhooks.ini) - Global system, lowest priority # 系统配置
Enter choice [1-3] (default: 1): 1
选择 1 后,服务将自动安装为 systemd 服务:
Installing systemd service...
Service file: /etc/systemd/system/gitwebhooks.service
Reloading systemd daemon...
Using configuration file: /root/.gitwebhooks.ini
Enable and start service? [Y] y
Enabling service...
Starting service...
Installation complete!
Service status: systemctl status gitwebhooks
2.2 初始化配置文件
gitwebhooks-cli config init
选择配置级别:
选择配置级别:
1. system (/etc/gitwebhooks.ini)
2. local (/usr/local/etc/gitwebhooks.ini)
3. user (~/.gitwebhooks.ini)
输入选择 [1-3]: 3
随后按提示完成服务器与平台配置:(注意:一服务器对应端口要打开; 二下面的事件默认了 Push hook,如果多个用逗号隔开,如果是空 则是监听所有事件出发对应处理)
--- 服务器配置 ---
服务器监听地址 [默认: 0.0.0.0]:
服务器端口 [默认: 6789]: 8001
日志文件路径 [默认: /var/log/gitwebhooks.log]: /home/wwwlogs/gitwebhooks.log
选择 Git 平台:
1. github
2. gitee
3. gitlab
4. custom
输入选择 [1-4]: 2
--- GITEE 平台配置 ---
输入要处理的事件名称(多个用逗号分隔,直接回车默认: Push Hook): Push Hook
是否启用签名验证? [y/N]: y
输入验证密钥: 【这里是你的默认密码】
--- 仓库配置 ---
输入仓库名称 (格式: owner/repo): git用户/newforasp
输入工作目录路径 (必须已存在): /系统路径/newforasp
输入部署命令: git pull
配置文件生成于 /root/.gitwebhooks.ini。如需新增或修改配置,可直接编辑该文件。
后续步骤提示:
检查配置文件内容:gitwebhooks-cli config view
启动服务器:gitwebhooks-cli -c /root/.gitwebhooks.ini
2.3 重启服务使配置生效
sudo systemctl restart gitwebhooks
同时确保防火墙/安全组已开放对应端口(本例为 8001)。
三、测试推送
3.1 在对应仓库中配置
对应的 hooker 配置,使用webhooker 使用密码 ,填写对应ip 地址+端口 + 密码,然后测试一下通信。
3.2 测试推送
在 Git 仓库中执行一次推送,即可触发 Webhook。服务收到 Push Hook 事件后,会在指定工作目录执行配置的部署命令(如 git pull),实现代码自动拉取。
观察日志文件(如 /home/wwwlogs/gitwebhooks.log)确认执行结果。