gitlab配置自動同步
阿新 • • 發佈:2017-08-23
增加 沒有 -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配置自動同步