PHP執行git命令更新代碼

背景:

開發中我們想推送代碼到git倉庫的時候,在測試環境立馬就能看到是什麼樣的,我們可以通過git倉庫的webhook鉤子配置的,在推送代碼到git倉庫的時候,倉庫收到代碼,然後可以訪問一個url,然後你在這個url寫段代碼執行更新代碼的命令。

php 代碼

<?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 再更新代碼。

如果不配置sudo的話,上面這段更新git代碼是100%無法正常使用的,因爲sudo要root密碼,那我們只想給git相關的命令在用sudo執行的時候不用密碼,其他sudo命令一定要密碼怎麼辦?

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章