php與githook實現自動更新

  • 2020 年 3 月 27 日
  • 筆記

githook

git系統倉庫一般都會支持這個hook配置,在發生事件的時候觸發執行,可以是https推送等通知形式。

我們使用gitee+php來達到自動更新項目代碼的需求。

用戶組和權限

  • php 是以 www 用戶組運行在系統上的,

如果我們使用php的函數 shell_exec("cd /www/wwwroot/xxxx && sudo git pull origin master"); 來執行的話會返回NULL。執行失敗

  • git 屬於 root 用戶組

在php中使用git會因為權限而失敗

解決方案:

編輯/etc/sudoers文件,如下:

root    ALL=(ALL)       找到這一行,在下方加入一行:  www     ALL=NOPASSWD:/usr/bin/git     這一行的意思是讓www用戶組可以不用密碼使用git

此時可以使用git客戶端。如下可以正常返回,但是執行pull的時候還是返回NULL

var_dump(shell_exec("git version"));

涉及文件夾權限,沒有權限更改文件

  • 可以將文件夾設置777權限 或者歸屬為www用戶組
  • 在php shell_exec 執行中加入sudo
<?php    $json =  file_get_contents("php://input");    $array = json_decode($json , true);    if (isset($array['ref']) && $array['total_commits_count']>0 && isset($array['password']) && $array['password'] == 'xxxxxxx'){      $res = shell_exec("cd /www/wwwroot/default/testHook/yanpay && sudo git pull origin master");      var_dump( $res) ;  }