《持續(xù)交付-發(fā)布可靠軟件的系統(tǒng)方法》全書51.2萬字件豌,15章,384頁控嗜。本次閱讀第三章持續(xù)集成,大概42頁骡显。
持續(xù)集成最早出現(xiàn)在Kent Beck寫的《解析極限編程》一書中疆栏,主要思想:既然經(jīng)常對代碼庫進(jìn)行集成對我們有好處,為什么不隨時(shí)做集成呢惫谤?《持續(xù)交付》第三章主要講述如何實(shí)現(xiàn)持續(xù)集成壁顶。
在本書中,對持續(xù)集成的定義如下:持續(xù)集成是一種軟件開發(fā)實(shí)踐溜歪。在持續(xù)集成中若专,團(tuán)隊(duì)成員頻繁集成他們的工作成果,一般每人每天至少集成一次,也可以多次蝴猪。每次集成會(huì)經(jīng)過自動(dòng)構(gòu)建(包括自動(dòng)測試)的檢驗(yàn)调衰,以盡快發(fā)現(xiàn)集成錯(cuò)誤。自從在團(tuán)隊(duì)中引入這樣的實(shí)踐之后自阱,Martin Fowler發(fā)現(xiàn)這種方法可以顯著減少集成引起的問題嚎莉,并可以加快團(tuán)隊(duì)合作軟件開發(fā)的速度。
1沛豌、實(shí)現(xiàn)持續(xù)集成
1.1 準(zhǔn)備工作
1.版本控制
使用SVN或者git免費(fèi)工具可以進(jìn)行版本控制趋箩。
2.自動(dòng)化構(gòu)建
有以下理由持續(xù)推進(jìn)自動(dòng)化構(gòu)建:
- 能夠在持續(xù)集成環(huán)境中以自動(dòng)化的方式來執(zhí)行整個(gè)構(gòu)建過程,以便出現(xiàn)問題時(shí)能夠?qū)徲?jì)加派。
- 應(yīng)將構(gòu)建腳本與代碼庫同等對待叫确。應(yīng)該對它測試,不斷重構(gòu)芍锦,以便使它保持整潔且容易理解竹勉。
- 使理解、維護(hù)和調(diào)試構(gòu)建過程更容易醉旦,并有利于和運(yùn)維人員更好的協(xié)作饶米。
3.團(tuán)隊(duì)共識
團(tuán)隊(duì)認(rèn)同:“修復(fù)破壞應(yīng)用程序的任意修改是最高優(yōu)先級的任務(wù)”。
2 持續(xù)集成的前提條件
2.1. 頻繁提交
2.2 創(chuàng)建全面的自動(dòng)化測試套件
三類測試在持續(xù)集成構(gòu)建中使用:單元測試车胡,組件測試和驗(yàn)收測試檬输。
將驗(yàn)收測試按照功能模塊分組通常是可取的。這樣匈棘,當(dāng)僅修改了系統(tǒng)中的個(gè)別模塊功能時(shí)丧慈,就可以單獨(dú)運(yùn)行影響系統(tǒng)這部分功能的驗(yàn)證測試。很多單元測試框架都是提供這樣的分組功能。
2.3 保持較短的構(gòu)建和測試過程
2.4 管理開發(fā)工作區(qū)
三點(diǎn):1)細(xì)心的配置管理 逃默;2)對第三方以來的配置管理 鹃愤;3)確保自動(dòng)化測試在開發(fā)機(jī)可以運(yùn)行。
3 使用持續(xù)交付軟件
3.1 基本操作
兩個(gè)部分:每隔一段時(shí)間周期運(yùn)行一次工作流程完域;提供展示運(yùn)行結(jié)果的視圖软吐。
3.2 鈴聲和口哨
失敗可以用燈等設(shè)備提示,可以在流程加入圈復(fù)雜度吟税,重復(fù)代碼凹耙,靜態(tài)檢查等環(huán)節(jié)。
4 必不可少的實(shí)踐
持續(xù)集成是一種實(shí)踐肠仪,不是一個(gè)工具肖抱,他的有效性依賴于團(tuán)隊(duì)紀(jì)律。
4.1 構(gòu)建失敗后不要提交新代碼异旧。
4.2 提交前意述,在本地運(yùn)行所有的提交測試∷庇迹或者讓持續(xù)集成服務(wù)器完成此事荤崇。
功能:預(yù)測試提交,個(gè)人構(gòu)建匹涮。
4.3 等測試提交通過后再繼續(xù)工作天试。
4.4 回家之前,構(gòu)建必須處于成功狀態(tài)然低。
4.5 時(shí)刻準(zhǔn)備著回滾到前一個(gè)版本
4.6 在回滾之前要規(guī)定一個(gè)修復(fù)時(shí)間
4.7 不要將失敗的測試注釋掉
4.8 為自己導(dǎo)致的問題負(fù)責(zé)
4.9 測試驅(qū)動(dòng)的開發(fā)
5 推薦的實(shí)踐
5.1 極限編程開發(fā)實(shí)踐
重構(gòu)作為高效軟件的開發(fā)基石喜每。持續(xù)改進(jìn)和測試驅(qū)動(dòng)開發(fā)讓TDD成為可能。
5.2 若違背架構(gòu)原則雳攘,就讓構(gòu)建失敗
5.3 若測試運(yùn)行變慢带兜,就讓構(gòu)建失敗
5.4 若編譯告警或代碼風(fēng)格問題,就讓測試失敗
6 分布式團(tuán)隊(duì)
6.1 對流程的影響
信任很重要吨灭,同時(shí)視頻會(huì)議相互了解功能和進(jìn)展刚照。
6.2 集中式持續(xù)集成
集中式的持續(xù)集成是一種雙贏的實(shí)踐。
6.3 技術(shù)問題
推薦Git
6.4 替代方法
兩個(gè)方式:分解系統(tǒng)為多個(gè)組件喧兄;使用分布式版本控制系統(tǒng)
7 分布式版本控制系統(tǒng)
介紹github的設(shè)計(jì)思想无畔。
小結(jié):
總之,一個(gè)好的持續(xù)集成系統(tǒng)是基石吠冤,在此之上你可以構(gòu)建更多的基礎(chǔ)設(shè)施:
--一個(gè)巨大的可視化指示器浑彰,用于顯示構(gòu)建系統(tǒng)所搜集到的信息,以便提供高質(zhì)量的反饋拯辙;
- 結(jié)果報(bào)告系統(tǒng)郭变,以及針對自己測試團(tuán)隊(duì)的安裝包颜价。
- 為項(xiàng)目經(jīng)理提供關(guān)于系統(tǒng)質(zhì)量的數(shù)據(jù)報(bào)告
- 使用部署流水線,可以將其延展到生產(chǎn)環(huán)境诉濒,為測試人員和運(yùn)維團(tuán)隊(duì)提供一鍵式部署系統(tǒng)周伦。