(GitLab系列四)gitlab设置代码自动部署

2019-08-27  本文已影响0人  回眸淡然笑
1 给www用户登录shell权限
cd /etc/passwd

将www这条信息的/usr/sbin/nologin修改为/bin/bash(前提是有www用户,如果没有www用户,需要添加一个www用户)

2 给www用户添加秘钥

上一篇中生成的秘钥是在root账户下生成的,所以www用户是没有权限访问的,切换到www用户

su www

重写生成一次秘钥,同样的,将公钥保存到gitlab中
上一章中忘记将项目的权限分配给www了,另开一个窗口,登录root账户,这里操作以下步骤

chmod -R 777 /项目
chown -R www:www /项目

进入项目根目录,尝试使用git

git pull
3 创建webHooks.php和hooks.log

创建一个webHooks.php用于gitlab自动推送,我这里单独给webHooks.php分配了地址
/home/www/hook/project/webHooks.php,同时创建/home/www/hook/project/hooks.log

<?php
error_reporting(E_ERROR);
//网站目录
$www_file='/home/www/project/';

//打开网站目录下的hooks.log文件,需要在服务器上创建,并给写权限
$fs = fopen('/home/www/hook/project/hooks.log', 'a');

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

//自定义字串掩码 用于验证
$access_token = 'QhNO8YHqym5PHQQsexapF7041xOhzm62DRH';

//接受的ip数组,也就是允许哪些IP访问这个文件 这里是gitlab服务器IP
$access_ip = 'XXX.XXX.XXX.XXX';

//如果使用www.xxx.com/xxx.php?token=xxxxxxx 的方式来传送验证字符串,则用这个方法获取
# $client_token = $_GET['token'];

// 获取请求端的secret token
$client_token = $_SERVER["HTTP_X_GITLAB_TOKEN"];

//获取请求端的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);
     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 pull 2>&1");
fwrite($fs, 'Info:'. $output.PHP_EOL);

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

$fs and fclose($fs);

?>
4 为webHooks.php 设置访问域名

在 /usr/local/nginx/conf/vhost新加一个project.hook.XXX.com.conf配置文件

server
    {
        listen 80;
        server_name project.hook.XXX.com;
        root /home/www/hook/project;
        index index.html webhooks.php; 
    }

重启nginx
在域名解析上添加该解析。

5 gitlab添加hook的url

登录gitlab,进入项目后,点击设置,点击集成,将上步的域名填入,同时将webHooks中设置的token填入安全令牌,并取消勾选SSL 证书验证


配置钩子

添加完成后,在web钩子列表点击test,出现如下字样,标识连通了地址


image.png
6 开启shell_exec函数

打开php.ini找到disable_functions,将shell_exec移除
现在测试自动部署功能
在你本机修改数据后push到gitlab,打开服务器上的hooks.log,如果出现

================ Update Start ===============

Request on [2019-08-27 08:59:44] from [118.190.78.158]
Info:From gitlab.XXX.com:root/prostudy
   3a691e9..c29f3a7  master     -> origin/master
Updating 3a691e9..c29f3a7
Fast-forward
 .env.example | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)


================ Update End ===============

代表自动部署成功

上一篇下一篇

猜你喜欢

热点阅读