資源描述:
《持續(xù)集成也需要重構(gòu)持續(xù)集成實踐在cru》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、持續(xù)集成也需要重構(gòu)持續(xù)集成實踐在Cruise閱讀:87評論:0作者:iTech發(fā)表于2010-05-2816:04原文鏈接轉(zhuǎn)自:1前言持續(xù)集成是極限編程十二實踐之一(1999年KentBeck編寫的《解析極限編程》),最初被使用極限編程方法的開發(fā)人員所推捧,并在過去的幾年中得到廣泛應(yīng)用,成為業(yè)界廣為人知的軟件開發(fā)實踐。該實踐用于解決軟件開發(fā)過程中一個具體且重要的問題,即"確保當某個開發(fā)人員完成新的功能或修改代碼后,整個軟件仍舊能正常工作。"然而,持續(xù)集成并非像大多數(shù)人想像的那樣,首次部署好持續(xù)集成環(huán)境后就大功告成,一勞永逸了。恰恰相反,它與你項目
2、中的其它產(chǎn)品代碼一樣,需要改進與重構(gòu),否則,就會使你進入一種"持續(xù)鬧心"的狀態(tài),甚至可能讓你覺得這件事根本不應(yīng)該做,如何解決這一問題呢?對"持續(xù)集成"應(yīng)用"Retrospective"和"重構(gòu)"。本文將結(jié)合Cruise團隊一年多的實際歷程,講述持續(xù)集成實踐在軟件開發(fā)過程中的演進。友情提示:請讀者在閱讀本文時,注重文中所述的思考過程與"持續(xù)集成"的重構(gòu)方式,而非產(chǎn)品本身。2基本持續(xù)集成--萬里長征第一步實際問題:我們需要一個持續(xù)集成環(huán)境為什么要做持續(xù)集成不在本文討論之內(nèi)。理論基礎(chǔ)持續(xù)集成基于這樣一個假設(shè):如果兩次代碼集成的間隔時間越長,最終集成時痛
3、苦的經(jīng)歷就會越多。而其目標有兩個:一是"頻繁集成",二是"反映代碼質(zhì)量"。為了做到"頻繁集成",就要求任何開發(fā)人員在每次向中央代碼庫提交代碼時,就將所有代碼進行編譯,打包,部署,以確保能夠產(chǎn)生交付物。然而,"頻繁集成"僅僅證明了每次提交是否可以得到交付物,而我們真正需要知道的是"這個交付物的質(zhì)量如何"。如果交付物有問題,引起問題的代碼則要么被回滾,要么被修正。當然,這樣的任務(wù)也可以通過手工來完成,但手工工作的特點就是易出錯且耗時,所以需要將其自動化。為了做好"持續(xù)集成實踐",寫一個自動化構(gòu)建腳本來自動構(gòu)建并運行一些自動化測試套件還是必要的。這種傳
4、統(tǒng)的持續(xù)集成方式常被固化于開發(fā)環(huán)節(jié),即:開發(fā)人員安裝一個專門的持續(xù)集成服務(wù)器來自動化運行這些單元測試,然后通過各種各樣自動生成的測試結(jié)果分析代碼的質(zhì)量,這也是CruiseControl誕生的原因。解決方案最初,我們的代碼并不多,自動化腳本比較簡單,在一臺機器上運行所有的測試也僅需要幾分鐘,該構(gòu)建套件的運行順序是:CheckStyle-Compile-UnitTest-FunctionTest-Report。示意如下:projectname="Cruise"default="all"basedir="."targetname="all"depend
5、s="checkStyle,Compile,UnitTest,FunctionTest,Report"/targetname="checkStyle"./targettargetname="Compile"./targettargetname="UnitTest"depends="Compile"./targettargetname="FunctionTest"depends="Compile"./targettargetname="Report"depends="FunctionTest"./target/project這也是大部分軟件團隊進行
6、持續(xù)集成的起點。目前,有很多種持續(xù)集成工具,其中不乏開源產(chǎn)品,如CruiseControl家族。項目伊始,我們使用CruiseControl建立了自己的持續(xù)集成服務(wù)器,整個項目的持續(xù)集成基礎(chǔ)結(jié)構(gòu)如圖所示:圖1基礎(chǔ)持續(xù)集成模式注:得到快速反饋是開發(fā)好產(chǎn)品的關(guān)鍵。因此,我們自己就做了Cruise的第一個用戶,首先解決自己的持續(xù)集成需求。項目開始后僅幾周,我們的產(chǎn)品Cruise已經(jīng)基本滿足自身團隊持續(xù)集成的需求,因此,我們就將CruiseControl替換成Cruise,但持續(xù)集成基本結(jié)構(gòu)并沒有變化。3階段化持續(xù)集成--平衡的藝術(shù)實際問題:測試越來越慢
7、,開發(fā)人員等得不耐煩。隨著時間的推移,Cruise每次做持續(xù)集成的運行時間很快就超過了15分鐘(開發(fā)人員能夠忍受的最大限度)。然而,為了保證Cruise支持大多數(shù)瀏覽器,我們還打算增加Cruise運行于不同操作系統(tǒng)及不同瀏覽器的功能測試。理論基礎(chǔ)一般來說,測試代碼越多,越能夠正確反映代碼的質(zhì)量[前提:你寫的測試是有意義的:)]。所以在整個生命周期中,大家都試圖增加更多的測試代碼。然而,越多的測試代碼也意味著更長的運行時間,更慢的反饋速度。因此,我們不得不在"反饋時間"與"判斷質(zhì)量準確性"兩者之間找到一種平衡,而"階段化持續(xù)集成"就有了用武之地。所
8、謂的"階段化持續(xù)集成"是指為不同的構(gòu)建測試套件(以下稱構(gòu)建計劃)建立不同的持續(xù)集成循環(huán)周期,由于單元測試運行時間短,反饋較快,所以可以頻