姜 文,劉立康
(西安電子科技大學 通信工程學院,陜西 西安 710071)
隨著軟件開發(fā)技術(shù)的不斷發(fā)展,軟件持續(xù)集成(Continuous Integration,CI)已經(jīng)成為軟件開發(fā)過程中的一個重要組成部分。持續(xù)集成技術(shù)已經(jīng)由最初實現(xiàn)簡單的軟件編譯驗證,發(fā)展到目前可以進行軟件源代碼代碼質(zhì)量監(jiān)控與管理、軟件版本出包、軟件版本集成驗證等各個方面。
云計算[1]是將大量的計算資源、存儲資源等組合形成資源共享池,能夠根據(jù)用戶的需求提供資源,具有便利性、可擴容性、經(jīng)濟性等優(yōu)勢。由于云計算的優(yōu)點,目前基于云環(huán)境[2-5]的持續(xù)集成已經(jīng)廣泛應(yīng)用于各大型軟件企業(yè)。
文中介紹了基于云環(huán)境的持續(xù)集成的運行原理、部署和特點,基于云環(huán)境的持續(xù)集成工程運行過程。以配置管理工具SVN和持續(xù)集成工具ICP-CI為主線敘述基于云環(huán)境的持續(xù)集成。
隨著云計算技術(shù)的快速發(fā)展,軟件公司逐漸開始使用私有云虛擬機進行軟件產(chǎn)品的持續(xù)集成,可以根據(jù)軟件產(chǎn)品對持續(xù)集成構(gòu)建環(huán)境的不同需求提供不同數(shù)量和各種規(guī)格的虛擬機。這些虛擬機可以有不同的操作系統(tǒng)、不同的系統(tǒng)盤與數(shù)據(jù)盤,靈活搭建持續(xù)集成的構(gòu)建環(huán)境,從而降低軟件產(chǎn)品持續(xù)集成的成本和提高工作效率。私有云虛擬機的硬件設(shè)備由公司進行統(tǒng)一分配與管理,降低了設(shè)備的管理成本。
1.2.1 私有云環(huán)境平臺構(gòu)建
私有云的實現(xiàn)通常有兩種模式:在物理硬件設(shè)備上采用虛擬化技術(shù)構(gòu)建私有云環(huán)境;在公有云上申請私有云環(huán)境。
1.2.2 云構(gòu)建環(huán)境申請
對于單機式持續(xù)集成可以在私有云平臺上申請?zhí)摂MCI服務(wù)器完成持續(xù)集成工作。對于分布式持續(xù)集成需要申請一個CI系統(tǒng)(由一臺主控服務(wù)器和多臺代理服務(wù)器組成),通常CI系統(tǒng)通過一個虛擬局域網(wǎng)實現(xiàn)相互之間的信息交流。項目組根據(jù)軟件產(chǎn)品對持續(xù)集成的需求確定虛擬機的數(shù)量和規(guī)格,在公司網(wǎng)上填寫申請云虛擬機的申請單,提交產(chǎn)品經(jīng)理、公司質(zhì)量部門以及公司IT部門審批,由公司IT部門根據(jù)申請單提供產(chǎn)品部門所需求的云虛擬機。
1.2.3 云構(gòu)建環(huán)境部署
在虛擬機上安裝操作系統(tǒng)、持續(xù)集成工具、編譯器、代碼質(zhì)量檢查工具、打包工具以及一些輔助工具。
1.2.4 云構(gòu)建環(huán)境上開展持續(xù)集成工作
在持續(xù)集成工具的頁面上進行構(gòu)建工程的搭建,構(gòu)建工程包括產(chǎn)品源代碼靜態(tài)測試、源代碼模塊編譯、版本包出包、版本包的自動化測試。
軟件配置管理和持續(xù)集成[6-13]有著密切的關(guān)系,配置管理的版本庫中存放著軟件產(chǎn)品源代碼和各種重要的資料,持續(xù)集成是從版本庫下載源代碼進行集成構(gòu)建和代碼測試工作。
SVN是一個開源的版本控制系統(tǒng),在服務(wù)器上安裝SVN服務(wù)器軟件,建立一個版本庫(Repository),將數(shù)據(jù)(項目)導入版本庫。在客戶端使用SVN專門設(shè)計的協(xié)議訪問的SVN服務(wù)器,提供兩種服務(wù)模式:一種是C/S模式,安裝SVN客戶端命令行工具和圖形工具TSVN。另一種是B/S模式,與Apache集成,在客戶端采用Http的擴展協(xié)議進行訪問;安裝Rsync工具,并完成相關(guān)配置。用戶通過個人密碼登陸SVN服務(wù)器開展工作。
ICP-CI工具的CI系統(tǒng)有兩種部署形式:
(1)單機式:由一臺CI服務(wù)器完成持續(xù)集成工作,用于代碼量小于百萬行的開發(fā)團隊。
(2)分布式:CI系統(tǒng)由一臺主控服務(wù)器和多臺代理服務(wù)器組成,主控服務(wù)器根據(jù)代理服務(wù)器的標簽將持續(xù)集成任務(wù)下發(fā)到各個代理服務(wù)器,任務(wù)完成后將任務(wù)結(jié)果和日志文件發(fā)回到主控服務(wù)器。
CI服務(wù)器可以自動檢查版本庫中的動態(tài)庫變化,設(shè)定時間區(qū)間,定時自動完成集成構(gòu)建工作,并以郵件的形式向開發(fā)團隊反饋集成構(gòu)建結(jié)果。
持續(xù)集成包括以下基本要素:開發(fā)工程師、配置庫、集成構(gòu)建系統(tǒng)(CI服務(wù)器)、構(gòu)建工具和反饋機制。CI服務(wù)器提供了針對SVN的接口。持續(xù)集成步驟通常如下:
(1)開發(fā)工程師通過SVN向代碼庫提交代碼。
(2)鎖庫后,下載代碼到CI服務(wù)器完成構(gòu)建工作。若構(gòu)建成功,提供新的代碼版本。
(3)CI服務(wù)器通過電子郵件向項目經(jīng)理和開發(fā)人員反饋構(gòu)建信息。
(4)CI服務(wù)器輪詢配置庫中的變更。
CI服務(wù)器和SVN組成的系統(tǒng)架構(gòu)如圖1所示。

圖1 SVN_CI系統(tǒng)架構(gòu)
(1)持續(xù)集成工程師需要完成集成構(gòu)建工作,也要配置、管理和維護CI服務(wù)器系統(tǒng)。
(2)采用C/S模式,從SVN的版本庫下載代碼。
(3)主控服務(wù)器(Master)通過網(wǎng)絡(luò)管理代理服務(wù)器(Agent),它們之間通常組成一個局域網(wǎng)。
(4)項目組的軟件產(chǎn)品版本庫存放在項目組管控的計算機上。
基于云環(huán)境虛擬機的持續(xù)檢查首先需要構(gòu)建私有云平臺,然后在私有云平臺上配置云構(gòu)建環(huán)境。
3.1.1 采用VMware構(gòu)建私有云平臺
經(jīng)過多年的發(fā)展,VMWare[14]在虛擬化市場處于領(lǐng)軍地位,很多企業(yè)部署了VMWare虛擬化方案。單位IT部門根據(jù)產(chǎn)品不同的需求,在統(tǒng)一使用的服務(wù)器上安裝VMware軟件制作不同操作系統(tǒng)、內(nèi)存、數(shù)據(jù)盤的虛擬機。目前VMware通過集成OpenStack技術(shù),能讓客戶將現(xiàn)有的VMware vSphere虛擬機導入OpenStack中,幫助開發(fā)者輕松地遷移其重要開發(fā)項目,采用OpenStack API來管理各項工作。
VMware虛擬交換機包括兩種:vSphere標準交換機和vSphere分布式交換機。vSphere標準交換機的運行方式與物理以太網(wǎng)交換機十分相似。vSphere分布式交換機可以實現(xiàn)虛擬機跨所有成員主機的網(wǎng)絡(luò)配置。通過vSphere進行虛擬局域網(wǎng)VLAN的配置和管理。
3.1.2 采用OpenStack構(gòu)建私有云平臺
目前也有許多單位采用OpenStack[15]部署虛擬云環(huán)境。OpenStack是一個開源的云平臺管理軟件,正在逐步成為IaaS(Infrastructure as a Service,基礎(chǔ)架構(gòu)即服務(wù))云計算事實上的標準。可以提供身份認證、授權(quán)及鏡像管理等基礎(chǔ)服務(wù),也提供計算、存儲和網(wǎng)絡(luò)三大核心服務(wù)。OpenStack幾乎支持所有的虛擬化管理程序,不論是開源的(Xen與KVM)還是廠商的(Hyper-V與VMware)。早期OpenStack是基于KVM開發(fā)的,KVM是默認的虛擬機管理程序。
通過Neutrom軟件提供虛擬網(wǎng)絡(luò)服務(wù),Neutron支持的用戶網(wǎng)絡(luò)類型有flat、local、VLAN、VXLAN和GRE。通常用的比較多的是VLAN、VXLAN和GRE。VLAN網(wǎng)絡(luò)類型是OpenStack默認的網(wǎng)絡(luò)模式。
部門云是以項目組為單位構(gòu)建私有云平臺(部門云),私有云平臺是為項目組軟件產(chǎn)品開發(fā)服務(wù)。硬件設(shè)備由項目組統(tǒng)一管理。
3.2.1 部門云構(gòu)建環(huán)境運行原理
部門云CI系統(tǒng)由主控服務(wù)器、代碼中心以及代理服務(wù)器3個部分組成。
主控服務(wù)器:負責搭建持續(xù)集成工程;分配構(gòu)建任務(wù),反饋構(gòu)建結(jié)果信息;
代碼中心:是一種特殊的代理服務(wù)器,存放各種配置文件和運行腳本,從版本庫下載源代碼,轉(zhuǎn)發(fā)給代理服務(wù)器;
代理服務(wù)器:進行集成構(gòu)建以及相關(guān)的工作。
部門云CI系統(tǒng)的運行如圖2所示。
圖2中的方線框內(nèi)為CI系統(tǒng)。

圖2 部門云構(gòu)建環(huán)境運行原理
(1)主控服務(wù)器搭建持續(xù)集成工程,從代碼中心下載配置文件與任務(wù)的執(zhí)行腳本。
(2)主控服務(wù)器將待執(zhí)行的任務(wù)下發(fā)給代理服務(wù)器。
(3)代碼中心使用SVN客戶端工具Rsync從版本庫下載產(chǎn)品代碼,代理服務(wù)器從代碼中心同步下載產(chǎn)品代碼。
(4)代理服務(wù)器完成構(gòu)建任務(wù)后,將構(gòu)建結(jié)果與構(gòu)建過程中生成的日志文件回傳代碼中心,代碼中心將構(gòu)建結(jié)果與日志文件傳送到統(tǒng)一的歸檔路徑下。
(5)代理服務(wù)器根據(jù)構(gòu)建結(jié)果回傳執(zhí)行報告給主控服務(wù)器。主控服務(wù)器將相關(guān)信息反饋給開發(fā)組。
3.2.2 部門云CI系統(tǒng)部署
(1)主控服務(wù)器。
主控服務(wù)器選擇Windows Server操作系統(tǒng),安裝ICP-CI-Windows-Master工具,在配置文件中配置相關(guān)的IP地址。執(zhí)行批處理啟動MYSQL數(shù)據(jù)庫后,啟動ICP-CI的網(wǎng)絡(luò)頁面。
(2)代碼中心。
①代碼中心選擇Windows操作系統(tǒng),安裝ICP-CI-Windows-Agent工具,在配置文件中配置相關(guān)的IP地址。.
②安裝Rsync工具,并完成相關(guān)配置。創(chuàng)建相關(guān)的目錄,用于放置產(chǎn)品代碼、構(gòu)建結(jié)果與構(gòu)建日志。
③在相關(guān)目錄存放各種構(gòu)建任務(wù)的配置文件和執(zhí)行腳本,包括代碼自動更新、模塊編譯、版本包打包、版本驗證以及各種代碼檢查任務(wù)的配置文件和執(zhí)行腳本。
(3)代理服務(wù)器。
代理服務(wù)器可以根據(jù)各類任務(wù)的需要選擇操作系統(tǒng),安裝ICP-CI-Windows-Agent工具或者ICP-CI-Linux -Agent工具,在配置文件中配置相關(guān)的IP地址。安裝編譯器,測試、代碼檢查、出包相關(guān)的工具。
3.2.3 持續(xù)集成的特點
(1)對于分布式持續(xù)集成,主控服務(wù)器(Master)和代理服務(wù)器(Agent)組成一個虛擬局域網(wǎng)。
(2)采用B/S模式,在其中一臺代理CI服務(wù)器(代碼中心)上安裝Rsync工具,從SVN的版本庫下載代碼。
(3)持續(xù)集成工程師登陸Master通過網(wǎng)絡(luò)管理Agent完成集成構(gòu)建工作。
(4)持續(xù)集成工程師負責分布式CI系統(tǒng)的配置、管理和工具軟件的安裝。
(5)項目組的軟件產(chǎn)品版本庫存放在項目組管控的私有云上。
公司云是在部門云的基礎(chǔ)上進一步開發(fā)形成的私有云平臺。通常有多個軟件開發(fā)項目,在公司云上進行軟件開發(fā)、測試、版本管理和持續(xù)集成等工作。公司云管理中心統(tǒng)一管理分配公司云中的虛擬機和各種資源。
3.3.1 公司云構(gòu)建環(huán)境運行原理
公司云構(gòu)建環(huán)境由資源管理調(diào)度中心、主控服務(wù)器以及代理服務(wù)器組成。
資源管理調(diào)度中心主要由四部分組成:
(1)資源管理中心:所有資源均在此注冊,使用資源需要申請。
(2)資源調(diào)度中心:云構(gòu)建環(huán)境中的各種工作任務(wù)統(tǒng)一在此排隊安排。
(3)POM服務(wù)器:相當于部門云中代碼中心的角色,不同之處在于該服務(wù)器可以管理多個軟件項目的持續(xù)集成工作。該服務(wù)器存放多個軟件項目的各種配置文件和運行腳本,可以從多個軟件產(chǎn)品版本庫下載源代碼,而且存放構(gòu)建過程中間載體。該服務(wù)器可以通過pom.xml文件提供多種管理(源代碼、配置文件、開發(fā)者信息、問題追蹤、項目相關(guān)信息等)。
(4)PROXY服務(wù)器:承擔虛擬機代理服務(wù)器的管理工作,向代理服務(wù)器下發(fā)構(gòu)建任務(wù),并全程跟蹤任務(wù)執(zhí)行。代理服務(wù)器通過PROXY服務(wù)器獲取網(wǎng)絡(luò)信息。
公司云構(gòu)建環(huán)境的運行過程如圖3所示。

圖3 公司云構(gòu)建環(huán)境運行原理
(1)主控服務(wù)器向資源調(diào)度中心發(fā)送任務(wù)請求,準備啟動構(gòu)建任務(wù)。
(2)資源調(diào)度中心向資源管理中心請求PROXY環(huán)境,并初始化PROXY環(huán)境。
(3)PROXY向資源管理中心申請代理服務(wù)器資源,并與POM同步配置。
(4)資源調(diào)度中心向POM下發(fā)從版本庫更新代碼的任務(wù)。代理服務(wù)器從POM同步下載產(chǎn)品代碼。
(5)PROXY向代理服務(wù)器下發(fā)構(gòu)建任務(wù),開始構(gòu)建工作。
(6)構(gòu)建結(jié)束后,代理服務(wù)器向POM上傳構(gòu)建結(jié)果。
(7)POM將構(gòu)建結(jié)果與日志文件傳送到統(tǒng)一的歸檔路徑下。
(8)代理服務(wù)器根據(jù)構(gòu)建結(jié)果回傳執(zhí)行報告給主控服務(wù)器。主控服務(wù)器將相關(guān)信息反饋給開發(fā)組。
3.3.2 公司云構(gòu)建環(huán)境部署
主控服務(wù)器和代理服務(wù)器的部署與部門云中的部署方式相同,下面簡要敘述資源管理調(diào)度中心的部署。
(1)資源管理中心與資源調(diào)度中心。
資源管理中心與資源調(diào)度中心通常采用通用的云計算技術(shù)配置。
(2)POM部署。
POM服務(wù)器選擇Windows操作系統(tǒng),安裝POM工具,完成資源管理中心的IP地址配置,安裝版本庫遠程登錄工具。
(3)PROXY部署。
PROXY服務(wù)器,選擇Windows操作系統(tǒng),安裝PROXY工具,完成資源管理中心的IP地址配置。
3.3.3 持續(xù)集成的特點
(1)持續(xù)集成工程師負責向公司云管理中心申請持續(xù)集成環(huán)境,包括虛擬機規(guī)格和各虛擬機安裝的各種工具軟件。
(2)公司云管理中心提供定制的持續(xù)集成環(huán)境。
(3)持續(xù)集成工程師登陸主控服務(wù)器(Master),通過網(wǎng)絡(luò)管理代理服務(wù)器(Agent)完成項目組集成構(gòu)建工作。
(4)持續(xù)集成工程師也可以承擔其他項目組的持續(xù)集成工作,資源調(diào)度管理中心也可以把空閑的虛擬機分配給其他工作使用。
(5)項目組的軟件產(chǎn)品版本庫存放在公司管控的私有云上。
3.4.1 構(gòu)建過程
在公有云上構(gòu)建的持續(xù)集成云構(gòu)建環(huán)境過程如圖4所示。

