<?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);
}
![](//img-blog.csdn.net/20180316220227685)
- 将代码保存为webhook.php 文件
- 在码云上配置第二种图片的信息
- 将webhook.php文件放在服务器上面(必须保证浏览器可访问)
- 推送一个分支bfinger到码云,然后合并到master分支(不要推到master分支,最好设置master分支为只读/默认分支)
- 查看服务器上的日志文件(在代码第14行可设置保存位置)