很多大公司的系統新功能發布部署使用jenkins服務,個人小項目使用jenkins太重,jenkins對機器配置要求較高,我這服務器1G沒法用。
不使用jenkins的話,碼雲平台gitee上可以使用提供的webhook來觸發系統部署構建。
首先需要注冊一個gitee碼雲平台的賬號,新建倉庫后,倉庫的“管理” - “webHooks” 點擊新建。
URL輸入更新腳本地址,比如我這里是http://deploy.xxx.com/easyswoole_secret.php,可以選擇WebHook密碼或者簽名密鑰。
使用WebHook密碼可能導致請求被截獲泄漏,這里采用簽名密鑰。

構建腳本內容:
<?php /** * 自動更新鈎子 * 修改密鑰及項目路徑即可使用 **/ //以流的方式讀取 $requestBody = file_get_contents("php://input"); if (empty($requestBody)) { die('send fail'); } //file_put_contents('./requestBody.log', $requestBody); $requestBody = json_decode($requestBody,true); //加密字符串 $secret_post = $requestBody['sign']; //時間戳參數,單位毫秒級 $time_stamp = $requestBody['timestamp']; //在WebHooks簽名密鑰一欄填寫的密鑰信息 $access_token = 'xxx'; //加密文檔 //https://gitee.com/help/articles/4290 $secret_join = $time_stamp . "\n" . $access_token; //file_put_contents('./join.log', $secret_join); $base64 = base64_encode(hash_hmac('sha256', $secret_join, $access_token, true)); //file_put_contents('./base64.log' , $base64); //看推送的是哪個分支就構建哪個分支 //如有需要可以更改規則,比如屏蔽某些分支不構建 $branch = str_replace('refs/heads/', '', $requestBody['ref']); $requestBody = null; // 打開網站目錄下的hooks.log文件 需要在服務器上創建 並給寫權限 $fs = fopen('/opt/log/deploy_webhooks_pull.log', 'a'); fwrite($fs, date('Y-m-d H:i:s') . ' ================ Update Start ===============' . PHP_EOL);// 請求ip $client_ip = $_SERVER['REMOTE_ADDR']; // 把請求的IP和時間寫進log fwrite($fs, date('Y-m-d H:i:s') . ' Request on [' . date("Y-m-d H:i:s") . '] from [' . $client_ip . ']' . PHP_EOL); // 驗證token 有錯就寫進日志並退出 if ($base64 !== $secret_post) { fwrite($fs, date('Y-m-d H:i:s') . " Invalid token [{$client_token}]" . PHP_EOL); $fs and fclose($fs); header("HTTP/1.1 404 Not Found"); header("Status: 404 Not Found"); exit; } // 如果有需要 可以打開下面,把傳送過來的信息寫進log 可用於調試,測試成功后注釋即可 // fwrite($fs, 'Data: ' . print_r($data, true) . PHP_EOL); // 執行shell命令並把返回信息寫進日志 $output = shell_exec('cd /opt/www/kunswoole/; git pull origin ' . $branch . ' 2<&1; chown -R www:www /opt/www/kunswoole/*;');
fwrite($fs, date('Y-m-d H:i:s') . 'Info:' . print_r($output, true) . PHP_EOL);
fwrite($fs, date('Y-m-d H:i:s') . '================ Update End ===============' . PHP_EOL . PHP_EOL);
$fs and fclose($fs); // 調試時打開 // echo json_encode($output);
首次構建前需要/opt/www目錄下使用git clone命令將倉庫代碼克隆到服務器上。
本地mac修改代碼提交后,可在gitee上看到構建記錄:

