概述
之前基於 GitLab + Jenkins 實現了簡單的 NGINX 的自動化釋出。
具體包含如下的元件:
- GitLab
- 包括 GItLab 的 WebHook;
- Jenkins 及其外掛:
- Generic Webhook Trigger
- Publish Over SSH
?疑問:
為什麼不用 Ansible?
答:這裡說明下,之所以不用 Ansible,是因為這個環境預設沒有安裝 Ansible,而且 Publish Over SSH 也足夠用了,就沒再用 Ansible 了。
詳細說明
這裡有 3 個幾個自動化 job,如下:
說明:
配置 WebHook
以test-intranet-nginx
為例進行說明.
- 進入該專案 -> 設定 -> 整合. 如下圖:
- URL裡填入:
https://jenkins.example.com/generic-webhook-trigger/invoke?token=Jdy0bTQafyfUUBxJw33k
(假設 jenkins.example.com 是 Jenkins 的控制檯域名,token 可以在對應的 Jenkins 外掛 Generic Webhook Trigger 中找到,這裡 token 是用於區別具體是哪個 job。) - Trigger 選擇: Push events -> master.
- 按需取消勾選 Enable SSL verification. 儲存. 如下:
說明:
URL地址可以在 Jenkins的對應外掛裡找到.
Trigger可以按需調整.
在 Jenkins 的 系統配置裡 -> Publish over SSH:
如下圖:
填入:
- Key
- SSH Server的:
- name(用於給 jenkins 使用者識別的使用者名稱)
- Hostname(目標機器的 IP 地址)
- Username(目標機器的 OS 使用者)
- Remote Directory(需要把檔案傳送到的目標機器的目錄地址)
說明:
一般情況下,對於 NGINX, 目錄是2個, 為:
/etc/nginx
(放配置*.conf
) 和/usr/share/nginx/html
(放靜態 web 檔案)
以下圖 Job 為例:
首先配置 原始碼管理, 如下圖:
填入:
- 倉庫 URL
- 認證資訊(如果是公開的庫, 就不需要認證資訊)
- 分支:
master
(按需調整) - 原始碼庫的資訊:
- 本例中,型別是:
gitlab
- URL
- GitLab 的 Version
- 本例中,型別是:
然後配置 構建觸發器, 如下圖:
說明:
詳細使用請在瀏覽器輸入圖中的 URL 進一步檢視.
- Variable (使用預設配置)
- Expression (使用預設配置)
- Token
- Expression(解釋如下: 用於進行目錄過濾,填入正則後,只有目錄匹配正則且發生變化才會觸發構建)
- Text (預設配置)
最後, 是 構建後操作(實際「構建」過程沒做任何事情). 如下圖:
注意:
如果有多臺 nginx 要同時發, 就要在這裡同時寫上多臺 SSH Server.
- Name: 下拉框選擇對應Name
- Transfers
- Source files: 原始檔, 位於:
iaas_web_xxxx/conf/**/*
- Remove prefix: 需要移除的字首, 為:
iaas_web_xxxx/
. 移除後, 示例為:conf/nginx.conf
- Remote directory: 不填寫就是之前填寫的目錄, 一般為
/etc/nginx
. 那麼示例就釋出到:/etc/nginx
+conf/nginx.conf
, 即:/etc/nginx/conf/nginx.conf
- Exec command: 檔案傳輸過去後需要執行的命令. 為:
nginx -t && nginx -s reload
(或:sudo systemctl reload nginx
). 即, 先-t
驗證配置是否有語法錯誤, 然後再reload
釋出. 如果驗證有問題, jenkins pipeline 會異常, 變黃或變紅.
- Source files: 原始檔, 位於:
釋出流程
- 使用者透過 IDE + Git, 在自己本地修改 NGINX Conf, 並最終
push
或merge
(也會觸發push
的動作) 到master
上 - GitLab 接收到
push
event, 觸發 webhook 呼叫:https://example.com/generic-webhook-trigger/invoke?token=Jdy0bTQafyfUUBxJw33k
- Jenkins 收到 webhook trigger. 並結合 filter 的 Expression 進行判斷,確認匹配,則開始自動啟動一次 Job.
- 該 Job 過程為:
- 將存有 nginx 配置的倉庫 pull 到 jenkins.
- 透過 Publish over SSH, 將相關目錄和檔案傳輸到 SSH Server 的指定目錄
- 執行 nginx 命令, 進行釋出.
- 結束.
提示:
如果因為其他異常, 導致未自動釋出,那麼也可以手動點選 Job 頁面的: 立即構建 進行手動觸發
可以透過首圖的 rss 訂閱: Atom feed 失敗, 這樣釋出失敗你就會及時收到郵件.
三人行, 必有我師; 知識共享, 天下為公. 本文由東風微鳴技術部落格 EWhisper.cn 編寫.