gitlab java同步分支_gitlab配置自动同步

如果需要同步到生产环境,请做额外处理,如自动化测试,测试通过再同步。

$project = trim($_GET['project']);

if (empty($project)) {

die('project not exist.');

}

//网站目录

$www_file='/home/wwwroot/' . $project . '/';

//打开网站目录下的hooks.log文件 需要在服务器上创建 并给写权限

$fs = fopen('./hooks.log', 'a');

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

//自定义字串掩码 用于验证

$access_token = 's7kjjhh8767laq29KLJK9089883hjjkgfdrrpipoinmw';

//接受的ip数组,也就是允许哪些IP访问这个文件 这里是gitlab服务器IP

$access_ip = array('8.8.8.8', '119.23.153.156');

//获取请求端的ip和token

$client_token = $_GET['token'];

$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);

exit(0);

}

//验证ip

if ( !in_array($client_ip, $access_ip))

{

echo "error 503";

fwrite($fs, "Invalid ip [{$client_ip}]".PHP_EOL);

exit(0);

}

//获取请求端发送来的信息,具体格式参见gitlab的文档

$json = file_get_contents('php://input');

$data = json_decode($json, true);

//如果有需要 可以打开下面,把传送过来的信息写进log

//fwrite($fs, 'Data: '.print_r($data, true).PHP_EOL);

//执行shell命令并把返回信息写进日志

$output=shell_exec("cd $www_file && git checkout dev-master && git pull origin dev-master 2>&1");

fwrite($fs, 'Info:'. $output.PHP_EOL);

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

$fs and fclose($fs);

实际上gitlab的钩子post的数据包含了更多内容,上面只是做一个简单的同步。

nginx配置

server {

listen 80;

server_name 你的ip;

charset utf-8;

#access_log logs/host.access.log main;

root /home/wwwroot/hooks;

index index.html index.htm index.php ;

error_log logs/hooks.err.log;

location / {

if (!-e $request_filename) {

rewrite ^(.*)$ /index.php?s=$1 last;

break;

}

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

location ~ [^/]\.php(/|$) {

fastcgi_pass unix:/tmp/php-cgi.sock;

fastcgi_index index.php;

include fastcgi_params;

set $real_script_name $fastcgi_script_name;

if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {

set $real_script_name $1;

set $path_info $2;

}

fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;

fastcgi_param SCRIPT_NAME $real_script_name;

fastcgi_param PATH_INFO $path_info;

}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {

expires 30d;

access_log off;

}

location ~ .*\.(js|css)?$ {

expires 7d;

access_log off;

}

}

项目配置

为项目设置自动更新

在gitlab项目设置里面,点击"Web钩子"

链接填写http://ip地址/hooks.php?token=s7kjjhh8767laq29KLJK9089883hjjkgfdrrpipoinmw&project=xiaomi

上面链接的xiaomi是对应服务器的/home/wwwroot/下的xiaomi目录

私密授权码填写: s7kjjhh8767laq29KLJK9089883hjjkgfdrrpipoinmw

触发选项:

勾选 "推送事件"

勾选 "标签推送事件"

其余留空

反选 "开启SSL证书验证"

点击 "增加Web钩子" 按钮

在最下面的Web钩子列表,点击测试,200则没有问题

token和上面php代码里面的一致,project是服务器上的项目目录名,默认路径/home/wwwroot

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值