Gitlab配置webhooks實現自動化部署


原理介紹

  1. 配置gitlab當push動作的時候,訪問服務器上的一個鏈接比如www.xxxxxx.com/hook.php
  2. hook.php里面寫着一行代碼,會讓服務器git pull相應項目的代碼到web目錄。
  3. pull結束,代碼就在web目錄了,我們只要重新訪問網站就可以了。
    核心就是push的時候,gitlab會調用服務器上的腳本,服務器上的腳本就會從git重新拉取項目文件。同時還需要加入安全性的設計。
 
配置ssh秘鑰
    首先查看nginx和php的默認執行用戶,分別查看對應的文件nginx.conf和php-fpm.conf即可,一般是www用戶,以www用戶為例。
    修改/etc/passwd文件,使www用戶具有可登錄權限,如下:
 
   將上圖內容修改為:
   
  當自動化部署完成后,要該回到原來的配置,因為www用戶默認是不允許登錄服務器的。
按以下步驟操作:
  1. 執行 su www 命令切換為www用戶。
  2. 執行 ssh-keygen 命令(有確認項,有的輸入yes,沒有就回車),將生成的公鑰(位置在/home/www目錄下 cat /home/www/.ssh/id_rsa.pub),添加到gitlab中的項目

注意:

1. 這里一定要是www用戶的秘鑰!
2. 進入到項目根目錄所在目錄,cd /home/wwwroot/  ,更改項目目錄web所屬用戶和用戶組,執行命令
  chown -R www:www web   web是你自己的項目文件  
服務器腳本
    編寫hook.sh 內容如下(這是簡單版本):
   cd  你自己的項目路徑     這個文件可以有多個,看你有幾個項目,配合下面的php文件使用
使用www用戶進行測試,執行 bash hook.sh 命令,測試能否進行拉取代碼。如果成功,下一步就是通過鈎子執行此腳本。
PHP執行腳本
    php通過exec函數執行腳本代碼hook.php。需要調用exec函數,如果發現不成功,有可能php.ini配置中禁用了exec函數,重新開啟即可。具體操作可自行百度。
    hook.php:
  
<?php

//作為接口傳輸的時候認證的密鑰
$valid_token  = 'shfdksjdakjshdfjknvkja';
$client_token = $_GET['token'];
$project      = $_GET['project'];   //多個項目
$client_ip    = $_SERVER['REMOTE_ADDR'];

$fs = fopen('./auto_hook.log', 'a');
fwrite($fs, '============================開始==============================='.PHP_EOL);
fwrite($fs, '時間:'.date("Y-m-d H:i:s", time()).',請求來自:['. $client_ip.']'.PHP_EOL);

if ($client_token !== $valid_token) {
	fwrite($fs, "TKOEN 錯誤-- [{$client_token}]".PHP_EOL);
	fclose($fs);
	exit(0);
}

$json = file_get_contents("php://input");
$data = json_decode($json, true);
fwrite($fs, 'Data: '.print_r($data, true).PHP_EOL);

//這里也可以執行自定義的腳本文件updata.sh,腳本內容可以自定義
switch ($project) {
	case 'web':
		$res = exec("/home/www/hook.sh", $result);
		break;
}

fwrite($fs, 'Data:'. print_r($result, true).PHP_EOL);
fwrite($fs, '============================結束==============================='.PHP_EOL);
fclose($fs);
var_dump($result);

  接下來通過瀏覽器訪問測試:http://www.xxxxx.com/webhook.php?token=shfdksjdakjshdfjknvkja&project=web

訪問后,如果能返回git執行的信息,就表示成功了。接下來就是配置gitlab的webhooks。
為支持多個項目 配置了project參數,可以部署多個項目。只需要在gitlab鈎子中配置時,使用不同的project參數。
觸發事件自己選擇
部署完成后,修改/etc/passwd文件,將www用戶修改為nologin即可!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM