姜 文,劉立康
(西安電子科技大學 通信工程學院,陜西 西安 710071)
隨著軟件開發(fā)技術的不斷發(fā)展,軟件持續(xù)集成(Continuous Integration,CI)已經成為軟件開發(fā)過程中的一個重要組成部分。持續(xù)集成技術已經由最初實現(xiàn)簡單的軟件編譯驗證,發(fā)展到目前可以進行軟件源代碼代碼質量監(jiān)控與管理、軟件版本出包、軟件版本集成驗證等各個方面。
云計算[1]是將大量的計算資源、存儲資源等組合形成資源共享池,能夠根據(jù)用戶的需求提供資源,具有便利性、可擴容性、經濟性等優(yōu)勢。由于云計算的優(yōu)點,目前基于云環(huán)境[2-5]的持續(xù)集成已經廣泛應用于各大型軟件企業(yè)。
文中介紹了基于云環(huán)境的持續(xù)集成的運行原理、部署和特點,基于云環(huán)境的持續(xù)集成工程運行過程。以配置管理工具SVN和持續(xù)集成工具ICP-CI為主線敘述基于云環(huán)境的持續(xù)集成。
隨著云計算技術的快速發(fā)展,軟件公司逐漸開始使用私有云虛擬機進行軟件產品的持續(xù)集成,可以根據(jù)軟件產品對持續(xù)集成構建環(huán)境的不同需求提供不同數(shù)量和各種規(guī)格的虛擬機。這些虛擬機可以有不同的操作系統(tǒng)、不同的系統(tǒng)盤與數(shù)據(jù)盤,靈活搭建持續(xù)集成的構建環(huán)境,從而降低軟件產品持續(xù)集成的成本和提高工作效率。私有云虛擬機的硬件設備由公司進行統(tǒng)一分配與管理,降低了設備的管理成本。
1.2.1 私有云環(huán)境平臺構建
私有云的實現(xiàn)通常有兩種模式:在物理硬件設備上采用虛擬化技術構建私有云環(huán)境;在公有云上申請私有云環(huán)境。
1.2.2 云構建環(huán)境申請
對于單機式持續(xù)集成可以在私有云平臺上申請?zhí)摂MCI服務器完成持續(xù)集成工作。對于分布式持續(xù)集成需要申請一個CI系統(tǒng)(由一臺主控服務器和多臺代理服務器組成),通常CI系統(tǒng)通過一個虛擬局域網實現(xiàn)相互之間的信息交流。項目組根據(jù)軟件產品對持續(xù)集成的需求確定虛擬機的數(shù)量和規(guī)格,在公司網上填寫申請云虛擬機的申請單,提交產品經理、公司質量部門以及公司IT部門審批,由公司IT部門根據(jù)申請單提供產品部門所需求的云虛擬機。
1.2.3 云構建環(huán)境部署
在虛擬機上安裝操作系統(tǒng)、持續(xù)集成工具、編譯器、代碼質量檢查工具、打包工具以及一些輔助工具。
1.2.4 云構建環(huán)境上開展持續(xù)集成工作
在持續(xù)集成工具的頁面上進行構建工程的搭建,構建工程包括產品源代碼靜態(tài)測試、源代碼模塊編譯、版本包出包、版本包的自動化測試。
軟件配置管理和持續(xù)集成[6-13]有著密切的關系,配置管理的版本庫中存放著軟件產品源代碼和各種重要的資料,持續(xù)集成是從版本庫下載源代碼進行集成構建和代碼測試工作。
SVN是一個開源的版本控制系統(tǒng),在服務器上安裝SVN服務器軟件,建立一個版本庫(Repository),將數(shù)據(jù)(項目)導入版本庫。在客戶端使用SVN專門設計的協(xié)議訪問的SVN服務器,提供兩種服務模式:一種是C/S模式,安裝SVN客戶端命令行工具和圖形工具TSVN。另一種是B/S模式,與Apache集成,在客戶端采用Http的擴展協(xié)議進行訪問;安裝Rsync工具,并完成相關配置。用戶通過個人密碼登陸SVN服務器開展工作。
ICP-CI工具的CI系統(tǒng)有兩種部署形式:
(1)單機式:由一臺CI服務器完成持續(xù)集成工作,用于代碼量小于百萬行的開發(fā)團隊。
(2)分布式:CI系統(tǒng)由一臺主控服務器和多臺代理服務器組成,主控服務器根據(jù)代理服務器的標簽將持續(xù)集成任務下發(fā)到各個代理服務器,任務完成后將任務結果和日志文件發(fā)回到主控服務器。
CI服務器可以自動檢查版本庫中的動態(tài)庫變化,設定時間區(qū)間,定時自動完成集成構建工作,并以郵件的形式向開發(fā)團隊反饋集成構建結果。
持續(xù)集成包括以下基本要素:開發(fā)工程師、配置庫、集成構建系統(tǒng)(CI服務器)、構建工具和反饋機制。CI服務器提供了針對SVN的接口。持續(xù)集成步驟通常如下:
(1)開發(fā)工程師通過SVN向代碼庫提交代碼。
(2)鎖庫后,下載代碼到CI服務器完成構建工作。若構建成功,提供新的代碼版本。
(3)CI服務器通過電子郵件向項目經理和開發(fā)人員反饋構建信息。
(4)CI服務器輪詢配置庫中的變更。
CI服務器和SVN組成的系統(tǒng)架構如圖1所示。
圖1 SVN_CI系統(tǒng)架構
(1)持續(xù)集成工程師需要完成集成構建工作,也要配置、管理和維護CI服務器系統(tǒng)。
(2)采用C/S模式,從SVN的版本庫下載代碼。
(3)主控服務器(Master)通過網絡管理代理服務器(Agent),它們之間通常組成一個局域網。
(4)項目組的軟件產品版本庫存放在項目組管控的計算機上。
基于云環(huán)境虛擬機的持續(xù)檢查首先需要構建私有云平臺,然后在私有云平臺上配置云構建環(huán)境。
3.1.1 采用VMware構建私有云平臺
經過多年的發(fā)展,VMWare[14]在虛擬化市場處于領軍地位,很多企業(yè)部署了VMWare虛擬化方案。單位IT部門根據(jù)產品不同的需求,在統(tǒng)一使用的服務器上安裝VMware軟件制作不同操作系統(tǒng)、內存、數(shù)據(jù)盤的虛擬機。目前VMware通過集成OpenStack技術,能讓客戶將現(xiàn)有的VMware vSphere虛擬機導入OpenStack中,幫助開發(fā)者輕松地遷移其重要開發(fā)項目,采用OpenStack API來管理各項工作。
VMware虛擬交換機包括兩種:vSphere標準交換機和vSphere分布式交換機。vSphere標準交換機的運行方式與物理以太網交換機十分相似。vSphere分布式交換機可以實現(xiàn)虛擬機跨所有成員主機的網絡配置。通過vSphere進行虛擬局域網VLAN的配置和管理。
3.1.2 采用OpenStack構建私有云平臺
目前也有許多單位采用OpenStack[15]部署虛擬云環(huán)境。OpenStack是一個開源的云平臺管理軟件,正在逐步成為IaaS(Infrastructure as a Service,基礎架構即服務)云計算事實上的標準??梢蕴峁┥矸菡J證、授權及鏡像管理等基礎服務,也提供計算、存儲和網絡三大核心服務。OpenStack幾乎支持所有的虛擬化管理程序,不論是開源的(Xen與KVM)還是廠商的(Hyper-V與VMware)。早期OpenStack是基于KVM開發(fā)的,KVM是默認的虛擬機管理程序。
通過Neutrom軟件提供虛擬網絡服務,Neutron支持的用戶網絡類型有flat、local、VLAN、VXLAN和GRE。通常用的比較多的是VLAN、VXLAN和GRE。VLAN網絡類型是OpenStack默認的網絡模式。
部門云是以項目組為單位構建私有云平臺(部門云),私有云平臺是為項目組軟件產品開發(fā)服務。硬件設備由項目組統(tǒng)一管理。
3.2.1 部門云構建環(huán)境運行原理
部門云CI系統(tǒng)由主控服務器、代碼中心以及代理服務器3個部分組成。
主控服務器:負責搭建持續(xù)集成工程;分配構建任務,反饋構建結果信息;
代碼中心:是一種特殊的代理服務器,存放各種配置文件和運行腳本,從版本庫下載源代碼,轉發(fā)給代理服務器;
代理服務器:進行集成構建以及相關的工作。
部門云CI系統(tǒng)的運行如圖2所示。
圖2中的方線框內為CI系統(tǒng)。
圖2 部門云構建環(huán)境運行原理
(1)主控服務器搭建持續(xù)集成工程,從代碼中心下載配置文件與任務的執(zhí)行腳本。
(2)主控服務器將待執(zhí)行的任務下發(fā)給代理服務器。
(3)代碼中心使用SVN客戶端工具Rsync從版本庫下載產品代碼,代理服務器從代碼中心同步下載產品代碼。
(4)代理服務器完成構建任務后,將構建結果與構建過程中生成的日志文件回傳代碼中心,代碼中心將構建結果與日志文件傳送到統(tǒng)一的歸檔路徑下。
(5)代理服務器根據(jù)構建結果回傳執(zhí)行報告給主控服務器。主控服務器將相關信息反饋給開發(fā)組。
3.2.2 部門云CI系統(tǒng)部署
(1)主控服務器。
主控服務器選擇Windows Server操作系統(tǒng),安裝ICP-CI-Windows-Master工具,在配置文件中配置相關的IP地址。執(zhí)行批處理啟動MYSQL數(shù)據(jù)庫后,啟動ICP-CI的網絡頁面。
(2)代碼中心。
①代碼中心選擇Windows操作系統(tǒng),安裝ICP-CI-Windows-Agent工具,在配置文件中配置相關的IP地址。.
②安裝Rsync工具,并完成相關配置。創(chuàng)建相關的目錄,用于放置產品代碼、構建結果與構建日志。
③在相關目錄存放各種構建任務的配置文件和執(zhí)行腳本,包括代碼自動更新、模塊編譯、版本包打包、版本驗證以及各種代碼檢查任務的配置文件和執(zhí)行腳本。
(3)代理服務器。
代理服務器可以根據(jù)各類任務的需要選擇操作系統(tǒng),安裝ICP-CI-Windows-Agent工具或者ICP-CI-Linux -Agent工具,在配置文件中配置相關的IP地址。安裝編譯器,測試、代碼檢查、出包相關的工具。
3.2.3 持續(xù)集成的特點
(1)對于分布式持續(xù)集成,主控服務器(Master)和代理服務器(Agent)組成一個虛擬局域網。
(2)采用B/S模式,在其中一臺代理CI服務器(代碼中心)上安裝Rsync工具,從SVN的版本庫下載代碼。
(3)持續(xù)集成工程師登陸Master通過網絡管理Agent完成集成構建工作。
(4)持續(xù)集成工程師負責分布式CI系統(tǒng)的配置、管理和工具軟件的安裝。
(5)項目組的軟件產品版本庫存放在項目組管控的私有云上。
公司云是在部門云的基礎上進一步開發(fā)形成的私有云平臺。通常有多個軟件開發(fā)項目,在公司云上進行軟件開發(fā)、測試、版本管理和持續(xù)集成等工作。公司云管理中心統(tǒng)一管理分配公司云中的虛擬機和各種資源。
3.3.1 公司云構建環(huán)境運行原理
公司云構建環(huán)境由資源管理調度中心、主控服務器以及代理服務器組成。
資源管理調度中心主要由四部分組成:
(1)資源管理中心:所有資源均在此注冊,使用資源需要申請。
(2)資源調度中心:云構建環(huán)境中的各種工作任務統(tǒng)一在此排隊安排。
(3)POM服務器:相當于部門云中代碼中心的角色,不同之處在于該服務器可以管理多個軟件項目的持續(xù)集成工作。該服務器存放多個軟件項目的各種配置文件和運行腳本,可以從多個軟件產品版本庫下載源代碼,而且存放構建過程中間載體。該服務器可以通過pom.xml文件提供多種管理(源代碼、配置文件、開發(fā)者信息、問題追蹤、項目相關信息等)。
(4)PROXY服務器:承擔虛擬機代理服務器的管理工作,向代理服務器下發(fā)構建任務,并全程跟蹤任務執(zhí)行。代理服務器通過PROXY服務器獲取網絡信息。
公司云構建環(huán)境的運行過程如圖3所示。
圖3 公司云構建環(huán)境運行原理
(1)主控服務器向資源調度中心發(fā)送任務請求,準備啟動構建任務。
(2)資源調度中心向資源管理中心請求PROXY環(huán)境,并初始化PROXY環(huán)境。
(3)PROXY向資源管理中心申請代理服務器資源,并與POM同步配置。
(4)資源調度中心向POM下發(fā)從版本庫更新代碼的任務。代理服務器從POM同步下載產品代碼。
(5)PROXY向代理服務器下發(fā)構建任務,開始構建工作。
(6)構建結束后,代理服務器向POM上傳構建結果。
(7)POM將構建結果與日志文件傳送到統(tǒng)一的歸檔路徑下。
(8)代理服務器根據(jù)構建結果回傳執(zhí)行報告給主控服務器。主控服務器將相關信息反饋給開發(fā)組。
3.3.2 公司云構建環(huán)境部署
主控服務器和代理服務器的部署與部門云中的部署方式相同,下面簡要敘述資源管理調度中心的部署。
(1)資源管理中心與資源調度中心。
資源管理中心與資源調度中心通常采用通用的云計算技術配置。
(2)POM部署。
POM服務器選擇Windows操作系統(tǒng),安裝POM工具,完成資源管理中心的IP地址配置,安裝版本庫遠程登錄工具。
(3)PROXY部署。
PROXY服務器,選擇Windows操作系統(tǒng),安裝PROXY工具,完成資源管理中心的IP地址配置。
3.3.3 持續(xù)集成的特點
(1)持續(xù)集成工程師負責向公司云管理中心申請持續(xù)集成環(huán)境,包括虛擬機規(guī)格和各虛擬機安裝的各種工具軟件。
(2)公司云管理中心提供定制的持續(xù)集成環(huán)境。
(3)持續(xù)集成工程師登陸主控服務器(Master),通過網絡管理代理服務器(Agent)完成項目組集成構建工作。
(4)持續(xù)集成工程師也可以承擔其他項目組的持續(xù)集成工作,資源調度管理中心也可以把空閑的虛擬機分配給其他工作使用。
(5)項目組的軟件產品版本庫存放在公司管控的私有云上。
3.4.1 構建過程
在公有云上構建的持續(xù)集成云構建環(huán)境過程如圖4所示。
圖4 公有云上構建的持續(xù)集成云構建環(huán)境過程
虛擬私有云(VPC)是用戶申請公有云[16]賬戶后獲得的虛擬網絡。它在邏輯上與公有云中的其他虛擬網絡隔絕??梢栽赩PC內進行VPC的各種配置,選擇IP地址范圍、創(chuàng)建子網以及配置路由表、網絡網關和安全設置。這個虛擬網絡與傳統(tǒng)網絡運行方式極其相似。
采用此種模式,項目組軟件開發(fā)、版本管理、持續(xù)集成和軟件測試都在私有云的網絡上進行。開展持續(xù)集成工作通常采用分布式版本管理工具Git和持續(xù)集成工具Jenkins。Jenkins可以在私有云的虛擬局域網上構建分布式持續(xù)集成環(huán)境,開展持續(xù)集成工作。開源的軟件開發(fā)通常采用此種模式。商業(yè)軟件開發(fā)由于顧忌軟件產品的保密問題,通常不采用這種方式。
3.4.2 持續(xù)集成的特點
(1)項目組的軟件產品版本庫存放在公有云上。
(2)開發(fā)人員可以把版本庫克隆到本地,進行軟件開發(fā);工作完成后提交到版本庫進行分支合并。
(3)對于分布式持續(xù)集成,持續(xù)集成工程師需要申請一個虛擬局域網開展集成構建工作。主控服務器(Master)通過網絡管理代理服務器(Agent)。
(4)采用B/S模式,需要在其中一臺代理CI服務器上安裝遠程登錄工具,從版本庫下載代碼。
在ICP-CI的頁面上創(chuàng)建名稱為“軟件產品名稱+版本號”的持續(xù)集成構建工程。構建工程創(chuàng)建成功后,分別配置代碼更新、進程編譯、出包、自動化用例測試等工作內容。
執(zhí)行構建任務之前都需要先更新配置文件。配置文件包括所有構建任務的出包腳本、*.lnt文件、所有構建任務的配置文件、靜態(tài)檢查的模塊配置文件、構建任務運行環(huán)境的配置文件。
使用配置管理工具SVN代碼更新命令“update”更新代碼。每天在版本庫開庫到鎖庫的時間段,開發(fā)工程師提交代碼到版本庫中。版本庫鎖庫后,持續(xù)集成工程師更新代碼,開始執(zhí)行集成構建工作。
各模塊的編譯腳本路徑、編譯腳本與編譯器需要在構建工程的任務頁面上完成配置,同時配置任務的類型和任務級別。產品代碼在編譯過程中為產品版本包生成相關文件,同時也提供各種編譯錯誤與編譯告警的信息。
編譯任務完成后,運行構建工程的版本出包步驟,生成產品的軟件包。軟件包存放在指定的目錄中。
在自動化測試用例執(zhí)行環(huán)境下完成版本包自動加載、自動安裝和自動化測試用例的初步測試。這個過程被稱為HLT(HIGH LEVEL TEST)自動化測試。
某大型軟件公司有一個軟、硬件結合的大型軟件項目,代碼量大概為2 000多萬行,在項目開發(fā)期間分別使用實體機、部門云虛擬機以及公司云虛擬機進行持續(xù)集成。持續(xù)集成使用的計算機機規(guī)格如表1所示。
表1 持續(xù)集成計算機規(guī)格表
(1)基于實體機的持續(xù)集成。
項目初期,使用實體機網絡開展持續(xù)集成工作。執(zhí)行一次持續(xù)集成完整構建大概需要4個多小時,執(zhí)行一次完整的代碼質量檢查需要8個小時以上。
(2)基于部門云的持續(xù)集成。
項目中期,使用部門云虛擬機開展持續(xù)集成工作。執(zhí)行一次持續(xù)集成完整構建需要3個多小時,執(zhí)行一次完整的代碼質量檢查需要4個小時。
(3)基于公司云的持續(xù)集成。
后來隨著軟件代碼規(guī)模的迅速擴張,在公司云上申請了53臺虛擬機開展持續(xù)集成工作。執(zhí)行一次持續(xù)集成完整構建需要1個多小時,執(zhí)行一次完整的代碼質量檢查需要2個小時。
工作實踐表明,在虛擬云環(huán)境中可以根據(jù)軟件代碼量的變化隨時改變虛擬機的數(shù)量和規(guī)格,靈活開展持續(xù)集成工作。
云構建環(huán)境中開展持續(xù)集成工作,從設備層面來講,可以對私有云的虛擬機進行統(tǒng)一部署、管理與監(jiān)控,提高資源利用效率。集中管理可以提高管理人員技術水平,提高服務質量,節(jié)約人力和物力。在軟件產品開發(fā)層面,各產品可以根據(jù)軟件源代碼規(guī)模靈活申請云虛擬機的數(shù)量和規(guī)格,提高軟件持續(xù)集成的速度與效率,從而節(jié)約軟硬件資源,提高軟件開發(fā)效率,降低軟件開發(fā)成本。
[1] 陳國良,明 仲,馮禹洪.云計算工程[M].北京:人民郵電出版社,2016.
[2] 魏志華,趙強強.構建企業(yè)私有云軟件測試平臺[J].電子技術與軟件工程,2015(9):63-64.
[3] JUN W,MENG Fanpeng.Software testing based on cloud computing[C]//International conference on internet computing and information services.[s.l.]:[s.n.],2011:176-178.
[4] 孟祥超.云計算環(huán)境下的軟件測試服務研究[D].大連:大連海事大學,2013.
[5] 嚴宇平,王學文,陸 璐.基于云平臺的軟件自動持續(xù)集成研究[J].信息通信技術,2014,8(1):50-54.
[6] DUVALL P M,MATYAS S,GLOVER A.持續(xù)集成軟件質量改進和風險降低之道[M].北京:電子工業(yè)出版社,2012.
[7] 蘭 洋,溫迎福.持續(xù)集成實踐[M].北京:電子工業(yè)出版社,2015.
[8] 姜 文,劉立康.基于ClearCase的軟件配置管理與持續(xù)集成[J].計算機技術與發(fā)展,2016,26(1):10-17.
[9] 姜 文,劉立康.基于SVN的軟件配置管理和持續(xù)集成[J].電子設計工程,2016,24(2):1-5.
[10] COLLINS-SUSSMAN B C,F(xiàn)ITZPATRICK B W,PILATO C M.Version control with subversion for subversion 1.5[M].[s.l.]:[s.n.],2005.
[11] KUNG S,ONKEN L,LARGE S.Tortoise SVN version 1.5.2[M].[s.l.]:[s.n.],2005.
[12] 姜 文,劉立康.軟件配置管理中的基線問題研究[J].計算機技術與發(fā)展,2016,26(6):6-10.
[13] LOELIGER J,MCCULLOUGH M.Git版本控制管理[M].王迪,丁 彥,譯.第2版.北京:人民郵電出版社,2015.
[14] 王春海.VMware虛擬化與云計算應用案例詳解[M].北京:中國鐵道出版社,2013.
[15] 張小斌.OpenStack企業(yè)云平臺架構與實踐[M].北京:電子工業(yè)出版社,2015.
[16] Amazonvirtual private cloud user guide[R].[s.l.]:Amazon Web Services,Inc.,2013.