gitlab-webhook-php使用

本文介绍了如何在PHP环境中配置GitLab webhook实现自动部署。主要步骤包括修改php运行环境,创建钩子php文件,设置GitLab webhook,进行权限调试以及配置deploy key。详细指南参考GitLab-webhook-PHP相关文档。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过gitlab的webhook进行项目自动部署的作用,本地提交代码后自动同步到服务器。避免每次重复登录服务器pull代码

1、php运行环境修改

修改php.ini 中disable_functions 将exec,system删掉。或者将disable_functions注释掉


2、建立钩子php文件

新建文件gitlab_webhook.php

<?php

/* security */
$access_token = 'MmNmMGWERQeowTerEnljoERmMGIRTRYiEy=';
//ip地址为gitlab服务器请求地址
$access_ip = array({server});

/* get user token and ip address */
$client_token = $_REQUEST['token'];
$client_ip = $_SERVER['REMOTE_ADDR'];
//查询服务器运行的php-fpm用户和文件所属权限是否一致
//print_r($_SERVER);

//文件记录日志
/* create open log */
$fs = fopen('./webhook.log', 'a');
fwrite($fs, 'Request on ['.date("Y-m-d H:i:s").'] from ['.$client_ip.']'.PHP_EOL);

/* test token */
if ($client_token !== $access_token)
{
    echo "error 403";
    fwrite($fs, "Invalid token [{$client_token}]".PHP_EOL);
    exit(0);
}

/* test ip*/
if ( ! in_array($client_ip, $access_ip))
	{
    echo "error 503";
    fwrite($fs, "Invalid ip [{$client_ip}]".PHP_EOL);
    exit(0);
	} 

//git push 时触发的json数据,可参考gitlab中web_hooks介绍
/* get json data */
$json = file_get_contents('php://input');
$data = json_decode($json, true);

/* get branch */
$branch = $data["ref"];
fwrite($fs, '======================================================================='.PHP_EOL);
/* if you need get full json input */
//fwrite($fs, 'DATA: '.print_r($data, true).PHP_EOL);

/* branch filter */
if ($branch === 'refs/heads/master')
{
	/* if master branch*/
	fwrite($fs, 'BRANCH: '.print_r($branch, true).PHP_EOL);
	fwrite($fs, '======================================================================='.PHP_EOL);
	$fs and fclose($fs);
	/* then pull master */
	system("cd {projects} && git checkout master");
	system("git pull");
		
} else {
	/* if devel branch */
	fwrite($fs, 'BRANCH: '.print_r($branch, true).PHP_EOL);
	fwrite($fs, '======================================================================='.PHP_EOL);
	$fs and fclose($fs);
	/* pull devel branch */
	system("cd {projects} && git checkout develop");
	system("git pull origin develop:develop");
}
?>


3、gitlab中设置webhook



在gitlab的Webhooks内设置url链接。追加token参数与程序校验时使用,其他参数可以自己选择,点击“AddWebhook”后

可以点击“test hook”

通过ssh查看服务器,可以看到项目目录下webhook.log文件。证明Webhook配置成功,如果代码更新成功Ok,否,继续4、权限调试

4、权限调式

1、首先确认执行php程序的用户,可以用

ps aux | gerp php-fpm 查看
可以 
var_dump($_SERVER) ;
可以
通过phpinfo()查看

最终确保,php、nginx、项目目录输入同一用户。


5、配置deploy key

# sudo -u www ssh-keygen -t  rsa
...
#cat /home/www/.ssh/id_rsa.pub

将此公钥拷贝到gitlab中的Deploy Keys中保存



测试能否成功即可,权限问题最容易出问题


参考文档:

GitLab-webhook-PHP 详解 GitLab Webhooks 自动部署应用服务器

通过gitlab的webhook进行项目的自动部署


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值