CI/CD 可讓持續自動化和持續監控貫穿於應用的整個生命週期(從集成和測試階段,到交付和部署)

CI/CD 是一種通過在應用開發階段引入自動化來頻繁向客戶交付應用的方法。 CI/CD 的核心概念是持續集成、持續交付和持續部署。作為一個面向開發和運營團隊的解決方案,CI/CD 主要針對在集成新代碼時所引發的問題(亦稱:“集成地獄”)。

具體而言,CI/CD 可讓持續自動化和持續監控貫穿於應用的整個生命週期(從集成和測試階段,到交付和部署)。這些關聯的事務通常被統稱為“CI/CD 管道”,由開發和運維團隊以敏捷方式協同支持。

CI 是什麼? CI 和 CD 有什麼區別?

縮略詞 CI / CD 具有幾個不同的含義。 CI/CD 中的“CI”始終指持續集成,它屬於開發人員的自動化流程。成功的 CI 意味著應用代碼的新更改會定期構建、測試並合併到共享存儲庫中。該解決方案可以解決在一次開發中有太多應用分支,從而導致相互衝突的問題。

CI/CD 中的“CD”指的是持續交付和/或持續部署,這些相關概念有時會交叉使用。兩者都事關管道後續階段的自動化,但它們有時也會單獨使用,用於說明自動化程度。

持續交付通常是指開發人員對應用的更改會自動進行錯誤測試並上傳到存儲庫(如 GitHub 或容器註冊表),然後由運維團隊將其部署到實時生產環境中。這旨在解決開發和運維團隊之間可見性及溝通較差的問題。因此,持續交付的目的就是確保盡可能減少部署新代碼時所需的工作量。

持續部署(另一種“CD”)指的是自動將開發人員的更改從存儲庫發佈到生產環境,以供客戶使用。它主要為了解決因手動流程降低應用交付速度,從而使運維團隊超負荷的問題。持續部署以持續交付的優勢為根基,實現了管道後續階段的自動化。

CI/CD 流程

CI/CD 既可能僅指持續集成和持續交付構成的關聯環節,也可以指持續集成、持續交付和持續部署這三項構成的關聯環節。更為複雜的是,有時“持續交付”也包含了持續部署流程。

歸根結底,我們沒必要糾結於這些語義,您只需記得 CI/CD 其實就是一個流程(通常形像地表述為管道),用於實現應用開發中的高度持續自動化和持續監控。因案例而異,該術語的具體含義取決於 CI/CD 管道的自動化程度。許多企業最開始先添加 CI,然後逐步實現交付和部署的自動化(例如作為雲原生應用的一部分)。

CI 持續集成(Continuous Integration)
現代應用開發的目標是讓多位開發人員同時處理同一應用的不同功能。但是,如果企業安排在一天內將所有分支源代碼合併在一起(稱為“合併日”),最終可能造成工作繁瑣、耗時,而且需要手動完成。這是因為當一位獨立工作的開發人員對應用進行更改時,有可能會與其他開發人員同時進行的更改發生衝突。如果每個開發人員都自定義自己的本地集成開發環境(IDE),而不是讓團隊就一個基於雲的 IDE 達成一致,那麼就會讓問題更加雪上加霜。

持續集成(CI)可以幫助開發人員更加頻繁地(有時甚至每天)將代碼更改合併到共享分支或“主幹”中。一旦開發人員對應用所做的更改被合併,系統就會通過自動構建應用並運行不同級別的自動化測試(通常是單元測試和集成測試)來驗證這些更改,確保這些更改沒有對應用造成破壞。這意味著測試內容涵蓋了從類和函數到構成整個應用的不同模塊。如果自動化測試發現新代碼和現有代碼之間存在衝突,CI 可以更加輕鬆地快速修復這些錯誤。

進一步了解技術細節

CD 持續交付(Continuous Delivery)

完成 CI 中構建及單元測試和集成測試的自動化流程後,持續交付可自動將已驗證的代碼發佈到存儲庫。為了實現高效的持續交付流程,務必要確保 CI 已內置於開發管道。持續交付的目標是擁有一個可隨時部署到生產環境的代碼庫。

在持續交付中,每個階段(從代碼更改的合併,到生產就緒型構建版本的交付)都涉及測試自動化和代碼發布自動化。在流程結束時,運維團隊可以快速、輕鬆地將應用部署到生產環境中。

CD 持續部署(Continuous Deployment)

對於一個成熟的 CI/CD 管道來說,最後的階段是持續部署。作為持續交付——自動將生產就緒型構建版本發佈到代碼存儲庫——的延伸,持續部署可以自動將應用發佈到生產環境。由於在生產之前的管道階段沒有手動門控,因此持續部署在很大程度上都得依賴精心設計的測試自動化。

實際上,持續部署意味著開發人員對應用的更改在編寫後的幾分鐘內就能生效(假設它通過了自動化測試)。這更加便於持續接收和整合用戶反饋。總而言之,所有這些 CI/CD 的關聯步驟都有助於降低應用的部署風險,因此更便於以小件的方式(而非一次性)發布對應用的更改。不過,由於還需要編寫自動化測試以適應 CI/CD 管道中的各種測試和發布階段,因此前期投資還是會很大。

By tony

自由軟體愛好者~喜歡不斷的思考各種問題,有新的事物都會想去學習嘗試 做實驗並熱衷研究 沒有所謂頂天的技術 只有謙虛及不斷的學習 精進專業,本站主要以分享系統及網路相關知識、資源而建立。 Github http://stnet253.github.io

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料