這裏寫自定義目錄標題
webhooks實現自動拉取文件
-
在自己的項目上創建一個可以訪問的api(坑:不允許Get請求);
api代碼// 部署根目錄 $target = 'xxx'; // 部署密鑰 $token = 'xxx'; //(此處新建webhooks的時候自定義的); // 部署分支 $branch = 'master';//(需要拉去的分支) //判斷token是否正確 $XCodeupToken = request()->header('X-Codeup-Token'); $request_token = isset($XCodeupToken) ? $XCodeupToken : ''; if ($token !== $request_token) { info('token不正確');die; } // 分支判斷 $arr = file_get_contents('php://input', 'r'); $arr = json_decode($arr, true); if (JSON_ERROR_NONE !== json_last_error()) { info('JSON_ERROR_NONE');die; } if(isset($arr['ref'])){ $ref = $arr['ref']; }else{ info('ref不存在'); die; } $ref = explode('/', $ref); $ref = array_pop($ref); if ($branch != $ref) { info('branch不等ref');die; } //此處2>&1 失敗會返回錯誤信息 try{ $cmd = "cd $target && git pull 2>&1"; exec($cmd,$out,$status); info('cmd:'.json_encode($out)); info('cmd:'.$status); }catch (\Exception $e){ info('錯誤信息:'.$e->getMessage()); } $res_log = "---------------------------------------------------------------".PHP_EOL; $res_log .= PHP_EOL."pull start ---------------------------------------------".PHP_EOL; $res_log .= '------------------------------------------------------------'.PHP_EOL; $res_log .= '-----------當前時區:' . date_default_timezone_get(); $res_log .= $arr['user_name'] . ' 在' . date('Y-m-d H:i:s') . '向' . $arr['repository']['name'] . '項目的' . $arr['ref'] . '分支push了' . $arr['total_commits_count'] . '個commit:'; $res_log .= '------------------------------------------------------------'.PHP_EOL; $res_log .= "pull end -----------------------------------------------------".PHP_EOL; info($res_log);
2.在碼雲/git/阿里雲效或者其他代碼管理處新建webhooks,填寫api,自定義token和需要觸發的事件
3.保存完之後查看歷史(可以看到頭部信息以及等其他參數)
4.點擊測試webhooks(阿里雲效code 爲例子 )
5. 2>&1(命令結尾一定要加上這個,要不然拉取失敗你找不到原因)
6. exec( c m d , cmd, cmd,out, s t a t u s ) ; status); status);cmd:命令 $out:命令標準輸出內容 $status:狀態成功1:失敗0
7. 招到報錯信息就好辦了
8. 如果拉取失敗報錯error: cannot open .git/FETCH_HEAD: Permission denied
9. 請進入根目錄輸入ll -lh .git/FETCH_HEAD 查看當前git的用戶和用戶組
10. .git/FETCH_HEAD的用戶和用戶組必須要和根目錄的一致,否則沒權限拉取
11. sudo chown -R xxx:xxx 根目錄
12. sudo chown xxx:xxx .git (此時已解決權限問題)
13. 下一個錯誤是( fatal: could not read Username for ‘https://codeups.aliyuna.com’: No such device or address)
14. 進入項目目錄輸入:vi .git/config編輯
15:url格式一點要按照上圖所述(https://用戶名:密碼@codeup.aliyun.com/xxxxxxxxxxx/mus.git)
16:此時再回去測試已經成功了