git自動化部署之webhooks的使用(php版本)

weixin_34402408發表於2016-05-06

在github的webhooks中設定對應資訊

  • 設定要請求的伺服器命令呼叫地址, 如: http://fizzday.net/webhooks
  • 設定金鑰key, 如: fizzday

在伺服器上編寫對應的命令(純PHP程式碼)

  • 編寫 http://fizzday.net/webhooks 請求的方法如下:
<?php
// GitHub Webhook Secret.
// Keep it the same with the 'Secret' field on your Webhooks / Manage webhook page of your respostory.
$secret = "";
// 專案根目錄, 如: "/var/www/fizzday"
$path = "";
// Headers deliveried from GitHub
$signature = $_SERVER['HTTP_X_HUB_SIGNATURE'];
if ($signature) {
    $hash = "sha1=" . hash_hmac('sha1', $HTTP_RAW_POST_DATA, $secret);
    if (strcmp($signature, $hash) == 0) {
        echo shell_exec("cd {$path} && /usr/bin/git reset --hard origin/master && /usr/bin/git clean -f && /usr/bin/git pull 2>&1");
        exit();
    }
}
http_response_code(404);
  • 命令說明:
shell_exec("cd {$path} && /usr/bin/git reset --hard origin/master && /usr/bin/git clean -f && /usr/bin/git pull 2>&1");

/usr/bin/git reset --hard origin/master 強制恢復版本到前一個穩定版
/usr/bin/git clean -f 清理提交的更改
/usr/bin/git pull 2>&1 拉取最新的版本到本地

也可以呼叫本地指令碼

建立shell指令碼檔案webhooks.sh, 並寫入:

#!/bin/bash
 
WEB_PATH='/var/www/fizzday'
WEB_USER='nginx'
WEB_USERGROUP='nginx'
 
echo "Start deployment"
cd $WEB_PATH
echo "pulling source code..."
git reset --hard origin/master
git clean -f
git pull
git checkout master
echo "changing permissions..."
chown -R $WEB_USER:$WEB_USERGROUP $WEB_PATH
echo "Finished."

相關文章