文末有本專題系列文章
當(dāng)每月發(fā)布次數(shù)變得越來(lái)越多時(shí),如超過(guò) 200 次,發(fā)布工作人員的工作量會(huì)翻倍,此時(shí)由人工發(fā)布操作失誤引起的風(fēng)險(xiǎn)會(huì)變得越來(lái)越大。為了提高項(xiàng)目的發(fā)布效率,也為了降低由人工操作失誤帶來(lái)的風(fēng)險(xiǎn),需要引進(jìn)持續(xù)集成工具。
Jenkins 是一個(gè)用 Java 語(yǔ)言編寫(xiě)的開(kāi)源持續(xù)集成工具,最開(kāi)始被稱作 Hudson。Jenkins 在持續(xù)集成領(lǐng)域市場(chǎng)份額中居于主導(dǎo)地位,被各種大小規(guī)模的團(tuán)隊(duì)用于用各種語(yǔ)言實(shí)現(xiàn)的各類項(xiàng)目中,語(yǔ)言包括.NET、Java、Ruby、Groovy、Grails、PHP 等。選擇 Jenkins 的理由如下:
易于使用:Jenkins 的用戶界面簡(jiǎn)單、直觀、友好,發(fā)布工作人員只需要通過(guò)簡(jiǎn)單的 UI 操作就可以替代原來(lái)繁瑣的發(fā)布工作。
擁有良好的擴(kuò)展性:提供數(shù)以百計(jì)的開(kāi)源插件可供使用,而且?guī)缀趺恐軙?huì)有新的開(kāi)源插件貢獻(xiàn)進(jìn)來(lái),這些插件的安裝都十分快捷和簡(jiǎn)單。
發(fā)展良好:Jenkins 開(kāi)源社區(qū)的規(guī)模變得越來(lái)越大、活躍度也變得越來(lái)越高,發(fā)展速度非常快。
1、Jenkins:持續(xù)集成工具。
2、Git:源代碼管理工具,是目前流行的分布式版本控制系統(tǒng)。需要安裝的 Jenkins 插件有:
3、TFS:可選,源代碼管理工具。
4、MSBuild:Visual Studio 中自帶的一個(gè)程序編譯組件。需要安裝的 Jenkins 插件是 MSBuild Plugin 插件。
5、FTP:可選,通過(guò) FTP 把編譯好的發(fā)布文件部署到應(yīng)用服務(wù)器中。需要安裝的 Jenkins 插件是 Publish Over FTP 插件。
6、Jenkins 角色及權(quán)限管理:需要安裝的 Jenkins 插件是 Role-based Authorization Strategy 插件。
7、Python 腳本:自寫(xiě)的 Python 腳本放在 Jenkins 服務(wù)器中??梢詫?shí)現(xiàn) Jenkins 把編譯好的發(fā)布文件部署到遠(yuǎn)程應(yīng)用站點(diǎn)服務(wù)器,以及實(shí)現(xiàn)回滾操作 Rollback。
8、PxExec.exe 工具:裝在 Jenkins 服務(wù)器中,利用這個(gè)工具,可以在遠(yuǎn)程服務(wù)器中執(zhí)行命令如 xcopy。
9、SoapUI 自動(dòng)化測(cè)試:用于接口測(cè)試自動(dòng)化,同時(shí)需要安裝的 Jenkins 插件是 HTML Publisher plugin 插件。
10、回滾操作 Rollback:需要安裝的 Jenkins 插件是 Build with Parameters,用于指定哪個(gè)項(xiàng)目回滾到哪個(gè)備份版本。
3.1、郵件配置
Email 是 Jenkins 最基本的通知技術(shù)。什么情況下,需要 Jenkins 發(fā)送電子郵件通知?例如,在一個(gè)構(gòu)建失?。ɡ缫?yàn)榫幾g錯(cuò)誤)后。
3.2、角色及權(quán)限管理
首先設(shè)置全局角色和項(xiàng)目角色,其中 Pattern 是用來(lái)設(shè)置構(gòu)建作業(yè)名的命名規(guī)范,例如:規(guī)定了構(gòu)建作業(yè)名的命名規(guī)范是{發(fā)布環(huán)境}.{產(chǎn)品線英文名全稱}.{項(xiàng)目名},那么要發(fā)到生產(chǎn)環(huán)境、屬于 Trip 產(chǎn)品線的所有構(gòu)建作業(yè),其 Pattern 設(shè)置的值為【(?i)prod.trip.*】,表示構(gòu)建作業(yè)名必須以 prod.trip 開(kāi)頭,而且不區(qū)分大小寫(xiě),用于發(fā)布到生產(chǎn)環(huán)境。
然后,分別為 Jenkins 賬號(hào)分派全局角色和項(xiàng)目角色:
3.3、部署到集群
Jenkins 通過(guò)運(yùn)行自寫(xiě)的 Python 腳本把編譯好的發(fā)布文件部署到遠(yuǎn)程應(yīng)用站點(diǎn)服務(wù)器中,以及同步到集群內(nèi)其他應(yīng)用站點(diǎn)服務(wù)器,所以需要新增構(gòu)建步驟配置,參考如下:
其中,.py 腳本(即 Python 腳本)內(nèi)容如下:
.py 腳本實(shí)現(xiàn)了如下邏輯:
第 1 步、備份:
在遠(yuǎn)程應(yīng)用站點(diǎn)服務(wù)器中,備份將要部署新版本的那個(gè)應(yīng)用系統(tǒng)的所有文件。利用 PxExec.exe 工具,讓 Jenkins 服務(wù)器遠(yuǎn)程連到應(yīng)用站點(diǎn)服務(wù)器。然后在這臺(tái)應(yīng)用站點(diǎn)服務(wù)器中,利用 xcopy 命令,把將要部署新版本的這個(gè)應(yīng)用系統(tǒng)站點(diǎn)目錄之下的所有文件拷貝到這臺(tái)應(yīng)用站點(diǎn)服務(wù)器中的備份目錄下。
第 2 步、部署:
部署到這臺(tái)遠(yuǎn)程應(yīng)用站點(diǎn)服務(wù)器。先利用 xcopy 命令,把由 Jenkins 編譯好的、位于 Jenkins 服務(wù)器的文件拷貝到這臺(tái)應(yīng)用站點(diǎn)服務(wù)器共享目錄之下,以.config 結(jié)尾的配置文件不會(huì)被拷貝。再利用 PxExec.exe 工具,讓 Jenkins 服務(wù)器遠(yuǎn)程連到這臺(tái)應(yīng)用站點(diǎn)服務(wù)器。然后在這臺(tái)應(yīng)用站點(diǎn)服務(wù)器中,利用 xcopy 命令,把臨時(shí)存放目錄下的文件拷貝到這個(gè)應(yīng)用系統(tǒng)站點(diǎn)目錄之下。
第 3 步、同步:
同步發(fā)布文件到該應(yīng)用系統(tǒng)集群內(nèi)的其他應(yīng)用站點(diǎn)服務(wù)器。利用 PxExec.exe 工具,讓 Jenkins 服務(wù)器遠(yuǎn)程連到這臺(tái)應(yīng)用站點(diǎn)服務(wù)器,然后在這臺(tái)應(yīng)用站點(diǎn)服務(wù)器中,利用 xcopy 命令,把該應(yīng)用系統(tǒng)站點(diǎn)目錄下的所有文件拷貝到集群內(nèi)的其他應(yīng)用站點(diǎn)服務(wù)器的該應(yīng)用系統(tǒng)站點(diǎn)目錄之下。
3.4、SoapUI 接口自動(dòng)化測(cè)試
測(cè)試用例提交到版本庫(kù)(如 Git)后,通過(guò) Jenkins 把它編譯,編譯后,通過(guò) SoapUI 一鍵調(diào)用,開(kāi)始自動(dòng)化測(cè)試。一旦自動(dòng)化測(cè)試完成,會(huì)生成報(bào)表,通過(guò) HTML Report 把它給呈現(xiàn)出來(lái),如下圖所示。
3.5、UFT 界面自動(dòng)化測(cè)試
3.6、回滾操作 Rollback
General 配置:
構(gòu)建配置:
選擇將要回滾哪個(gè)項(xiàng)目以及回滾到哪個(gè)備份版本號(hào):
3.7、暫未解決的問(wèn)題
1、數(shù)據(jù)庫(kù)發(fā)布與回滾。
2、應(yīng)用配置文件的發(fā)布與回滾。
3、加入 QA 流程控制,經(jīng)過(guò)測(cè)試工程師確定后,方可發(fā)布。
以上三個(gè)問(wèn)題也可以借助其它工具來(lái)實(shí)現(xiàn),分別是數(shù)據(jù)庫(kù)發(fā)布工具、集中式配置服務(wù)、流程管理工具甚至郵件確認(rèn)。
減少發(fā)布工作人員的大量日常工作量,大大提高項(xiàng)目的發(fā)布效率。
不容易出錯(cuò),降低人工發(fā)布帶來(lái)的風(fēng)險(xiǎn)。
可 24 小時(shí)隨時(shí)發(fā)布。
方便緊急修復(fù)或回滾操作 Rollback。
方便對(duì)發(fā)布流程進(jìn)行控制、標(biāo)準(zhǔn)化。
方便發(fā)布統(tǒng)計(jì)、歷史版本可追溯。
Jenkins 官網(wǎng):
https://jenkins.io/index.html
SoapUI 官網(wǎng):
https://www.soapui.org/
張輝清,10 多年的 IT 老兵,先后擔(dān)任攜程架構(gòu)師、古大集團(tuán)首席架構(gòu)、中青易游 CTO 等職務(wù),主導(dǎo)過(guò)兩家公司的技術(shù)架構(gòu)升級(jí)改造工作?,F(xiàn)關(guān)注架構(gòu)與工程效率,技術(shù)與業(yè)務(wù)的匹配與融合,技術(shù)價(jià)值與創(chuàng)新。
楊麗,擁有多年互聯(lián)網(wǎng)應(yīng)用系統(tǒng)研發(fā)經(jīng)驗(yàn),曾就職于古大集團(tuán),現(xiàn)任職中青易游的系統(tǒng)架構(gòu)師,主要負(fù)責(zé)公司研發(fā)中心業(yè)務(wù)系統(tǒng)的架構(gòu)設(shè)計(jì)以及新技術(shù)積累和培訓(xùn)?,F(xiàn)階段主要關(guān)注開(kāi)源軟件、軟件架構(gòu)、微服務(wù)以及大數(shù)據(jù)。
聯(lián)系客服