Gitlab 自動化部署
原理介紹
- 配置gitlab當push動作的時候,訪問服務器上的一個鏈接比如www.shenke.group/hook.php
- hook.php里面寫着一行代碼,會讓服務器git pull相應項目的代碼到web目錄。
- pull結束,代碼就在web目錄了,我們只要重新訪問網站就可以了。
核心就是push的時候,gitlab會調用服務器上的腳本,服務器上的腳本就會從git重新拉取項目文件。同時還需要加入安全性的設計。
配置ssh秘鑰
首先查看nginx和php的默認執行用戶,分別查看對應的文件nginx.conf和php-fpm.conf即可,一般是www用戶,以www用戶為例。修改/etc/passwd文件,使www用戶具有可登錄權限,如下:

由上圖中的配置改為:

當自動化部署完成后,要該回到原來的配置,因為www用戶默認是不允許登錄服務器的。
按以下步驟操作:
- 執行 su www 命令切換為www用戶。
- 執行 ssh-keygen 命令,將生成的公鑰(位置在/home/www目錄下),添加到gitlab中的項目中

注意:
1. 這里一定要是www用戶的秘鑰!
2. 進入到項目根目錄所在目錄,cd /var/www ,更改項目目錄web所屬用戶和用戶組,執行命令
chown -R www:www web
服務器腳本
編寫hook.sh 內容如下(這是簡單版本):

使用www用戶進行測試,執行 bash hook.sh 命令,測試能否進行拉取代碼。如果成功,下一步就是通過鈎子執行此腳本。
PHP執行腳本
php通過exec函數執行腳本代碼hook.php。需要調用exec函數,如果發現不成功,有可能php.ini配置中禁用了exec函數,重新開啟即可。具體操作可自行百度。
hook.php:

接下來通過瀏覽器訪問測試:
http://www.shenke.group/webhook.php?token=1a6ee29164a6f02c8c03e4462a7d43c0&project=web
訪問后,如果能返回git執行的信息,就表示成功了。接下來就是配置gitlab的webhooks。
為支持多個項目 配置了project參數,可以部署多個項目。只需要在gitlab鈎子中配置時,使用不同的project參數。
Gitlab配置鈎子

觸發一般選擇合並請求事件
部署完成后,修改/etc/passwd文件,將www用戶修改為nologin即可!