搭建基於碼雲gitee平台代碼自動部署


  很多大公司的系統新功能發布部署使用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上看到構建記錄:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM