在Jenkins管理的持續(xù)集成境引入Docker來(lái)優(yōu)化資源配置
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
Jenkins是被廣泛應(yīng)用的持續(xù)集成、自動(dòng)化測(cè)試、持續(xù)部署的框架,甚至有些項(xiàng)目組順便將其用來(lái)做流程管理的工具。根據(jù)任務(wù)的多寡,Jenkins通常有兩種典型的部署方式。
單節(jié)點(diǎn)(Master)部署
這種部署適用于大多數(shù)項(xiàng)目,其構(gòu)建任務(wù)較輕,數(shù)量較少,單個(gè)節(jié)點(diǎn)就足以滿足日常開(kāi)發(fā)所需。
多節(jié)點(diǎn)(Master-Slave)部署
通常規(guī)模較大,代碼提交頻繁(意味著構(gòu)建頻繁),自動(dòng)化測(cè)試壓力較大的項(xiàng)目都會(huì)采取這種部署結(jié)構(gòu)。在這種部署結(jié)構(gòu)下,Master通常只充當(dāng)管理者的角色,負(fù)責(zé)任務(wù)的調(diào)度,slave節(jié)點(diǎn)的管理,任務(wù)狀態(tài)的收集等工作,而具體的構(gòu)建任務(wù)則會(huì)分配給slave節(jié)點(diǎn)。一個(gè)Master節(jié)點(diǎn)理論上可以管理的slave節(jié)點(diǎn)數(shù)是沒(méi)有上限的,但通常隨著數(shù)量的增加,其性能以及穩(wěn)定性就會(huì)有不同程度的下降,具體的影響則因Master硬件性能的高低而不同。
關(guān)于Docker
Docker是一款針對(duì)程序開(kāi)發(fā)人員和系統(tǒng)管理員來(lái)開(kāi)發(fā)、部署、運(yùn)行應(yīng)用的一款虛擬化平臺(tái)。Docker 可以讓你像使用集裝箱一樣快速的組合成應(yīng)用,并且可以像運(yùn)輸標(biāo)準(zhǔn)集裝箱一樣,盡可能的屏蔽代碼層面的差異。Docker 會(huì)盡可能的縮短從代碼測(cè)試到產(chǎn)品部署的時(shí)間。簡(jiǎn)單來(lái)說(shuō)Docker提供了一種技術(shù),可以讓開(kāi)發(fā)人員方便地將應(yīng)用代碼已經(jīng)運(yùn)行時(shí)的環(huán)境一并打包到一個(gè)鏡像中,然后將這個(gè)鏡像上傳至鏡像倉(cāng)庫(kù)。在測(cè)試或者產(chǎn)品環(huán)境只需要下載這個(gè)鏡像然后將其啟動(dòng)就完成了部署(就好比打開(kāi)一個(gè)集裝箱那么簡(jiǎn)單)。關(guān)于Docker更詳細(xì)的內(nèi)容請(qǐng)參考官網(wǎng)文檔。
當(dāng)前Jenkins遇到的困難
隨著敏捷開(kāi)發(fā)的普及,自動(dòng)化測(cè)試成為每個(gè)項(xiàng)目的必須。一個(gè)經(jīng)過(guò)多年開(kāi)發(fā)的項(xiàng)目,其累積的自動(dòng)化測(cè)試數(shù)量是驚人的。為了保證每次的部署都是正確的,就需要每次回歸所有的自動(dòng)化測(cè)試用例。根據(jù)項(xiàng)目的不同,有些需要每周跑一輪回歸測(cè)試,而有些項(xiàng)目則需要每天一輪。所以我們會(huì)把所有的測(cè)試用例進(jìn)行分組,同時(shí)在多臺(tái)測(cè)試機(jī)上運(yùn)行,以減少一輪測(cè)試所需要的時(shí)間。而這就要求我們有足夠多的硬件資源來(lái)滿足這需求。下圖展示了一個(gè)典型的通過(guò)Jenkins來(lái)管理自動(dòng)化測(cè)試的拓補(bǔ)結(jié)構(gòu)。一臺(tái)Master主機(jī)管理多臺(tái)測(cè)試機(jī),Master將測(cè)試任務(wù)分配給測(cè)試機(jī)。
當(dāng)前Jenkins(Master-Slave)結(jié)構(gòu)當(dāng)前Jenkins(Master-Slave)結(jié)構(gòu)
這種結(jié)構(gòu)存在一些缺陷:
自動(dòng)化的測(cè)試通常都是通過(guò)捕捉屏幕控件來(lái)模擬用戶的行為以達(dá)到測(cè)試的目的,這就意味著一臺(tái)測(cè)試機(jī)上只能同時(shí)運(yùn)行一組測(cè)試用例,否則用例之間就會(huì)相互干擾。這就存在資源浪費(fèi),因?yàn)闇y(cè)試機(jī)的配置往往可以支持多組測(cè)試用例。
維護(hù)人員得確保測(cè)試機(jī)都保持在線,當(dāng)測(cè)試機(jī)器數(shù)量較多的時(shí)候,比如100臺(tái)甚至1000臺(tái)的時(shí)候,這維護(hù)的壓力就比較大。
通常回歸測(cè)試是在晚上運(yùn)行(如此就能在開(kāi)發(fā)組第二天上班時(shí)發(fā)現(xiàn)前一天提交的代碼是否正確),但這上百臺(tái)測(cè)試機(jī)不論白天晚上都在工作狀態(tài),這是另一維度的浪費(fèi)。
很重要的一點(diǎn),測(cè)試機(jī)器會(huì)因?yàn)楦鞣N原因?qū)е聹y(cè)試環(huán)境被污染,導(dǎo)致測(cè)試不能順利進(jìn)行,而此時(shí)除了維護(hù)人員手工處理外,沒(méi)有特別好的方案。
之前我們提到過(guò),當(dāng)slave數(shù)量達(dá)到一定程度的時(shí)候,作為Master的節(jié)點(diǎn)就會(huì)出現(xiàn)性能變差,穩(wěn)定性下降。
每個(gè)Slave節(jié)點(diǎn)在開(kāi)始跑測(cè)試之前都需要從中央庫(kù)下載最新的分發(fā)包,解壓,設(shè)定運(yùn)行環(huán)境。這個(gè)過(guò)程通常也占用不少時(shí)間,想象一下,突然間上百個(gè)slave開(kāi)始下載最新的庫(kù),這對(duì)中央庫(kù)是一個(gè)極大的沖擊。
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%
下載地址
在Jenkins管理的持續(xù)集成境引入Docker來(lái)優(yōu)化資源配置下載
相關(guān)電子資料下載
- 如何在Windows系統(tǒng)上設(shè)置Docker鏡像源 55
- 機(jī)器學(xué)習(xí)需要掌握的九種工具盤點(diǎn) 16
- Jenkins pipeline是如何連接Kubernetes的呢? 115
- Docker鏡像國(guó)內(nèi)加速的幾種方法 55
- VectorCAST|Docker場(chǎng)景下的代碼白盒測(cè)試實(shí)施 401
- 如何用Springboot整合Redis 118
- 高質(zhì)量持續(xù)集成:VectorCAST與Jenkins實(shí)戰(zhàn)指南 669
- 如何在macOS系統(tǒng)中用Docker運(yùn)行macOS鏡像呢? 364
- 什么是Docker容器?為什么需要Docker容器? 71
- 為什么需要Docker容器?Docker容器和VM有什么區(qū)別? 323