一、Jenkins 簡介
當每月發布次數變得越來越多時,如超過 200 次,發布工作人員的工作量會翻倍,此時由人工發布操作失誤引起的風險會變得越來越大。為了提高項目的發布效率,也為了降低由人工操作失誤帶來的風險,需要引進持續集成工具。
Jenkins 是一個用 Java 語言編寫的開源持續集成工具,最開始被稱作 Hudson。Jenkins 在持續集成領域市場份額中居於主導地位,被各種大小規模的團隊用於用各種語言實現的各類項目中,語言包括.NET、Java、Ruby、Groovy、Grails、PHP 等。選擇 Jenkins 的理由如下:
- 易於使用:Jenkins 的用戶界面簡單、直觀、友好,發布工作人員只需要通過簡單的 UI 操作就可以替代原來繁瑣的發布工作。
- 擁有良好的擴展性:提供數以百計的開源插件可供使用,而且幾乎每周會有新的開源插件貢獻進來,這些插件的安裝都十分快捷和簡單。
- 發展良好:Jenkins 開源社區的規模變得越來越大、活躍度也變得越來越高,發展速度非常快。
二、Jenkins 插件及相關工具
1、Jenkins:持續集成工具。
2、Git:源代碼管理工具,是目前流行的分布式版本控制系統。需要安裝的 Jenkins 插件有:
3、TFS:可選,源代碼管理工具。
4、MSBuild:Visual Studio 中自帶的一個程序編譯組件。需要安裝的 Jenkins 插件是 MSBuild Plugin 插件。
5、FTP:可選,通過 FTP 把編譯好的發布文件部署到應用服務器中。需要安裝的 Jenkins 插件是 Publish Over FTP 插件。
6、Jenkins 角色及權限管理:需要安裝的 Jenkins 插件是 Role-based Authorization Strategy 插件。
7、Python 腳本:自寫的 Python 腳本放在 Jenkins 服務器中。可以實現 Jenkins 把編譯好的發布文件部署到遠程應用站點服務器,以及實現回滾操作 Rollback。
8、PxExec.exe 工具:裝在 Jenkins 服務器中,利用這個工具,可以在遠程服務器中執行命令如 xcopy。
9、SoapUI 自動化測試:用於接口測試自動化,同時需要安裝的 Jenkins 插件是 HTML Publisher plugin 插件。
10、回滾操作 Rollback:需要安裝的 Jenkins 插件是 Build with Parameters,用於指定哪個項目回滾到哪個備份版本。
三、Jenkins 關鍵配置
3.1、郵件配置
Email 是 Jenkins 最基本的通知技術。什么情況下,需要 Jenkins 發送電子郵件通知?例如,在一個構建失敗(例如因為編譯錯誤)后。
3.2、角色及權限管理
首先設置全局角色和項目角色,其中 Pattern 是用來設置構建作業名的命名規范,例如:規定了構建作業名的命名規范是{發布環境}.{產品線英文名全稱}.{項目名},那么要發到生產環境、屬於 Trip 產品線的所有構建作業,其 Pattern 設置的值為【(?i)prod.trip.*】,表示構建作業名必須以 prod.trip 開頭,而且不區分大小寫,用於發布到生產環境。
然后,分別為 Jenkins 賬號分派全局角色和項目角色:
3.3、部署到集群
Jenkins 通過運行自寫的 Python 腳本把編譯好的發布文件部署到遠程應用站點服務器中,以及同步到集群內其他應用站點服務器,所以需要新增構建步驟配置,參考如下:
其中,.py 腳本(即 Python 腳本)內容如下:
.py 腳本實現了如下邏輯:
第 1 步、備份:
在遠程應用站點服務器中,備份將要部署新版本的那個應用系統的所有文件。利用 PxExec.exe 工具,讓 Jenkins 服務器遠程連到應用站點服務器。然后在這台應用站點服務器中,利用 xcopy 命令,把將要部署新版本的這個應用系統站點目錄之下的所有文件拷貝到這台應用站點服務器中的備份目錄下。
第 2 步、部署:
部署到這台遠程應用站點服務器。先利用 xcopy 命令,把由 Jenkins 編譯好的、位於 Jenkins 服務器的文件拷貝到這台應用站點服務器共享目錄之下,以.config 結尾的配置文件不會被拷貝。再利用 PxExec.exe 工具,讓 Jenkins 服務器遠程連到這台應用站點服務器。然后在這台應用站點服務器中,利用 xcopy 命令,把臨時存放目錄下的文件拷貝到這個應用系統站點目錄之下。
第 3 步、同步:
同步發布文件到該應用系統集群內的其他應用站點服務器。利用 PxExec.exe 工具,讓 Jenkins 服務器遠程連到這台應用站點服務器,然后在這台應用站點服務器中,利用 xcopy 命令,把該應用系統站點目錄下的所有文件拷貝到集群內的其他應用站點服務器的該應用系統站點目錄之下。
3.4、SoapUI 接口自動化測試
測試用例提交到版本庫(如 Git)后,通過 Jenkins 把它編譯,編譯后,通過 SoapUI 一鍵調用,開始自動化測試。一旦自動化測試完成,會生成報表,通過 HTML Report 把它給呈現出來,如下圖所示。
3.5、UFT 界面自動化測試
3.6、回滾操作 Rollback
General 配置:
構建配置:
選擇將要回滾哪個項目以及回滾到哪個備份版本號:
3.7、暫未解決的問題
- 1、數據庫發布與回滾。
- 2、應用配置文件的發布與回滾。
- 3、加入 QA 流程控制,經過測試工程師確定后,方可發布。
以上三個問題也可以借助其它工具來實現,分別是數據庫發布工具、集中式配置服務、流程管理工具甚至郵件確認。
四、總結,Jenkins 使用價值
- 減少發布工作人員的大量日常工作量,大大提高項目的發布效率。
- 不容易出錯,降低人工發布帶來的風險。
- 可 24 小時隨時發布。
- 方便緊急修復或回滾操作 Rollback。
- 方便對發布流程進行控制、標准化。
- 方便發布統計、歷史版本可追溯。
五、更多資料
- Jenkins 官網:https://jenkins.io/index.html
- SoapUI 官網:https://www.soapui.org/
轉自:http://www.infoq.com/cn/articles/architecture-practice-11-jenkins