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

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

目名稱、描述,并設置SVN源代碼的管理路徑。為了實現項目的自動構建,需要配置觸發器,設置自
SmartBudget項目構建完成后的界面如圖 2所示,可以查看項目上次構建成功時間、上次構建失敗時間、上次構建所使用的時間,另外可以查看console、工作空間等基礎信息和配置信息。
SmartBudget項目創建以后,需要根據概預算軟件的獨特特性,通過腳本對項目進行深入配置。
1. 自動打包:采用固定的向導模板,通過編寫腳本auto_package.bat獲取每個版本的基本信息,進而更新向導模板,最終打包生成實際使用的安裝程序。如圖2所示。

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

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

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

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

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

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

圖8 自動構建和手動打包一次時間對比圖Fig.8 Automatic construction system and manual packing comparison diagram
而自動構建系統生成的打包文件,只要前期在配置打包數據,編寫打包腳本時保證正確,在后期的自動打包過程中就可以保證100%的正確性。
通過對自動構建系統和手動打包兩種方式在打包時間和打包正確率兩種性能上的比較發現,自動構建系統在打包時間和正確率上都遠遠優于手動打包方式,通過自動構建系統打包生成的概預算軟件的正確率的保證,更能提升軟件的安裝服務質量。
基于 Jenkins的自動構建系統既能保證打包的正確性、完整性,還可以為開發人員提供更多的額外支撐,只需要簡單的配置和腳本編寫就可以實現復雜多變的功能,將原本 1.5小時一次的安裝服務包手工打包時間,直接替換為無需人工干預的自動打包,在消除大量人工操作時間的同時,又提升了打包過程的標準化程度,最終為用戶提供了高質量的概預算軟件的安裝服務。
[1] 中華人民共和國工業和信息化部. 《信息通信建設工程預算定額》[S]. 2017.2.
[2] 中華人民共和國工業和信息化部. 《信息通信建設工程概預算編制規程》[S]. 2017.2.
[3] Jobn Ferguson Smart, 郝樹偉, 于鎮苓譯. Jenkins權威指南[M]. 電子工業出版社. 2016.
[4] 徐仕成. 持續集成在現代軟件開發中的應用與研究[D].中南大學, 2007.
[5] 吳文平. 持續集成在項目開發中的應用研究[J]. 硅谷, 2011,15.
[6] 陶鎮威. 基于Jenkins的持續集成研究與應用[D]. 華南理工大學, 2012.
[7] Joe Enos. 自動化構建: 一致性關鍵之道[EB/OL]. 2013.
[8] 徐萌. 持續集成在現代企業軟件開發中的研究與實現[D].中國海洋大學, 2013.
[9] 張力文. 基于Jenkins的項目持續集成方案研究與實現[D].西安交通大學, 2017.
[10] 卞孟春. 基于Jenkins的持續集成方案設計與實現[D]. 中國科學院大學, 2014.
[11] 段清蛇, 李筠. 基于Jenkins的持續集成測試環境插件開發[M]. 段清蛇李筠. 信息技術, 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提升軟件產品安裝服務質量的自動構建系統[J]. 軟件,2017,38(12):175-179
張高毓(1990-),中國移動通信集團設計院有限公司山東分公司,咨詢設計師,主要負責咨詢設計平臺工具和軟件的研發和支撐;張建強(1974-),中國移動通信集團設計院有限公司山東分公司,高級咨詢設計師,研發項目負責人。