php实现 git推送后服务端自动更新

实现思路

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值