1. 程式人生 > >gitlab配置自動同步

gitlab配置自動同步

增加 沒有 -c unix int php代碼 expire index 反選

如果需要同步到生產環境,請做額外處理,如自動化測試,測試通過再同步。

<?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

gitlab配置自動同步