服务器配置webhook自动拉取代码
2026年1月21日大约 3 分钟
提示
本文示例是centos或者rocky linux 结合gitcode
安装webhook
因为网络原因,直接到github上下载 webhook 的压缩包

下载对应的版本,解压缩
tar -zxvf webhook-linux-amd64.tar.gzcd webhook-linux-amd64
cp webhook /usr/local/bin/
# 验证成功与否
webhook --version配置webhook
配置服务文件
提示
注意:这里使用的是 9000 端口 ,所以服务器防火墙或者安全组要放通9000端口
cat > /etc/systemd/system/webhook.service << EOF
[Unit]
Description=Webhook Service for Auto Git Pull
After=network.target network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/webhook -hooks /root/webhook/hooks.json -port 9000 -verbose
WorkingDirectory=/root/webhook
Restart=always
RestartSec=5
User=root
Group=root
StandardOutput=journal+console
StandardError=journal+console
[Install]
WantedBy=multi-user.target
EOF加载并启用服务
# 重新加载systemd配置(必做)
systemctl daemon-reload
# 先停止可能异常的服务(如果之前启动过)
systemctl stop webhook
# 启用开机自启(这次会成功)
systemctl enable webhook
# 启动服务
systemctl start webhook
# 验证服务状态(关键)
systemctl status webhook这个时候webhook服务已经启动了,接下来就是配置webhook了
准备webhook配置文件
- 创建必备的 hooks.json 文件
# 1. 创建webhook目录(如果不存在)
mkdir -p /root/webhook
# 2. 创建hooks.json文件
cat > /root/webhook/hooks.json << EOF
[
{
"id": "laravel-api-pull", // 自定义的ID,用于识别hook
"execute-command": "/root/webhook/git-pull.sh",
"command-working-directory": "/root",
"pass-arguments-to-command": [
{
"source": "payload",
"name": "head_commit.id"
}
]
}
]
EOF实际示例如下:
gitcode虽然在webhook配置处有密码配置,但是实际请求中并没有携带验证密码,因此改为验证项目id
[
{
"id": "laravel-fast-api-pull",
"execute-command": "/root/webhook/git-pull.sh",
"command-working-directory": "/root",
"trigger-rule": {
"match": {
"type": "value",
"parameter": {
"source": "payload",
"name": "project_id"
},
"value": 123456789 //gitcode项目id 此处为示例值
}
}
}
]- 准备用户执行拉取代码的脚本
这是实际执行 git pull 的脚本,必须和 hooks.json 里的路径对应
cat > /root/webhook/git-pull.sh << EOF
#!/bin/bash
# 你的项目目录(对应你服务器上的仓库径路)
TARGET_DIR="/root/laravel-fast-api-youhujun"
# 切换到项目目录,失败则退出
cd \$TARGET_DIR || { echo "切换目录失败"; exit 1; }
# 拉取最新代码(分支改成你实际的,比如master)
git pull origin main
# 输出日志,方便排查
echo "代码拉取完成,时间:\$(date)"
EOF
# 给脚本加执行权限(关键)
chmod +x /root/webhook/git-pull.sh实际示例:
#!/bin/bash
# 项目目录
TARGET_DIR="/www/wwwroot/youhujun.com/Components/Laravel/youhujun/laravel-fast-api-youhujun"
# 切换目录,失败则退出
cd "$TARGET_DIR" || { echo "切换目录失败"; exit 1; }
# 拉取代码
git pull origin main
# 输出日志
echo "代码拉取完成($(date))"重启服务.验证状态
systemctl restart webhook
systemctl status webhook在gitcode托管平台配置webhook
在项目设置中,找到webhook,添加webhook,填写webhook地址,填写密码,保存即可.
Payload URL:填http://你的服务器公网IP:9000/hooks/laravel-api-pull
Content type:选择application/json
Which events would you like to trigger this webhook?:选择Just the push event(只在 push 时触发)
排查
如果webhook配置成功,但是没有生效,可以查看日志
重启
systemctl restart webhook查看日志
journalctl -u webhook -f最后就可以测试webhook是否生效了
配置多个仓库
如果要配置多个仓库
只需要在hooks.json中添加多个hook配置即可,每个仓库一个配置项。
相对应的,根据配置增加git-pull.sh脚本即可,名称可以自己修改调整
