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:
訪問後,若是能返回git執行的信息,就表示成功了。接下來就是配置gitlab的webhooks。
爲支持多個項目 配置了project參數,能夠部署多個項目。只須要在gitlab鉤子中配置時,使用不一樣的project參數。
Gitlab配置鉤子
觸發通常選擇合併請求事件
部署完成後,修改/etc/passwd文件,將www用戶修改成nologin便可!