开发中我们想推送代码到git仓库的时候,在测试环境立马就能看到是什么样的,我们可以通过git仓库的webhook钩子配置的,在推送代码到git仓库的时候,仓库收到代码,然后可以访问一个url,然后你在这个url写段代码执行更新代码的命令。
<?php
exec("cd /usr/local/nginx/html/yafcms && sudo git reset --hard && sudo git pull",$data);
var_dump($data);
成功输出:array(0) { } array(2) { [0]=> string(33) "HEAD is now at 3246c80 git 钩子" [1]=> string(19) "Already up-to-date." }
失败输出:array(0) { }
上面这段应该没有看不懂的吧?我的git项目放在/usr/local/nginx/html/yafcms,切换到这个目录,然后git reset --hard 把git设置到最新版本(这里是为了防止在服务器上面改了代码,更新的时候会叫你先提交更改的代码,),git pull 再更新代码。
1.查看git的在哪里执行命令
[root@email ~]# whereis git
git: /usr/bin/git /usr/share/man/man1/git.1.gz
2.查看php是什么用户在运行的
[root@email public]# ps -ef|grep php
root 1111 1 0 2019 ? 00:00:14 php-fpm: master process
nobody 25036 1111 0 2019 ? 00:00:02 php-fpm: pool www
nobody 25055 1111 0 2019 ? 00:00:02 php-fpm: pool www
nobody 28265 1111 0 Jan01 ? 00:00:01 php-fpm: pool www
3.配置git命令sudo不用密码 vim /etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
nobody ALL= NOPASSWD:/usr/bin/git
vim /etc/sudoers 配置完成保存退出即可生效,然后再访问php的脚本就可以成功了
如果需要给多个sudo命令免密可以多个就用逗号隔开:
nobody ALL= NOPASSWD:/usr/bin/git,/usr/local/nginx/sbin/nginx
参考:https://blog.csdn.net/php_sir/article/details/84582761