張高毓,張建強
(中國移動通信集團設(shè)計院有限公司山東分公司,山東 濟南 250001)
一種基于Jenkins提升軟件產(chǎn)品安裝服務(wù)質(zhì)量的自動構(gòu)建系統(tǒng)
張高毓,張建強
(中國移動通信集團設(shè)計院有限公司山東分公司,山東 濟南 250001)
隨著《SmartBudget通信工程概預(yù)算軟件》用戶數(shù)的不斷增長和軟件版本的不斷升級,傳統(tǒng)手動打包的方式在效率和正確率上的弊端越來越突出,已經(jīng)不能滿足用戶對安裝服務(wù)質(zhì)量的要求。針對該問題通過構(gòu)建一種基于 Jenkins的自動構(gòu)建系統(tǒng),可以提供更高質(zhì)量的安裝服務(wù),通過與傳統(tǒng)手動打包方式進行對比,自動構(gòu)建系統(tǒng)在效率和正確率上的優(yōu)勢更加突出。
Jenkins;自動構(gòu)建;手動打包;安裝服務(wù)質(zhì)量
為了提高設(shè)計效率,方便設(shè)計人員正確編制預(yù)算[1],中國移動通信集團設(shè)計院有限公司山東分公司全力研發(fā)《SmartBudget通信工程概預(yù)算軟件》[2],以下均簡稱(概預(yù)算軟件)。概預(yù)算軟件一直致力于為用戶提供簡潔、高效和正確的用戶體驗,并為達到該需求不斷進行更新和優(yōu)化,從開發(fā)環(huán)境、開發(fā)框架和數(shù)據(jù)庫均進行了更新和性能提升。
然而,概預(yù)算軟件一直以來采用手動打包的方式為用戶提供安裝程序,這種方式嚴重影響了安裝程序的正確率和打包效率,在時間緊任務(wù)重的情況還會造成開發(fā)人員的資源浪費。基于這種形勢,如何充分發(fā)揮所有開發(fā)人員的能動性,實現(xiàn)概預(yù)算軟件的“四化”,即模塊化、數(shù)字化、自動化和智能化,提高打包效率和軟件版本正確性,實現(xiàn)開發(fā)人員最大價值,進而提升軟件安裝服務(wù)質(zhì)量和運維支撐,已經(jīng)成為急需解決的問題。
本文介紹了一種基于Jenkins的自動構(gòu)建系統(tǒng),實現(xiàn)軟件產(chǎn)品的自動打包,并保證安裝程序的正確性,可以為用戶提供更高質(zhì)量的安裝服務(wù)。另外,通過與傳統(tǒng)手動打包方式在性能上的對比,進一步突出自動構(gòu)建系統(tǒng)的主要優(yōu)勢。
隨著概預(yù)算軟件在中國移動通信集團設(shè)計院有限公司內(nèi)部以及其他通信設(shè)計企業(yè)的廣泛使用,其用戶數(shù)發(fā)生了巨大的變化,用戶安裝使用的反饋也隨之增多,其安裝服務(wù)質(zhì)量已經(jīng)成為衡量其可用性的重要標(biāo)準(zhǔn)。
概預(yù)算軟件共有三個版本,即試用版、設(shè)計院內(nèi)部版和商用版,且每個版本都包含全量安裝包和升級包兩個版本包供用戶選擇使用,所以在進行打包時,需至少進行6次打包。傳統(tǒng)手動打包的流程如圖1所示,開發(fā)人員需要完成代碼的編寫并通過SVN上傳代碼,利用打包軟件NSIS實現(xiàn)手動打包,然后安裝軟件并進行測試,以保證其正確性,測試無誤后最終發(fā)布軟件。
通過圖1完成三個版本的打包,需要重復(fù)進行多次相同操作,而這些操作基本都由開發(fā)人員人工完成,如果在時間緊任務(wù)重的情況下,正確率和效率會大大降低,也造成軟件發(fā)布的速度嚴重減慢,重復(fù)的打包工作無疑又給開發(fā)人員增加了額外的工作量。