圖4 公有云上構(gòu)建的持續(xù)集成云構(gòu)建環(huán)境過程
虛擬私有云(VPC)是用戶申請公有云[16]賬戶后獲得的虛擬網(wǎng)絡(luò)。它在邏輯上與公有云中的其他虛擬網(wǎng)絡(luò)隔絕。可以在VPC內(nèi)進行VPC的各種配置,選擇IP地址范圍、創(chuàng)建子網(wǎng)以及配置路由表、網(wǎng)絡(luò)網(wǎng)關(guān)和安全設(shè)置。這個虛擬網(wǎng)絡(luò)與傳統(tǒng)網(wǎng)絡(luò)運行方式極其相似。
采用此種模式,項目組軟件開發(fā)、版本管理、持續(xù)集成和軟件測試都在私有云的網(wǎng)絡(luò)上進行。開展持續(xù)集成工作通常采用分布式版本管理工具Git和持續(xù)集成工具Jenkins。Jenkins可以在私有云的虛擬局域網(wǎng)上構(gòu)建分布式持續(xù)集成環(huán)境,開展持續(xù)集成工作。開源的軟件開發(fā)通常采用此種模式。商業(yè)軟件開發(fā)由于顧忌軟件產(chǎn)品的保密問題,通常不采用這種方式。
3.4.2 持續(xù)集成的特點
(1)項目組的軟件產(chǎn)品版本庫存放在公有云上。
(2)開發(fā)人員可以把版本庫克隆到本地,進行軟件開發(fā);工作完成后提交到版本庫進行分支合并。
(3)對于分布式持續(xù)集成,持續(xù)集成工程師需要申請一個虛擬局域網(wǎng)開展集成構(gòu)建工作。主控服務(wù)器(Master)通過網(wǎng)絡(luò)管理代理服務(wù)器(Agent)。
(4)采用B/S模式,需要在其中一臺代理CI服務(wù)器上安裝遠程登錄工具,從版本庫下載代碼。
在ICP-CI的頁面上創(chuàng)建名稱為“軟件產(chǎn)品名稱+版本號”的持續(xù)集成構(gòu)建工程。構(gòu)建工程創(chuàng)建成功后,分別配置代碼更新、進程編譯、出包、自動化用例測試等工作內(nèi)容。
執(zhí)行構(gòu)建任務(wù)之前都需要先更新配置文件。配置文件包括所有構(gòu)建任務(wù)的出包腳本、*.lnt文件、所有構(gòu)建任務(wù)的配置文件、靜態(tài)檢查的模塊配置文件、構(gòu)建任務(wù)運行環(huán)境的配置文件。
使用配置管理工具SVN代碼更新命令“update”更新代碼。每天在版本庫開庫到鎖庫的時間段,開發(fā)工程師提交代碼到版本庫中。版本庫鎖庫后,持續(xù)集成工程師更新代碼,開始執(zhí)行集成構(gòu)建工作。
各模塊的編譯腳本路徑、編譯腳本與編譯器需要在構(gòu)建工程的任務(wù)頁面上完成配置,同時配置任務(wù)的類型和任務(wù)級別。產(chǎn)品代碼在編譯過程中為產(chǎn)品版本包生成相關(guān)文件,同時也提供各種編譯錯誤與編譯告警的信息。
編譯任務(wù)完成后,運行構(gòu)建工程的版本出包步驟,生成產(chǎn)品的軟件包。軟件包存放在指定的目錄中。
在自動化測試用例執(zhí)行環(huán)境下完成版本包自動加載、自動安裝和自動化測試用例的初步測試。這個過程被稱為HLT(HIGH LEVEL TEST)自動化測試。
某大型軟件公司有一個軟、硬件結(jié)合的大型軟件項目,代碼量大概為2 000多萬行,在項目開發(fā)期間分別使用實體機、部門云虛擬機以及公司云虛擬機進行持續(xù)集成。持續(xù)集成使用的計算機機規(guī)格如表1所示。

