实现思路
1.在仓库管理中,配置监听push 事件,写入推送地址
2.服务器端写服务脚本,验证身份后执行脚本推送端 gitea 服务器端 php
php脚本如下
$req = json_decode(file_get_contents('php://input'),1);
if($req['secret'] == '123456'){ //验证身份
$name = $req['repository']['name'];
$branch = explode('/',$req['ref'])[2];
if($name && $branch){
$CD = 'cd /www/'.$name;
$branchAll = shell_exec($CD.' && git branch');
if(strpos($branchAll,$branch) === FALSE){
//todo 完成 fetch后再次查找 branch
echo 'no branch';exit;
}
$PULL = $CD.' && sudo git checkout '.$branch.' && sudo git pull && sudo git checkout -';
$flag = shell_exec($PULL);
if($flag !== NULL){
echo 'success';
echo "\r\n message:$flag";
exit;
}
}
}
echo 'error';
遇到的问题
web访问无权执行 git pull
解决
1.修改php-fpm运行用户 php-fpm.conf
2.修改nginx运行用户 www nginx.conf
#加用户及用户组
groupadd www
useradd www -g www
#给www目录权限
chown -R www:www /你的项目目录
3.重启 php-fpm && nginx
修改 /etc/sudoers
#改权限
chmod u+w /etc/sudoers
#写入不验证密码
vim /etc/sudoers
#root ALL=(ALL) NOPASSWD: ALL 下加入
php-fpm运行用户 ALL=(ALL) NOPASSWD:/usr/bin/git