持續(xù)集成與持續(xù)交付是軟件開發(fā)和交付中的實踐。我們項目中一直在踐行持續(xù)集成(CI:Continuous Integration);持續(xù)交付(CD:Continuous Delivery)未能達到理想狀態(tài),只能實踐一部分。這篇文章用于總結(jié)CI/CD的實踐。
持續(xù)集成
什么是持續(xù)集成?
軟件開發(fā)中,集成是一個很可能發(fā)生未知錯誤的過程。持續(xù)集成是一種軟件開發(fā)實踐,希望團隊中的成員頻繁提交代碼到代碼倉庫,且每次提交都能通過自動化測試進行驗證,從而使問題盡早暴露和解決。
持續(xù)集成的好處是什么?
持續(xù)集成可以使問題盡早暴露,從而也降低了解決問題的難度,正如老馬所說,持續(xù)集成無法消除bug,但卻能大大降低修復(fù)的難度和時間。
如何做到持續(xù)集成?
首先,持續(xù)集成需要:
1. 單一的代碼倉庫,團隊成員都像該倉庫提交代碼;
2. 自動化構(gòu)建且構(gòu)建過程需要包含自動化測試;
3. 有單獨的集成機器用于構(gòu)建;
4. 保證構(gòu)建速度不要太慢(曾經(jīng)有一個項目構(gòu)建需要20分鐘,就會很痛苦);
5. 在類產(chǎn)品環(huán)境進行測試;
6. 能夠方便獲取最新的可執(zhí)行程序;
7. 可視化,大家都能看到構(gòu)建過程及結(jié)果;
8. 自動化部署。
其次,我們通過以下步驟進行持續(xù)集成:
1. 程序員將代碼下載到本地,并在完成修改后提交代碼;
2. CI服務(wù)器監(jiān)測代碼庫,并在有提交時自動觸發(fā);
3. CI服務(wù)器對代碼進行構(gòu)建,運行單元測試和集成測試;
4. CI服務(wù)器發(fā)布可部署的artefact用于后續(xù)測試,并加上本次構(gòu)建版本的標簽。
5. CI服務(wù)器通知團隊構(gòu)建成功或者失??;失敗發(fā)生時團隊需要盡快修復(fù),以免耽擱后續(xù)的持續(xù)集成過程,因為失敗時處于持續(xù)集成的暫停階段。
最后,需要就團隊責(zé)任達成共識:
1. 頻繁提交;
2. 提交之前確保測試通過;
3. 不在持續(xù)集成失敗時提交代碼;
4. 提交代碼后保證持續(xù)集成成功,不然不準回家??
持續(xù)交付
什么是持續(xù)交付?
持續(xù)交付是持續(xù)集成的擴展,指的是將通過自動化測試的軟件部署到產(chǎn)品環(huán)境。持續(xù)交付的本質(zhì)是把每個構(gòu)建成功的應(yīng)用更新交付給用戶使用。在持續(xù)交付的世界里,我們對完成的定義不是測試完成,而是交付到客戶手中。這里需要注意的是,CD代表持續(xù)交付(Continuous Delivery)而不是持續(xù)部署(Continuous Deploy),因為部署也包括部署到測試環(huán)境,而持續(xù)交付代表的是功能的上線,交付給用戶使用。
持續(xù)交付的好處是什么?
持續(xù)交付的好處在于快速獲取用戶反饋;適應(yīng)市場變化和商業(yè)策略的變化。開發(fā)團隊保證每次提交的修改都是可上線的修改,那么決定何時上線,上線哪部分功能則完全由產(chǎn)品業(yè)務(wù)團隊決定。
雖然持續(xù)交付有顯著的優(yōu)點,但也有不成立的時候,比如對于嵌入式系統(tǒng)的開發(fā),往往需要軟硬件的配合。
如何做到持續(xù)交付?
1. 保證每次提交的修改都是可上線的修改。
2. 完善的測試(包括單元測試,組件測試,驗收測試)來測試新功能和進行回歸測試;
3. 持續(xù)交付的前提條件是自動化的集成和部署;需要開發(fā)/測試/運維人員一起完成。