圖1 手動打包流程圖Fig.1 The manual packing flow chart
另外,在軟件集中發(fā)布版本期間,為了盡早滿足用戶所需,在最短的時間內(nèi)開發(fā)出完全符合工信部新標(biāo)準(zhǔn)的概預(yù)算軟件,必須持續(xù)為用戶提供試用版本,在試用過程中發(fā)新問題,并不斷優(yōu)化,最緊張的情況一周可能發(fā)布3-4個試用版本。
在這種情況下采用手動打包方式,每次打包時間就要花費半個小時,在緊張的開發(fā)階段,半個小時開發(fā)人員可以完成一個小功能的開發(fā)、一個BUG修復(fù)、一篇說明文檔的編寫等,這在無形中給開發(fā)人員增加了工作量,也增加了開發(fā)人員的心理壓力。另外,由于開發(fā)人員有限,在最緊張時期,為了滿足用戶需求,可能需要多個開發(fā)人員合理完成三個版本的更新,這樣更會造成資源的浪費
Jenkins[3]是一個開源軟件項目,旨在提供一個開放易用的軟件平臺,使持續(xù)集成[4]變成可能經(jīng)濟界,是基于Java開發(fā)的一種持續(xù)集成工具[5],用于監(jiān)控秩序重復(fù)的工作,包括:持續(xù)的軟件版本發(fā)布/測試項目和監(jiān)控外部調(diào)用執(zhí)行的工作。
另外,Jenkins支持一系列SCM工具,包括Git、Mercurial、Subversion以及Clearcase等。用戶可以以該項目為基礎(chǔ)構(gòu)建Apache Ant以及Apache Maven外加其它shell腳本,或者利用Windows批處理文件完成各類預(yù)/后構(gòu)建操作。Jenkins同時也可以作為來自第三方供應(yīng)商的服務(wù)方案,更適合運行在自己的服務(wù)器之上,不僅能夠保證對基礎(chǔ)設(shè)施問題擁有全面控制能力,同時也有助于企業(yè)客戶保障軟件安全水平。
1. Jenkins安裝和配置
安裝:官網(wǎng)下載JDK和Jenkins,并完成安裝,Jenkins安裝完成后,需要在管理工具->服務(wù)中對Jenkins服務(wù)進行啟動,并將Jenkins配置到apache中,通過瀏覽器進行訪問。
配置:在系統(tǒng)管理->管理插件下,根據(jù)項目需要安裝MSBuild和Subversion插件,以保障后面配置的順利進行。
2. 建立SmartBudget項目
新建:點擊新建,輸入項目名稱,完成SmartBudget項目的創(chuàng)建。
配置:對 SmartBudget項目進行配置,包括項動檢索更新的時間。

目名稱、描述,并設(shè)置SVN源代碼的管理路徑。為了實現(xiàn)項目的自動構(gòu)建,需要配置觸發(fā)器,設(shè)置自
SmartBudget項目構(gòu)建完成后的界面如圖 2所示,可以查看項目上次構(gòu)建成功時間、上次構(gòu)建失敗時間、上次構(gòu)建所使用的時間,另外可以查看console、工作空間等基礎(chǔ)信息和配置信息。
SmartBudget項目創(chuàng)建以后,需要根據(jù)概預(yù)算軟件的獨特特性,通過腳本對項目進行深入配置。
1. 自動打包:采用固定的向?qū)0澹ㄟ^編寫腳本auto_package.bat獲取每個版本的基本信息,進而更新向?qū)0澹罱K打包生成實際使用的安裝程序。如圖2所示。

圖2 Smartbudget項目界面Fig.2 The smartbudget UI

