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