原理:
在我们完成某个功能后,向git推送代码后,git会主动发起一个web请求到我们设置的api,通过api执行shell语句完成git pull的操作
环境配置:
提示:这里以安装了宝塔面板的linux系统为例
账户设置
Gitee发送来的Post请求默认用户为www,需要为`www用户设置公钥`
www用户默认不可登录,通过以下命令暂时登录www用户,切记完成公钥设置后权限改回来
进入权限设置
vi /etc/passwd
找www用户把权限/sbin/nologin
改成/bin/bash
(切记完成设置后记得改回来)
2. 公钥设置
生成公钥(使用www用户执行)
ssh-keygen -t rsa -C "test@qq.com" # 填自己的邮箱
查看刚刚生成的公钥,目录可能会变化,注意看控制台输出
cat ~/.ssh/id_rsa.pub
然后去gitee添加生成的公钥
配置webhook代码(PHP例子):
不一定使用PHP,只要是能执行shell的api就可以
贴代码:
<?php
header("Content-type: text/html; charset=gb2312");
$requestBody = file_get_contents("php://input");
if (empty($requestBody)) {
die('error');
}
$content = json_decode($requestBody, true);
if ($content['password'] == 'gitee上面设置的推送密码') {
exec("cd 网站运行目录;git pull",$res);
$res_log = '------------------' . PHP_EOL;
$res_log .= '仓库用户 ' . $content['user_name'];
$res_log .= ' 在 ' . date('Y-m-d H:i:s');
$res_log .= ' 向 ' . $content['repository']['name'];
$res_log .= ' 项目的 ' . $content['ref'] . ' 分支 push 了 ' . $content['total_commits_count'] . ' 个 commit:' . PHP_EOL;
$res_log .= json_encode($res) . PHP_EOL;
file_put_contents("webhook_".time().".log", $res_log, FILE_APPEND);
}