用gitlab的webhooks更新网站

2025-05-25 0 90

git有hooks钩子,但不太喜欢用ftp或者http方式同步更新其他服务器的网站。所以选择了gitlab,因为gitlab有webhooksgithub也有webhooks,不过github太高富帅了,还是自己搭一个gitlab,安全又放心,关键是免费。

操作过程如下:

我的是php

要放在服务器上的目录: /home/wwwroot/mysite

在项目跟目录下面新建一个hooks.php,输入以下代码

//网站目录
  
$www_file=\'/home/wwwroot/mysite/\';
  
//打开网站目录下的hooks.log文件 需要在服务器上创建 并给写权限
  
$fs = fopen($www_file.\'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\');
  
//获取请求端的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 master && git pull origin master 2>&1\");
fwrite($fs, \'Info:\'. $output.PHP_EOL);
  
fwrite($fs,PHP_EOL. \'================ Update End ===============\'.PHP_EOL.PHP_EOL);
  
$fs and fclose($fs);

做完这些后,就可以push到gitlab端了

有个问题说明一下,对于MVC来说,gitlab的请求并不会走路由,所以不要用路由方式来加这个文件

接着登陆网站服务器

$ vi /etc/passwd

查看这个文件,然后查看www的根目录

我这里是 /home/www

运行which git 我这里得到 /usr/local/bin/git

记住这两个目录

接着把gitlab中项目的ssh key对应的秘匙id_rsa放入/home/www/.ssh里

.ssh需要700的权限

$ chmod -R 700 .ssh

接着给网站目录www权限

$ chown -R www:www /home/wwwroot/mysite

进入网站目录

cd /home/wwwroot/mysite

初始化git 并设置权限

$ git init
$ chmod -R g+s .git
$ chown -R www:www .git

接着配置git

$ git remote add origin

完成上面的操作后就可以手动自行第一次pull操作了 从远程获取

sudo -u www /usr/local/bin/git pull origin master

最后进入gitlab中项目settings设置 在web hooks里

URL写

http://www.mysite.com/hooks.php?token=s7kjjhh8767laq29KLJK9089883hjjkgfdrrpipoinmw
这里的token要和你在hooks.php的token一致

做完这些以后就可以pull了,做一次提交,看是不是同时自动更新了网站

最后:如果web hooks不能正常工作的话,可以看下hooks.log看下执行的信息

补充两个问题:

1.在手动创建/home/www/.ssh 文件夹后,不能忘了改变这个文件夹的所有者,不然会出现无法写入know_hosts的问题

$chown -R www:www /home/www/.ssh

2.因为代码中使用到了shell_exec这个函数,一般配置php的时候都禁止了,需要打开shell_exec

在php.ini的disable_functions 的列表里删除shell_exec

再重新启动php-fpm服务就可以了

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 用gitlab的webhooks更新网站 https://www.kuaiidc.com/51226.html

相关文章

发表评论
暂无评论