關于web hooks服務器自動拉取代碼php thinkphp6

github 準備事項

1.在倉庫settings里添加webhooks

以私人倉庫為例:
關于web hooks服務器自動拉取代碼php thinkphp6

1.創建完倉庫之后,點擊settings。

設置webhooks訪問路徑:
關于web hooks服務器自動拉取代碼php thinkphp6

以我自己項目為例 ,框架使用的是tp6。在public/下創建一個名為basic.php的文件,目的在于當代碼推送至服務器上時,github可以訪問到并且可以執行的一個文件。該文件用于執行shell 命令,在觸發該鏈接時自動執行該文件里的命令,從而實現git 自動拉取。

2.測試鏈接是否生效,文件是否有被訪問到

關于web hooks服務器自動拉取代碼php thinkphp6

如上圖所示,當出現綠色?時表示此鏈接被訪問到,當出現紅色??標志則表示文件沒有被訪問。以此排查鏈接問題還是代碼問題。

  • [x] 至此Github方面完成。

    PHP代碼部署

    1.添加鉤子文件 執行shell命令

    下面展示一些 內聯代碼片。

    立即學習PHP免費學習筆記(深入)”;

<?php     //git webhook 自動部署腳本     $requestBody = file_get_contents("php://input");    //接收數據     if (empty($requestBody)) {              //判斷數據是不是空         die('send fail');     }     $content = json_decode($requestBody, true);     //數據轉換     //若是主分支且提交數大于0     if ($content['ref']=='refs/heads/main') {      //或將命令加入 shell里,看個人需求 git reset --hard origin/master && git clean -f         $res = shell_exec('cd /www/wwwroot/xxxx/ && echo `sudo git pull` >> b.log');//PHP函數執行git命令         $res_log = '-------------------------'.PHP_EOL;         $res_log .= ' 在' . date('Y-m-d H:i:s') . '向' . $content['repository']['name'] . '項目的' . $content['ref'] . '分支push'.$res;         file_put_contents("git-webhook.txt", $res_log, FILE_APPEND);//將每次拉取信息追加寫入到日志里     } ?>
  • [x] ?至此命令 php shell部分已完成,可根據不同項目需求自行調試。

    常見錯誤處理

    1.php.ini 文件里shell 沒有禁用 ?該錯誤比較常見,調試的時候很容易發現,就不再贅述。

    處理方法 將php.ini 里的shell_exec刪除,重啟服務即可。

    2. .git權限問題,將.git/目錄下的文件權限組改成 www

    一般不會出現,當出現權限報錯,建議先檢查一下文件目錄是否為你設置的權限組.如果不是,可以使用一下命令修改文件權限組

    //以www用戶組為例 chown -R www:www file/

    3.權限組問題

    步步排查,當確定前面流程沒有問題 而代碼依然沒有自動拉取時.手動執行以上shell 如果代碼成功拉取,可以排除shell問題。打開日志記錄,如果日志記錄里的內容為空,可以嘗試 使用將老版本替換為新版本的方法

    4.出現類似報錯 Host key verification failed.^M fatal: Could not read from remote rep……

    是因為權限秘鑰出現了問題,在www權限組里沒有創建連接github的公鑰
    這里作者使用的是此方法解決,如果有大佬有其他解決方案,歡迎私信或評論區留言。
    vim 打開 /etc/sudoers ?在root下添加一行 www 執行sudo 權限免密碼
    關于web hooks服務器自動拉取代碼php thinkphp6

    5. 完結,至此你的webhook就可以工作了,修改文件并提交,查詢日志。

    關于web hooks服務器自動拉取代碼php thinkphp6

    本地環境 centos + php7.3 + nginx

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享