為什么需要持續(xù)集成?
偶爾想起學(xué)生時(shí),幾個(gè)同學(xué)一起做項(xiàng)目,雖然不大,但還是分了模塊,每個(gè)人負(fù)責(zé)一個(gè)或多個(gè)模塊。每天打開(kāi)電腦,從版本控制庫(kù)更新最新代碼,運(yùn)行下程序,回憶昨天完成的并計(jì)劃今天的任務(wù)。突然發(fā)現(xiàn)昨天好好的功能,今天突然不work甚至拋出異常,于是大喊一聲誰(shuí)破壞了我的功能?沒(méi)人回應(yīng),只能自己一步一步查看到底那個(gè)代碼破壞了昨天的功能,然后找到提交的同學(xué),再商量到底該怎么解決。其實(shí)當(dāng)時(shí)我們各自實(shí)現(xiàn)自己的模塊,寫(xiě)(或不寫(xiě))測(cè)試,然后提交代碼,各自只關(guān)心和測(cè)試自己的模塊,難免會(huì)發(fā)生沖突,尤其是兩個(gè)模塊結(jié)合的地方,如果被破壞方可能在幾個(gè)小時(shí),幾天甚至更長(zhǎng)時(shí)間后發(fā)覺(jué)應(yīng)用被破壞,或者直到最后項(xiàng)目上線(xiàn)前一分鐘才發(fā)覺(jué)。。。
后來(lái)參加工作,知道了持續(xù)集成可以解決當(dāng)時(shí)的痛苦,而且可以提供更多。持續(xù)集成是XP實(shí)踐之一,于是,很多人錯(cuò)誤認(rèn)為持續(xù)集成是為了實(shí)現(xiàn)敏捷編程的。實(shí)際上,早于敏捷編程概念的提出,持續(xù)集成作為一個(gè)best practice就已經(jīng)被很多公司采用了,只不過(guò)作為一個(gè)概念,則是由Martin大叔為了推進(jìn)敏捷所倡導(dǎo)并由此風(fēng)靡起來(lái)。
那么為什么我們需要持續(xù)集成或者說(shuō)持續(xù)集成給我?guī)?lái)了什么好處呢?
- 及早獲得系統(tǒng)級(jí)的成果或者是可以deploy到production環(huán)境的產(chǎn)品。因?yàn)榇a已經(jīng)被集成起來(lái)了,即使整個(gè)系統(tǒng)還不是那么可用,至少比零散的模塊讓人更有安全感。增強(qiáng)了客戶(hù)和我們自己的信心。
- 可以很容易的知道每一個(gè)版本之間有什么變化,甚至我們可以很容易的重新build出任何一個(gè)時(shí)間點(diǎn)上的版本,這點(diǎn)非常重要。工作后第一個(gè)項(xiàng)目就遇到了難纏的客戶(hù),經(jīng)常今天告知我們明天需要一個(gè)版本部署到生產(chǎn)環(huán)境,如果沒(méi)有持續(xù)集成,我們?nèi)绾蔚玫接行判目梢圆渴鸬絧roduction的build?如果沒(méi)有持續(xù)集成,我們?nèi)绾翁峁┌钚鹿δ艿目梢圆渴鸬絧roduction的build?偶爾,客戶(hù)并不需要你提供的最終build,而是包含功能1和2而不包含功能3的build,如果沒(méi)有頻繁的持續(xù)集成,我們又怎么快速的得到某一時(shí)間的build?
- 及早的發(fā)現(xiàn)和定位錯(cuò)誤:比如學(xué)生時(shí)代的項(xiàng)目,某個(gè)人在工作的時(shí)候踩進(jìn)了別人的領(lǐng)域、影響了別人的代碼,而被影響的人還不知道發(fā)生了什么,于是bug就出現(xiàn)了。這種bug是最難查的,因?yàn)閱?wèn)題不是出在某一個(gè)人的領(lǐng)域里,而是出在兩個(gè)人的交流上面。隨著時(shí)間的推移,問(wèn)題會(huì)逐漸惡化。通常,在集成階段出現(xiàn)的bug早在幾周甚至幾個(gè)月之前就已經(jīng)存在了。結(jié)果,開(kāi)發(fā)者需要在集成階段耗費(fèi)指數(shù)倍的時(shí)間和精力來(lái)尋找這些bug的根源。如果有了持續(xù)集成,當(dāng)持續(xù)集成失敗了,很容易說(shuō)明最新加入的代碼或者修改的代碼引起了錯(cuò)誤,當(dāng)然這需要強(qiáng)大的自動(dòng)化測(cè)試作為后盾。
- 項(xiàng)目進(jìn)度的一目了然。頻繁的集成使我們可以看到哪些功能可以使用,哪些功能還沒(méi)有實(shí)現(xiàn)。開(kāi)發(fā)人員不用在匯報(bào)任務(wù)的時(shí)候說(shuō)我完成了多少百分比而煩惱,而PM也不再煩惱程序員說(shuō)完成了編碼的50%到底是個(gè)什么概念。
因此引用同事的原話(huà)“沒(méi)有持續(xù)集成,說(shuō)明交付流程是混亂不清晰隨機(jī)的。”
posted on 2011-03-31 23:33 *** 閱讀(657) 評(píng)論(1) 編輯 收藏