<?php
error_reporting(E_ALL);
date_default_timezone_set('PRC');
$project_map = [
'master' => [
'name' => 'master', # 別名
'access_token' => 'auto-push-master', # 配置鉤子時需要的一個祕鑰,當然也可以不設置
'root' => '/srv/www/api' # 倉庫所在路徑
],
];
// 根據token獲取項目信息
function getProjectInfoByToken($token, $project_map){
$return = [];
foreach ($project_map as $map) {
if ($map['access_token'] == $token) {
$return = $map;
break;
}
}
return $return;
}
// 這裏填你的gitlab服務器ip
$valid_ip = array('127.0.0.1');
// 這是gitlab服務器上配置的access_token
$client_token = $_SERVER['HTTP_X_GITLAB_TOKEN'];
$client_ip = $_SERVER['REMOTE_ADDR'];
// 按照日期生成日誌文件
$file_name = 'webhook.log';
$data = ['time' => date('Y-m-d H:i:s'), 'client_ip' => $client_ip];
$data = array_merge($data, $_POST, $_GET);
$project = getProjectInfoByToken($client_token, $project_map);
$projectNo = empty($project);
$notIp = !in_array($client_ip, $valid_ip);
if ($projectNo || $notIp) {
$data['result'] = $notIp ? 'Ip mismatch!' : 'Token mismatch!';
$log_data = json_encode($data) . PHP_EOL . PHP_EOL;
file_put_contents($file_name, $log_data, FILE_APPEND);
die('Token mismatch!');
}
$root = $project['root'];
$command = "cd " . $root . "; git pull origin master 2>&1"; //我更新的是master分支代碼
$data['command'] = $command;
// 執行shell命令,需要服務器啓用exec函數,默認是關閉的
exec($command, $output);
$data['result'] = $output;
$log_data = json_encode($data) . PHP_EOL . PHP_EOL;
file_put_contents($file_name, $log_data, FILE_APPEND);