zoukankan      html  css  js  c++  java
  • 自动化发布-GitLab WEB Hooks 配置

    钩子(hooks)

    hooks是在特定事件发生之前或之后执行特定脚本代码功能(从概念上类比,就与监听事件、触发器之类的东西类似)。

    Git hooks就是那些在Git执行特定事件(如commit、push、receive等)后触发运行的脚本。

    gitlab的web hooks跟git hook类型。也是当项目发生提交代码、提交tag等动作会自动去调用url,这个url可以是更新代码,或者其他操作。

    配置目的

    由于系统属于后台接口系统,开发提交完git仓库后要实时的部署到测试环境,这时候就需要用到gitlab的web hooks自动更新部署了。

    • 客户端:要自动更新的测试服务器IP:192.168.1.2
    • 服务端:gitlab服务器IP:192.168.1.1
    • Gitlab Version 7.13.0.pre
    • Gitlab-Shell Version:2.6.3

    步骤如下:

    1. 在客户端上配置Apache配置文件,为web hooks添加一个访问接口
    #vim /usr/local/apache/conf/httpd.conf
    
    listen 81
    <VirtualHost *:81>
              ServerAdmin localhost
              DocumentRoot "/www/gitlab_web"
           <Directory "/www/gitlab_web">
                Options -Indexes +FollowSymLinks
                AllowOverride None
                Order allow,deny
                Allow from all
              </Directory>
           RewriteEngine on
    </VirtualHost>

      2.在服务端gitlab上面为客户端添加gitlab新账号,然后将生产的公钥添加到gitl的账号里面

    (profile setting→SSH  Keys →add ssh key)
    #su - webuser
    #ssh-keygen -t rsa
    进入项目目录
    #cd /path/project
    初始化git仓库 
    #git clone git@192.168.1.1:test/test_api.git

      3.在客户端上面添加接口文件

    #vim /www/gitlab_web/index.php
    
    <?php
    //作为接口传输的时候认证的密钥
    $valid_token = 'd49dfa762268687eb2ca59498ce852';
    //调用接口被允许的ip地址
    $valid_ip = array('192.168.1.1','10.17.10.175','112.112.112.112');
    $client_token = $_GET['token'];
    $client_ip = $_SERVER['REMOTE_ADDR'];
    $fs = fopen('./auto_hook.log', 'a');
    fwrite($fs, 'Request on ['.date("Y-m-d H:i:s").'] from ['.$client_ip.']'.PHP_EOL);
    if ($client_token !== $valid_token)
    {
        echo "error 10001";
        fwrite($fs, "Invalid token [{$client_token}]".PHP_EOL);
        exit(0);
    }
    if ( ! in_array($client_ip, $valid_ip))
    {
        echo "error 10002";
        fwrite($fs, "Invalid ip [{$client_ip}]".PHP_EOL);
        exit(0);
    }
    $json = file_get_contents('php://input');
    $data = json_decode($json, true);
    fwrite($fs, 'Data: '.print_r($data, true).PHP_EOL);
    fwrite($fs, '======================================================================='.PHP_EOL);
    $fs and fclose($fs);
    //这里也可以执行自定义的脚本文件update.sh,脚本内容可以自己定义。
    //exec("/bin/sh /root/updategit.sh");
    exec("cd  /path/project;/usr/bin/git pull");

      4.访问接口,测试接口是否成功。

    http://192.168.1.2:81/?token=d49dfa7622681425fbcbdd687eb2ca59498ce852

      5.查看客户端日志

    #cat /www/gitlab_web/auto_hook.log
    =======================================================================
    Request on [2015-07-03 14:05:02] from [112.122.112.112]
    Data: 
    =======================================================================

      6.在服务端gitlab服务器上面添加web hooks

    admin area->projects->test/edit->WEB Hooks->add WEB Hooks

     

      7.提交修改代码到gitlab仓库,然后查看日志、查看测试环境是否更新

    #cat /www/gitlab_web/auto_hook.log
    Request on [2015-07-03 14:13:37] from [12.123.12.3]
    Data: Array
    (
        [object_kind] => push
        [before] => e5988b5dce7a038
        [after] => d8ce92ac4ab4ba046dd
        [ref] => refs/heads/master
        [checkout_sha] => d8ceefd5c4ab4ba046dd
        [message] => 
        [user_id] => 7
        [user_name] => test
        [user_email] => test@qq.com
        [project_id] => 3
        [repository] => Array
            (
                [name] => test_api
                [url] => git@192.168.1.1:test/test.api
                [description] => test.com product code
                [homepage] => http://xx./test_api
                [git_http_url] => http://xx./test_api 
                [git_ssh_url] => git@112.23.23.1:test.git
                [visibility_level] => 10
            )
    
        [commits] => Array
            (
                [0] => Array
                    (
                        [id] => d8cec4ab4ba046dd
                        [message] => 测试gitlab的web hook接口。
    
                        [timestamp] => 2015-07-03T14:13:51+08:00
                        [url] => http://xxxx/test_api/commit/d8ce95c4ab4ba046dd
                        [author] => Array
                            (
                                [name] => test
                                [email] => test@qq.com
                            )
    
                    )
    
            )
    
        [total_commits_count] => 1
    )

     PS:注意事项:

    1:配置完成后。调用接口的时候没有自动更新到测试环境。可以使用apache的运行用户测试命令是否可以执行成功

    #su - webuser
    #cd /path/project
    #git pull

    2:如果Apache的用户无法执行命令或者更新git代码,请检查一下Apache的用户的shell以及PHP是否支持exec调用shell命令。

    原文地址:https://mp.weixin.qq.com/s?__biz=MzIxNDE4NDg0Ng==&mid=405872601&idx=2&sn=1b7392ef541e044e8e60bd0695cf430a&scene=24&srcid=0407Gq48cxRCWvJmt1qV5Klb#rd

  • 相关阅读:
    xml基础一
    FileStream
    串口、COM口、RS232、RS485、USB区别
    DotNet知识点五
    DotNet知识点四
    DotNet知识点三
    DotNet知识点二
    day02 关键字、添加注释、标识符、常量、变量、变量的定义、变量定义注意事项、转义字符
    day01
    22_Map集合(重点)
  • 原文地址:https://www.cnblogs.com/skymyyang/p/8033812.html
Copyright © 2011-2022 走看看