一、什么是持續(xù)集成(Continuous Integration)?
這個(gè)名詞已經(jīng)在軟件開發(fā)領(lǐng)域持續(xù)了N年,一個(gè)比較簡單的定義如下: 持續(xù)集成(CI)是一種實(shí)踐,可以讓團(tuán)隊(duì)在持續(xù)的基礎(chǔ) 上收到反饋并進(jìn)行改進(jìn),不必等到開發(fā)周期后期才尋找和修復(fù)缺陷。通俗一點(diǎn)兒說,就是指對于開發(fā)人員的每一次代碼提交,都自動(dòng)地把Repository中所有代碼Check out到一個(gè)空目錄,并且自動(dòng)運(yùn)行所有Test Case。如果成功則接受這次提交,否則告訴所有人,這是一個(gè)失敗的Revision。更具體的解釋可以參考Martin fowler的Continuous Integration 。 二、持續(xù)集成的價(jià)值與成本 有句時(shí)髦的話,叫做“存在即為合理”。既然持續(xù)集成已經(jīng)存在了這么長的時(shí)間,而且沒有消失的跡象,那就是有價(jià)值的東西。那么它的價(jià)值何在?有人概括如下:(1) 減小風(fēng)險(xiǎn);(2) 減少手動(dòng)過程;(3) 生成構(gòu)建結(jié)果;(4) 安全感。 而持續(xù)集成的成本在于對持續(xù)集成代碼的維護(hù)成本和集成的時(shí)間成本。因?yàn)殡S著項(xiàng)目進(jìn)行,軟硬件環(huán)境會越來越復(fù)雜,成品代碼也會不斷膨脹。此時(shí),需要團(tuán)隊(duì)而修改或增加原有的測試代碼,以適應(yīng)這些變化,同時(shí),每次集成所需時(shí)間也會變長,這就是持續(xù)集成的成本。某個(gè)blog中提道:“這種集成是如此的頻繁,多少次的代碼Commit就有多少次持續(xù)集成。前提是集成的成本很低,或者說是完全自動(dòng)化的?!?br> 三、持續(xù)集成應(yīng)該自動(dòng)化什么呢? 我們要以盡可能少的成本來獲得盡可能多的價(jià)值。這就要考慮哪些自動(dòng)化是必要的啦。Jez Humble提到至少有六點(diǎn)要做到自動(dòng)化,它們分別是(1)自動(dòng)化的運(yùn)行測試;(2) 自動(dòng)產(chǎn)生可部署的二進(jìn)制成品;(3) 自動(dòng)將成品自動(dòng)部署到近似生產(chǎn)環(huán)境;(4) 自動(dòng)為CodeBase打上標(biāo)簽;(5) 自動(dòng)運(yùn)行回歸測試;(6)自動(dòng)生成度量報(bào)告。 四、持續(xù)集成服務(wù)器的選擇 在進(jìn)行持續(xù)集成實(shí)踐前,應(yīng)當(dāng)正確的選擇并配置持續(xù)集成服務(wù)器。比較成熟的持續(xù)集成服務(wù)器包括:CruiseControl, Anthill, Bamboo, TeamCity, Continuum 等。CruiseControl作為開源產(chǎn)品,以其對于各種SCM以及構(gòu)建工具的廣泛支持而被許多開發(fā)團(tuán)隊(duì)所接受。而開發(fā)自動(dòng)化專家 Duvall 采用一致的評估標(biāo)準(zhǔn)和很多說明性示例,介紹了一些開源 CI 服務(wù)器,包括 Continuum、CruiseControl 和 Luntbuild。并指出“要根據(jù) 自己的 具體技術(shù)和政策需求對工具進(jìn)行分析”。并用以下五個(gè)指標(biāo)來評估CI工具,它們分別是:(1) 特性;(2) 可靠性;(3) 壽命;(4) 目標(biāo)環(huán)境;(5) 易用性。結(jié)果如下表: |
|