webhooks實現自動拉取文件

這裏寫自定義目錄標題

webhooks實現自動拉取文件

  1. 在自己的項目上創建一個可以訪問的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:此時再回去測試已經成功了














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