<?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);
}
- 將代碼保存爲webhook.php 文件
- 在碼雲上配置第二種圖片的信息
- 將webhook.php文件放在服務器上面(必須保證瀏覽器可訪問)
- 推送一個分支bfinger到碼雲,然後合併到master分支(不要推到master分支,最好設置master分支爲只讀/默認分支)
- 查看服務器上的日誌文件(在代碼第14行可設置保存位置)