圖 自動打包腳本Fig.3 Automatic packaging script
2. 版本切換:通過編寫腳本 change_version.bat,實現(xiàn)對三個版本的自動切換。如圖3所示。
3. 插件檢測:概預(yù)算軟件的正常運行需要用戶操作系統(tǒng)中安裝.NET 4.5.2和VC++2015兩個插件。通過編寫腳本auto_package.bat,自動檢測目標(biāo)系統(tǒng)是否安裝這兩個插件,如果沒有檢測到相應(yīng)的注冊表信息,則直接運行安裝程序進行安裝,如果成功檢測到相應(yīng)注冊表信息,則忽略插件安裝,繼續(xù)完成概預(yù)算軟件的安裝。如圖4所示。
在Jenkins的基礎(chǔ)上,通過腳本文件進行二次開發(fā),完成自動構(gòu)建系統(tǒng)的建設(shè),配置概預(yù)算軟件項目(SmartBudget),搭配SVN代碼管理工具實現(xiàn)軟件的版本更新和自動打包。概預(yù)算軟件通過自動構(gòu)建系統(tǒng)完成版本發(fā)布的流程如圖5所示。

圖4 版本切換腳本Fig.4 Versions switching script

圖5 插件檢測腳本Fig.5 Plug-in Dectection Script

圖6 自動構(gòu)建系統(tǒng)軟件發(fā)布流程圖Fig.6 The flow chart of automatic construction system
自動構(gòu)建系統(tǒng)除了可以完成軟件版本的自動更新、自動打包,還可以通過控制臺輸出直接監(jiān)控打包流程,對打包過程中或者代碼中的錯誤進行提示,使打包流程更加直觀,方便后期查閱。另外,自動構(gòu)建系統(tǒng)可以直接查看每次 SVN代碼上傳的修改記錄,方便開發(fā)人員對代碼進行管理。除此之外還可以設(shè)置自動構(gòu)建的時間,通過循環(huán)對SVN進行監(jiān)控確定是否自動構(gòu)建,例如將監(jiān)控時間設(shè)置為15分鐘,則系統(tǒng)會每15分鐘檢查SVN是否存在代碼上傳,如果存在則直接進行自動構(gòu)建(版本更新和自動打包),否則再等待下一個15分鐘的檢查,如此循環(huán)往復(fù)。
通過自動構(gòu)建系統(tǒng)可以充分節(jié)約人工,方便開發(fā)人員將更多的經(jīng)歷集中到軟件的應(yīng)急開發(fā)和維護當(dāng)中,也提高了整個項目的開發(fā)效率,另外,自動構(gòu)建系統(tǒng)生成正確的軟件版本也同時提升了概預(yù)算軟件的安裝服務(wù)質(zhì)量。
自動構(gòu)建系統(tǒng)和手動打包兩種方式性能上存在明顯差異,下面從兩個方面對這兩種方式進行比較。
一次自動構(gòu)建所需時間如圖 7所示,時長為2分57秒,根據(jù)每次代碼更新內(nèi)容的多少自動構(gòu)建的時間也會有不同,但一般都在5分鐘以內(nèi)。
采用手動打包的方式,新代碼并打包一次一般需要15分鐘,打包六次,并且在不出現(xiàn)意外的情況下也要至少90分鐘。
自動構(gòu)建和手動打包兩種方式在打包時間上的對比圖如圖8所示。可以看到自動構(gòu)建系統(tǒng)打包時間只有手動打包時間的1/18,其速度大大提升。
通過手動打包的方式,由于人工干預(yù),會在不經(jīng)意間選錯選項,或者遺漏某些內(nèi)容,造成打包生成的版本不能正常使用,從而需要重新打包,其正確性在一定程度上是有風(fēng)險的,正確率在80%左右。

圖7 一次自動構(gòu)建完成顯示界面Fig.7 The competion UI for one building

