集成軟件的過程不是新問題,如果項(xiàng)目開發(fā)的規(guī)模比較小,比如一個(gè)人的項(xiàng)目,如果它對外部系統(tǒng)的依賴很小,那么軟件集成不是問題,但是隨著軟件項(xiàng)目復(fù)雜度的增加(即使增加一個(gè)人),就會對集成和確保軟件組件能夠在一起工作提出了更多的要求-要早集成,常集成。早集成,頻繁的集成幫助項(xiàng)目在早期發(fā)現(xiàn)項(xiàng)目風(fēng)險(xiǎn)和質(zhì)量問題,如果到后期才發(fā)現(xiàn)這些問題,解決問題代價(jià)很大,很有可能導(dǎo)致項(xiàng)目延期或者項(xiàng)目失敗。
大師Martin Fowler對持續(xù)集成是這樣定義的:持續(xù)集成是一種軟件開發(fā)實(shí)踐,即團(tuán)隊(duì)開發(fā)成員經(jīng)常集成他們的工作,通常每個(gè)成員每天至少集成一次,也就意味著每天可能會發(fā)生多次集成。每次集成都通過自動化的構(gòu)建(包括編譯,發(fā)布,自動化測試 )來驗(yàn)證,從而盡快地發(fā)現(xiàn)集成錯誤。許多團(tuán)隊(duì)發(fā)現(xiàn)這個(gè)過程可以大大減少集成的問題,讓團(tuán)隊(duì)能夠更快的開發(fā)內(nèi)聚的軟件。
持續(xù)集成讓我們能夠注意到趨勢并進(jìn)行有效的決策。如果沒有真實(shí)或最新的數(shù)據(jù)提供支持,項(xiàng)目就會遇到麻煩,每個(gè)人都會提出他最好的猜測。通常,項(xiàng)目成員通過手工收集這些信息,增加了負(fù)擔(dān),也很耗時(shí)。持續(xù)集成可以帶來兩點(diǎn)積極效果:
(1)有效決策:持續(xù)集成系統(tǒng)為項(xiàng)目構(gòu)建狀態(tài)和品質(zhì)指標(biāo)提供了及時(shí)的信息,有些持續(xù)集成系統(tǒng)可以報(bào)告功能完成度和缺陷率。
(2)注意到趨勢:由于經(jīng)常集成,我們可以看到一些趨勢,如構(gòu)建成功或失敗、總體品質(zhì)以及其它的項(xiàng)目信息。
持續(xù)集成可以建立開發(fā)團(tuán)隊(duì)對開發(fā)產(chǎn)品的信心,因?yàn)樗麄兦宄闹烂恳淮螛?gòu)建的結(jié)果,他們知道他們對軟件的改動造成了哪些影響,結(jié)果怎么樣。
開展持續(xù)集成的十大條件:
1.統(tǒng)一的代碼庫
2.自動構(gòu)建
3.自動測試
4.每個(gè)人每天都要向代碼庫主干提交代碼
5.每次代碼遞交后都會在持續(xù)集成服務(wù)器上觸發(fā)一次構(gòu)建
6.保證快速構(gòu)建
7.模擬生產(chǎn)環(huán)境的自動測試
8.每個(gè)人都可以很容易的獲取最新可執(zhí)行的應(yīng)用程序
9.每個(gè)人都清楚正在發(fā)生的狀況
10.自動化的部署
持續(xù)集成的七大原則
1. 所有的開發(fā)人員需要在本地機(jī)器上做本地構(gòu)建,然后再提交的版本控制庫中,從而確保他們的變更不會導(dǎo)致持續(xù)集成失敗。
2. 開發(fā)人員每天至少向版本控制庫中提交一次代碼。
3. 開發(fā)人員每天至少需要從版本控制庫中更新一次代碼到本地機(jī)器。
4. 需要有專門的集成服務(wù)器來執(zhí)行集成構(gòu)建,每天要執(zhí)行多次構(gòu)建。
5. 每次構(gòu)建都要100%通過。
6. 每次構(gòu)建都可以生成可發(fā)布的產(chǎn)品。
7. 修復(fù)失敗的構(gòu)建是優(yōu)先級最高的事情。