持續(xù)集成與持續(xù)交付是軟件開發(fā)和交付中的實(shí)踐雷滚。我們項(xiàng)目中一直在踐行持續(xù)集成(CI:Continuous Integration)述呐;持續(xù)交付(CD:Continuous Delivery)未能達(dá)到理想狀態(tài),只能實(shí)踐一部分疹吃。這篇文章用于總結(jié)CI/CD的實(shí)踐蹦疑。
持續(xù)集成
什么是持續(xù)集成?
軟件開發(fā)中萨驶,集成是一個(gè)很可能發(fā)生未知錯(cuò)誤的過程歉摧。持續(xù)集成是一種軟件開發(fā)實(shí)踐,希望團(tuán)隊(duì)中的成員頻繁提交代碼到代碼倉庫篡撵,且每次提交都能通過自動(dòng)化測試進(jìn)行驗(yàn)證判莉,從而使問題盡早暴露和解決。
持續(xù)集成的好處是什么育谬?
持續(xù)集成可以使問題盡早暴露券盅,從而也降低了解決問題的難度,正如老馬所說膛檀,持續(xù)集成無法消除bug锰镀,但卻能大大降低修復(fù)的難度和時(shí)間。
如何做到持續(xù)集成咖刃?
首先泳炉,持續(xù)集成需要:
1. 單一的代碼倉庫,團(tuán)隊(duì)成員都像該倉庫提交代碼嚎杨;
2. 自動(dòng)化構(gòu)建且構(gòu)建過程需要包含自動(dòng)化測試花鹅;
3. 有單獨(dú)的集成機(jī)器用于構(gòu)建;
4. 保證構(gòu)建速度不要太慢(曾經(jīng)有一個(gè)項(xiàng)目構(gòu)建需要20分鐘枫浙,就會(huì)很痛苦)刨肃;
5. 在類產(chǎn)品環(huán)境進(jìn)行測試;
6. 能夠方便獲取最新的可執(zhí)行程序箩帚;
7. 可視化真友,大家都能看到構(gòu)建過程及結(jié)果;
8. 自動(dòng)化部署紧帕。
其次盔然,我們通過以下步驟進(jìn)行持續(xù)集成:
1. 程序員將代碼下載到本地,并在完成修改后提交代碼;
2. CI服務(wù)器監(jiān)測代碼庫愈案,并在有提交時(shí)自動(dòng)觸發(fā)挺尾;
3. CI服務(wù)器對代碼進(jìn)行構(gòu)建,運(yùn)行單元測試和集成測試刻帚;
4. CI服務(wù)器發(fā)布可部署的artefact用于后續(xù)測試潦嘶,并加上本次構(gòu)建版本的標(biāo)簽。
5. CI服務(wù)器通知團(tuán)隊(duì)構(gòu)建成功或者失敵缰凇掂僵;失敗發(fā)生時(shí)團(tuán)隊(duì)需要盡快修復(fù),以免耽擱后續(xù)的持續(xù)集成過程顷歌,因?yàn)槭r(shí)處于持續(xù)集成的暫停階段锰蓬。
最后,需要就團(tuán)隊(duì)責(zé)任達(dá)成共識(shí):
1. 頻繁提交眯漩;
2. 提交之前確保測試通過芹扭;
3. 不在持續(xù)集成失敗時(shí)提交代碼;
4. 提交代碼后保證持續(xù)集成成功赦抖,不然不準(zhǔn)回家??
持續(xù)交付
什么是持續(xù)交付舱卡?
持續(xù)交付是持續(xù)集成的擴(kuò)展,指的是將通過自動(dòng)化測試的軟件部署到產(chǎn)品環(huán)境队萤。持續(xù)交付的本質(zhì)是把每個(gè)構(gòu)建成功的應(yīng)用更新交付給用戶使用轮锥。在持續(xù)交付的世界里,我們對完成的定義不是測試完成要尔,而是交付到客戶手中舍杜。這里需要注意的是,CD代表持續(xù)交付(Continuous Delivery)而不是持續(xù)部署(Continuous Deploy)赵辕,因?yàn)椴渴鹨舶ú渴鸬綔y試環(huán)境既绩,而持續(xù)交付代表的是功能的上線,交付給用戶使用还惠。
持續(xù)交付的好處是什么饲握?
持續(xù)交付的好處在于快速獲取用戶反饋;適應(yīng)市場變化和商業(yè)策略的變化蚕键。開發(fā)團(tuán)隊(duì)保證每次提交的修改都是可上線的修改互拾,那么決定何時(shí)上線,上線哪部分功能則完全由產(chǎn)品業(yè)務(wù)團(tuán)隊(duì)決定嚎幸。
雖然持續(xù)交付有顯著的優(yōu)點(diǎn),但也有不成立的時(shí)候寄猩,比如對于嵌入式系統(tǒng)的開發(fā)嫉晶,往往需要軟硬件的配合。
如何做到持續(xù)交付?
1. 保證每次提交的修改都是可上線的修改替废。
2. 完善的測試(包括單元測試箍铭,組件測試,驗(yàn)收測試)來測試新功能和進(jìn)行回歸測試椎镣;
3. 持續(xù)交付的前提條件是自動(dòng)化的集成和部署诈火;需要開發(fā)/測試/運(yùn)維人員一起完成。