圖8 自動構(gòu)建和手動打包一次時間對比圖Fig.8 Automatic construction system and manual packing comparison diagram
而自動構(gòu)建系統(tǒng)生成的打包文件,只要前期在配置打包數(shù)據(jù),編寫打包腳本時保證正確,在后期的自動打包過程中就可以保證100%的正確性。
通過對自動構(gòu)建系統(tǒng)和手動打包兩種方式在打包時間和打包正確率兩種性能上的比較發(fā)現(xiàn),自動構(gòu)建系統(tǒng)在打包時間和正確率上都遠遠優(yōu)于手動打包方式,通過自動構(gòu)建系統(tǒng)打包生成的概預(yù)算軟件的正確率的保證,更能提升軟件的安裝服務(wù)質(zhì)量。
基于 Jenkins的自動構(gòu)建系統(tǒng)既能保證打包的正確性、完整性,還可以為開發(fā)人員提供更多的額外支撐,只需要簡單的配置和腳本編寫就可以實現(xiàn)復(fù)雜多變的功能,將原本 1.5小時一次的安裝服務(wù)包手工打包時間,直接替換為無需人工干預(yù)的自動打包,在消除大量人工操作時間的同時,又提升了打包過程的標(biāo)準(zhǔn)化程度,最終為用戶提供了高質(zhì)量的概預(yù)算軟件的安裝服務(wù)。
[1] 中華人民共和國工業(yè)和信息化部. 《信息通信建設(shè)工程預(yù)算定額》[S]. 2017.2.
[2] 中華人民共和國工業(yè)和信息化部. 《信息通信建設(shè)工程概預(yù)算編制規(guī)程》[S]. 2017.2.
[3] Jobn Ferguson Smart, 郝樹偉, 于鎮(zhèn)苓譯. Jenkins權(quán)威指南[M]. 電子工業(yè)出版社. 2016.
[4] 徐仕成. 持續(xù)集成在現(xiàn)代軟件開發(fā)中的應(yīng)用與研究[D].中南大學(xué), 2007.
[5] 吳文平. 持續(xù)集成在項目開發(fā)中的應(yīng)用研究[J]. 硅谷, 2011,15.
[6] 陶鎮(zhèn)威. 基于Jenkins的持續(xù)集成研究與應(yīng)用[D]. 華南理工大學(xué), 2012.
[7] Joe Enos. 自動化構(gòu)建: 一致性關(guān)鍵之道[EB/OL]. 2013.
[8] 徐萌. 持續(xù)集成在現(xiàn)代企業(yè)軟件開發(fā)中的研究與實現(xiàn)[D].中國海洋大學(xué), 2013.
[9] 張力文. 基于Jenkins的項目持續(xù)集成方案研究與實現(xiàn)[D].西安交通大學(xué), 2017.
[10] 卞孟春. 基于Jenkins的持續(xù)集成方案設(shè)計與實現(xiàn)[D]. 中國科學(xué)院大學(xué), 2014.
[11] 段清蛇, 李筠. 基于Jenkins的持續(xù)集成測試環(huán)境插件開發(fā)[M]. 段清蛇李筠. 信息技術(shù), 2013.
An Automatic Construction System Based on Jenkins to Improve The Quality of Installation Service for Software Product
ZHANG Gao-yu, ZHANG Jian-qiang
(China Mobile Group Design Institute Co., Ltd. Shandong Branch, JiNan 250001, China)
As the user growth and version updating ceaselessly of the SmartBudget software, the defects of traditional manual packing on the efficiency and accuracy was more and more outstanding. What's more, this way already couldn't meet the requirements of service qulity from users. An automatic construction system based on Jenkins, can provide a higher quality of installation services. In addition through the comparation with the traditional manual packaging, automatic construction system can provide more advantages in efficiency and accuracy.
Jenkins; Construction automatically; Package manually; The quality of installation servic
TP311
A
10.3969/j.issn.1003-6970.2017.12.033
本文著錄格式:張高毓,張建強. 一種基于Jenkins提升軟件產(chǎn)品安裝服務(wù)質(zhì)量的自動構(gòu)建系統(tǒng)[J]. 軟件,2017,38(12):175-179
張高毓(1990-),中國移動通信集團設(shè)計院有限公司山東分公司,咨詢設(shè)計師,主要負責(zé)咨詢設(shè)計平臺工具和軟件的研發(fā)和支撐;張建強(1974-),中國移動通信集團設(shè)計院有限公司山東分公司,高級咨詢設(shè)計師,研發(fā)項目負責(zé)人。