• 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

  • 相关阅读:
    web.py利用模板的详细步骤
    Arduino入门笔记(9):蓝牙模块及第一辆蓝牙遥控小车
    Python常用模块之sys
    使用Supervisor管理Linux进程
    Python socket聊天室程序
    Ubuntu 文件文件夹查看权限和设置权限
    python遍历目录
    linux tail命令的使用方法详解
    Python使用openpyxl读写excel文件
    python中enumerate()的用法
  • 原文地址:https://www.cnblogs.com/eleven24/p/7416418.html
Copyright © 2020-2023  润新知