表1 持續(xù)集成計算機規(guī)格表
(1)基于實體機的持續(xù)集成。
項目初期,使用實體機網(wǎng)絡(luò)開展持續(xù)集成工作。執(zhí)行一次持續(xù)集成完整構(gòu)建大概需要4個多小時,執(zhí)行一次完整的代碼質(zhì)量檢查需要8個小時以上。
(2)基于部門云的持續(xù)集成。
項目中期,使用部門云虛擬機開展持續(xù)集成工作。執(zhí)行一次持續(xù)集成完整構(gòu)建需要3個多小時,執(zhí)行一次完整的代碼質(zhì)量檢查需要4個小時。
(3)基于公司云的持續(xù)集成。
后來隨著軟件代碼規(guī)模的迅速擴張,在公司云上申請了53臺虛擬機開展持續(xù)集成工作。執(zhí)行一次持續(xù)集成完整構(gòu)建需要1個多小時,執(zhí)行一次完整的代碼質(zhì)量檢查需要2個小時。
工作實踐表明,在虛擬云環(huán)境中可以根據(jù)軟件代碼量的變化隨時改變虛擬機的數(shù)量和規(guī)格,靈活開展持續(xù)集成工作。
云構(gòu)建環(huán)境中開展持續(xù)集成工作,從設(shè)備層面來講,可以對私有云的虛擬機進行統(tǒng)一部署、管理與監(jiān)控,提高資源利用效率。集中管理可以提高管理人員技術(shù)水平,提高服務(wù)質(zhì)量,節(jié)約人力和物力。在軟件產(chǎn)品開發(fā)層面,各產(chǎn)品可以根據(jù)軟件源代碼規(guī)模靈活申請云虛擬機的數(shù)量和規(guī)格,提高軟件持續(xù)集成的速度與效率,從而節(jié)約軟硬件資源,提高軟件開發(fā)效率,降低軟件開發(fā)成本。
[1] 陳國良,明 仲,馮禹洪.云計算工程[M].北京:人民郵電出版社,2016.
[2] 魏志華,趙強強.構(gòu)建企業(yè)私有云軟件測試平臺[J].電子技術(shù)與軟件工程,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)境下的軟件測試服務(wù)研究[D].大連:大連海事大學,2013.
[5] 嚴宇平,王學文,陸 璐.基于云平臺的軟件自動持續(xù)集成研究[J].信息通信技術(shù),2014,8(1):50-54.
[6] DUVALL P M,MATYAS S,GLOVER A.持續(xù)集成軟件質(zhì)量改進和風險降低之道[M].北京:電子工業(yè)出版社,2012.
[7] 蘭 洋,溫迎福.持續(xù)集成實踐[M].北京:電子工業(yè)出版社,2015.
[8] 姜 文,劉立康.基于ClearCase的軟件配置管理與持續(xù)集成[J].計算機技術(shù)與發(fā)展,2016,26(1):10-17.
[9] 姜 文,劉立康.基于SVN的軟件配置管理和持續(xù)集成[J].電子設(shè)計工程,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].計算機技術(shù)與發(fā)展,2016,26(6):6-10.
[13] LOELIGER J,MCCULLOUGH M.Git版本控制管理[M].王迪,丁 彥,譯.第2版.北京:人民郵電出版社,2015.
[14] 王春海.VMware虛擬化與云計算應(yīng)用案例詳解[M].北京:中國鐵道出版社,2013.
[15] 張小斌.OpenStack企業(yè)云平臺架構(gòu)與實踐[M].北京:電子工業(yè)出版社,2015.
[16] Amazonvirtual private cloud user guide[R].[s.l.]:Amazon Web Services,Inc.,2013.