首頁  >  文章  >  php框架  >  關於web hooks伺服器自動拉取程式碼php thinkphp6

關於web hooks伺服器自動拉取程式碼php thinkphp6

藏色散人
藏色散人轉載
2021-06-24 15:18:572261瀏覽

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     //git webhook 自动部署脚本
    $requestBody = file_get_contents("php://input");    //接收数据
    if (empty($requestBody)) {              //判断数据是不是空
        die(&#39;send fail&#39;);
    }
    $content = json_decode($requestBody, true);     //数据转换
    //若是主分支且提交数大于0
    if ($content[&#39;ref&#39;]==&#39;refs/heads/main&#39;) {
     //或将命令加入 shell里,看个人需求 git reset --hard origin/master && git clean -f
        $res = shell_exec(&#39;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

以上是關於web hooks伺服器自動拉取程式碼php thinkphp6的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除