zoukankan      html  css  js  c++  java
  • gitlab配置自动同步

    如果需要同步到生产环境,请做额外处理,如自动化测试,测试通过再同步。

    <?php
    
    $project = trim($_GET['project']);
    
    if (empty($project)) {
        die('project not exist.');
    }
    
    //网站目录
    $www_file='/home/wwwroot/' . $project . '/';
    
    //打开网站目录下的hooks.log文件 需要在服务器上创建 并给写权限
    
    $fs = fopen('./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', '119.23.153.156');
    
    //获取请求端的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 dev-master && git pull origin dev-master 2>&1");
    fwrite($fs, 'Info:'. $output.PHP_EOL);
    
    fwrite($fs,PHP_EOL. '================ Update End ==============='.PHP_EOL.PHP_EOL);
    
    $fs and fclose($fs);
    

      

    实际上gitlab的钩子post的数据包含了更多内容,上面只是做一个简单的同步。

    nginx配置

    server {
                    listen       80;
                    server_name  你的ip;
                    charset utf-8;
                    #access_log  logs/host.access.log  main;
                    root /home/wwwroot/hooks;
                    index  index.html index.htm index.php ;
    
                    error_log logs/hooks.err.log;
                    location / {
                            if (!-e $request_filename) {
                                    rewrite ^(.*)$ /index.php?s=$1 last;
                                    break;
                            }
                    }
                    error_page   500 502 503 504  /50x.html;
                    location = /50x.html {
                            root   html;
                    }
    
                    location ~ [^/].php(/|$) {
                       fastcgi_pass   unix:/tmp/php-cgi.sock;
                       fastcgi_index index.php;
                       include fastcgi_params;
                       set $real_script_name $fastcgi_script_name;
                       if ($fastcgi_script_name ~ "^(.+?.php)(/.+)$") {
                               set $real_script_name $1;
                               set $path_info $2;
                       }
                       fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
                       fastcgi_param SCRIPT_NAME $real_script_name;
                       fastcgi_param PATH_INFO $path_info;
                    }
                    location ~ .*.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
                            expires 30d;
                            access_log off;
                    }
                    location ~ .*.(js|css)?$ {
                            expires 7d;
                            access_log off;
               }
    }
    

      

    项目配置

    为项目设置自动更新

    • 在gitlab项目设置里面,点击"Web钩子"
    • 链接填写http://ip地址/hooks.php?token=s7kjjhh8767laq29KLJK9089883hjjkgfdrrpipoinmw&project=xiaomi
    • 上面链接的xiaomi是对应服务器的/home/wwwroot/下的xiaomi目录
    • 私密授权码填写: s7kjjhh8767laq29KLJK9089883hjjkgfdrrpipoinmw

    • 触发选项:

      • 勾选 "推送事件"
      • 勾选 "标签推送事件"
      • 其余留空
      • 反选 "开启SSL证书验证"
    • 点击 "增加Web钩子" 按钮

    • 在最下面的Web钩子列表,点击测试,200则没有问题

    token和上面php代码里面的一致,project是服务器上的项目目录名,默认路径/home/wwwroot

  • 相关阅读:
    素数路径Prime Path POJ3126 素数,BFS
    Fliptile POJ3279 DFS
    Find the Multiple POJ1426
    洗牌Shuffle'm Up POJ3087 模拟
    棋盘问题 POJ1321 DFS
    抓住那只牛!Catch That Cow POJ3278 BFS
    Dungeon Master POJ2251 三维BFS
    Splitting into digits CodeForce#1104A
    Ubuntu下手动安装Nvidia显卡驱动
    最大连续子序列和
  • 原文地址:https://www.cnblogs.com/eleven24/p/7416418.html
Copyright © 2011-2022 走看看