雖然一講到敏捷開發、DevOps 時就很常聽到 CI/CD 這些詞彙,不過到底什麼是 CI?又什麼是 CD?當我們導入 CI/CD 後,又會有什麼樣的好處呢?就讓我們花一天的篇幅來科普一下。
持續整合(英文原名 Continuous Integration,縮寫 CI,以下內文為求精簡皆會以縮寫呈現)是軟體開發的一種作法,它讓一個軟體專案裡的每一位開發者定期同步彼此對原始碼庫的變更,然後在每次更改後檢查程式碼是否仍能通過編譯與測試。CI 可以說是導入 DevOps 的第一步,也是建構和發佈軟體的重要關鍵,它可以促進協同合作、自動化並縮短回饋週期。
想要實踐 CI 的話,得從定期的將變更提交至版本控制系統(通常是 Git)開始,以便讓參與專案的每一個人都能在相同的條件下建置專案。每一次的提交都會觸發一次建置以及一系列的自動化測試,以驗證程式碼的行為是正確並確保更改沒有破壞任何內容。
持續部署(英文原名 Continuous Deployment,縮寫 CD,以下內文為求精簡皆會以縮寫呈現)則是將 DevOps 自動化建置、測試和部署步驟的實踐發揮到了極致。如果對程式碼的變更成功通過了流水線(Pipeline)的各階段,則該變更就會被部署到生產環境(Production Environment)中,無需任何人工介入。採用 CD 意味著您可以在維持相同軟體品質的前提下,快速地為使用者提供新功能。
CD 以成熟的、經過良好測試的 CI 為基礎。當一段程式碼變更提交至程式碼庫後,就會在測試環境底下觸發一系列的自動建置、測試等步驟。若是成功通過所有步驟且沒有發現問題,就會將其部署上線。若能建構出強大且可靠的 CD 流程,意味著每天都可以部署非常多次而不用擔心會發生意外。雖然不是每一個軟體專案都適合導入 CD,但我們仍然可以從 CD 的實踐精神中獲益。
發佈軟體是一個辛苦且耗時的過程。若其中有很多步驟需要透過手動執行、人為介入的話,中間就會產生出很多的風險。在過去,有些專案為了降低這種人為手動的風險而選擇將提交與整合變更的時間拉長,但這樣的方式反而讓風險更高。導入 CI/CD 作法則是透過自動化工具來附低人為介入的比例,加上整合多種測試工具確保程式碼的品質,因此可以在不影響品質的前提下更頻繁地發佈軟體。若過程中有任何問題,CI/CD 伺服器也會立即發出警報,團隊可以在收到警報通知後再人為介入,大大的節省開發資源。除此之外,導入 CI/CD 還有這些明顯的好處: