美文网首页
(GitLab系列四)gitlab设置代码自动部署

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

作者: 回眸淡然笑 | 来源:发表于2019-08-27 17:17 被阅读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 ===============
    
    

    代表自动部署成功

    相关文章

      网友评论

          本文标题:(GitLab系列四)gitlab设置代码自动部署

          本文链接:https://www.haomeiwen.com/subject/pjseectx.html