碼雲webhook自動更新腳本

<?php

/**
 * 自動更新鉤子
 */

// 接收的信息
$json = $GLOBALS['HTTP_RAW_POST_DATA'];
$data = json_decode($json, true);

if ($data['state'] == 'merged' && $data['merge_status'] == 'can_be_merged') {

    //打開網站目錄下的hooks.log文件 需要在服務器上創建 並給寫權限
    $fs = fopen('./../../webhook/example.log', 'a');

    fwrite($fs, '================ Update Start ===============' . PHP_EOL . PHP_EOL);

    //自定義字串掩碼 用於驗證
    $access_token = '433b88e8d85291';

    $client_token = $data['password'];

    // 請求ip
    $client_ip = $_SERVER['REMOTE_ADDR'];

    //把請求的IP和時間寫進log
    fwrite($fs, 'Request on [' . date("Y-m-d H:i:s") . '] from [' . $client_ip . ']' . PHP_EOL);

    //驗證token 有錯就寫進日誌並退出
    if ($client_token !== $access_token) {
        echo "error 403";
        fwrite($fs, "Invalid token [{$client_token}]" . PHP_EOL);
        $fs and fclose($fs);
        exit(0);
    }

    //如果有需要 可以打開下面,把傳送過來的信息寫進log
    fwrite($fs, 'Data: ' . print_r($data, true) . PHP_EOL);

    //執行shell命令並把返回信息寫進日誌
    exec('sudo -u www git pull origin master 2<&1', $output);
    fwrite($fs, 'Info:' . print_r($output, true) . PHP_EOL);

    fwrite($fs, PHP_EOL . '================ Update End ===============' . PHP_EOL . PHP_EOL);

    $fs and fclose($fs);

    echo json_encode($output);
}

  1. 將代碼保存爲webhook.php 文件
  2. 在碼雲上配置第二種圖片的信息
  3. 將webhook.php文件放在服務器上面(必須保證瀏覽器可訪問)
  4. 推送一個分支bfinger到碼雲,然後合併到master分支(不要推到master分支,最好設置master分支爲只讀/默認分支)
  5. 查看服務器上的日誌文件(在代碼第14行可設置保存位置)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章