Git Webhook自動部署專案

Mr-houzi發表於2020-07-28

為什麼用 Webhook ?僅想向測試服自動拉取程式碼,不需要構建、測試,簡單就好。

搜了網上的 Webhook 程式碼,有的既用到了php,又用到了shell,感覺太複雜,自己才疏學淺看不懂,於是就想自己寫一個簡單的,能用就行。

程式碼

直接上程式碼

// webhook-dev/index.php

$token = 'XXX'; // 金鑰

if (isset($_SERVER['HTTP_X_GITLAB_TOKEN']) && $_SERVER['HTTP_X_GITLAB_TOKEN'] != $token){
    die('token 不正確');
}

parse_str($_SERVER['QUERY_STRING'], $query);
if (!isset($query['project'])){
    die('請指明專案');
}

$branch = isset($query['branch']) ? $query['branch'] : 'dev';
$command = "cd ../{$query['project']} && git pull origin {$branch}";

echo shell_exec($command);

如何使用

把 webhook 單獨作為一個專案,通過引數可以拉取不同的專案、分支、標籤。

  1. webhook-dev 專案 與 其他專案在同級目錄
  2. 指定拉取專案和分支,query 引數如下
    • project 專案名
    • branch 分支或標籤,預設 dev

通過 nginx 單獨為 webhook-dev 配置域名或者ip埠,eg:webhook.vm.com。如要拉取專案(目錄名) 為hello,分支為 dev,則連結為

http(s)://webhook.vm.com?project=project1&branch=dev

特別注意許可權問題,由於 web 訪問的使用者和使用者組為 www ,一定要確保 www 使用者擁有拉取的專案中 .git 目錄的許可權。

通過 postman 訪問連結,Headers 中設定 X-Gitlab-Token 為自己的金鑰,與程式碼中保持一致。出現以下類似的 git 資訊,則視為部署成功。

Updating abc123..abc123
Fast-forward
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

接下來進入 gitlab 專案下 Settings->Integrations頁面,把剛才得到的連結填入 URL 框中,Secret Token 填入自己的金鑰。

嘗試本地提交一下程式碼,你會發現已經自動通過 Webhook 拉取到測試服了。

PS

git 地址使用 Https 會要求輸入密碼,執行以下程式碼。然後手動在測試服拉取,輸入密碼後會被記錄。之後就可以用 Webhook 自動拉取。

git config --global credential.helper store
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章