美文网首页程序员
gitlab通过webhook自动部署

gitlab通过webhook自动部署

作者: a68202ac066c | 来源:发表于2018-07-23 01:11 被阅读101次

    前置条件

    最近在撸一个个人项目,虽然是个人项目,但是觉得用ftp传代码不太好,都21世纪了,我们要用现代的方式来管理、部署代码。于是希望能有一个本地push代码之后,线上服务器就能更新代码的功能。

    开发环境如下
    1.本地有一个开发环境
    2.阿里云有个服务器
    3.代码通过gitlab管理
    本文只针对个人开发者,团队开发感觉需要有更加严谨的流程。

    原理、步骤说明

    1、本地发起push请求后,gitlab触发一个钩子
    2、触发gitlab钩子后,使用gitlab webhook调用阿里云服务器的一个链接,例:xxx.example.com/pull.php
    3、pull.php里面执行代码,从gitlab git pull代码

    配置流程

    1.编写服务端脚本

    脚本核心部分如下

    exec("cd /var/www/html/; git pull"); //先定位到相应目录,然后git pull
    

    当然这也并不安全,所以我们需要加上一些验证,在gitlab webhook处可以配置一个token,so,我们加上个token验证

    <?php
    $valid_token = 'secret_token';
    $client_token = $_SERVER['HTTP_X_GITLAB_TOKEN'];
    if ($client_token !== $valid_token) die('Token mismatch!');
    exec("cd /var/www/html/; git pull origin master");
    //exec("cd /var/www/html/; git pull origin master 2>&1", $output);
    //var_dump($output); 这样可以用浏览器调试输出
    ?>
    
    2、给脚本另开个端口

    毕竟这个不是业务代码不是,放在一起总觉得哪里不对劲

    server {
        listen 4567;
        listen [::]:4567;
        
        server_name example.com;
        root /var/www/script;
        index index.html; 
    
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }
       
        location / { 
            try_files $uri $uri/ =404;
        }}
    

    重启一下nginx

    $ nginx -t
    $ /etc/init.d/nginx restart
    
    3、编辑www账户的账号权限
    有几个要注意的地方
    1.开放出去的web根目录www有没有权限编辑?
    2.www 能不能连上gitlab?
    3.脚本里的exec函数有么有被禁用?
    
    第一个问题

    假设项目的web根目录是/var/www/,那我们把这个文件夹交给www账户,不然他是没权限操作的

    $ chown -R www:www /var/www/
    
    第二个问题

    www访问不到正常账户的.ssh文件夹,so 连不上gitlab
    现在我们要登进www账户,创建ssh文件,然后连一下gitlab
    1、放开www账户访问限制

    vim /etc/passwd
    
    ;www:x:22:22:www:/var/www:/usr/sbin/nologin
    www:x:22:22:www:/var/www:/bin/bash
    
    2、生成ssh秘钥

    你能找到这篇文章,我就默认这部你懂啦,把生成的ssh秘钥往gitlab上配一下,然后执行下 git pull把gitlab的公钥记下来
    完成后把www账户的login权限去掉

    第三个问题

    到了这部,如果你的这个文件访问没有任何输出,好像什么事都没有发生的样子,那就去检查下php.ini里面exec函数是否被禁用,改完之后重启下php-fpm

    然后应该就可以用啦

    副记

    1、gitlab的webhook在哪里??

    这个我找了好久,一度以为这个功能被去掉了。
    点进项目后,左侧setting,然后integrations


    image.png

    然后就是配置webhook的界面了


    image.png

    nice~enjoy your self
    如果对你有帮助,点个赞再走啦~

    文章参考https://www.jianshu.com/p/00bc0323e83f,阿里嘎多

    相关文章

      网友评论

        本文标题:gitlab通过webhook自动部署

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