這里的CD可對應多個英文名稱,持續(xù)交付Continuous Delivery和持續(xù)部署Continuous Deployment。下面我們分別來看看上面是持續(xù)交付和持續(xù)部署。
持續(xù)交付
持續(xù)交付(CD)實際上是 CI 的擴展,其中軟件交付流程進一步自動化,以便隨時輕松地部署到生成環(huán)境中。 成熟的持續(xù)交付方案也展示了一個始終可部署的代碼庫。使用 CD 后,軟件發(fā)布將成為一個沒有任何緊張感的例行事件。 開發(fā)團隊可以在日常開發(fā)的任何時間進行產(chǎn)品級的發(fā)布,而不需要詳細的發(fā)布方案或者特殊的后期測試。
完成 CI 中構(gòu)建及單元測試和集成測試的自動化流程后,持續(xù)交付可自動將已驗證的代碼發(fā)布到存儲庫。為了實現(xiàn)高效的持續(xù)交付流程,務必要確保 CI 已內(nèi)置于開發(fā)管道。持續(xù)交付的目標是擁有一個可隨時部署到生產(chǎn)環(huán)境的代碼庫。
在持續(xù)交付中,每個階段(從代碼更改的合并,到生產(chǎn)就緒型構(gòu)建版本的交付)都涉及測試自動化和代碼發(fā)布自動化。在流程結(jié)束時,運維團隊可以快速、輕松地將應用部署到生產(chǎn)環(huán)境中或發(fā)布給最終使用的用戶。
CD 集中依賴于部署流水線,團隊通過流水線自動化測試和部署過程。此流水線是一個自動化系統(tǒng), 可以針對構(gòu)建執(zhí)行一組漸進的測試套件。CD 具有高度的自動化,并且在一些云計算環(huán)境中也易于配置。在流水線的每個階段,如果構(gòu)建無法通過關鍵測試會向團隊發(fā)出警報。否則,將繼續(xù)進入下一個測試, 并在連續(xù)通過測試后自動進入下一個階段。流水線的最后一個部分會將構(gòu)建部署到和生產(chǎn)環(huán)境等效的環(huán)境中。 這是一個整體的過程,因為構(gòu)建、部署和環(huán)境都是一起執(zhí)行和測試的,它能讓構(gòu)建在實際的生產(chǎn)環(huán)境可部署和可驗證。
持續(xù)部署
持續(xù)部署擴展了持續(xù)交付,以便軟件構(gòu)建在通過所有測試時自動部署。在這樣的流程中, 不需要人為決定何時及如何投入生產(chǎn)環(huán)境。CI/CD 系統(tǒng)的最后一步將在構(gòu)建后的組件/包退出流水線時自動部署。 此類自動部署可以配置為快速向客戶分發(fā)組件、功能模塊或修復補丁,并準確說明當前提供的內(nèi)容。采用持續(xù)部署的組織可以將新功能快速傳遞給用戶,得到用戶對于新版本的快速反饋,并且可以迅速處理任何明顯的缺陷。 用戶對無用或者誤解需求的功能的快速反饋有助于團隊規(guī)劃投入,避免將精力集中于不容易產(chǎn)生回報的地方。
隨著 DevOps 的發(fā)展,新的用來實現(xiàn) CI/CD 流水線的自動化工具也在不斷涌現(xiàn)。這些工具通常能與各種開發(fā)工具配合, 包括像 GitHub 這樣的代碼倉庫和 Jira 這樣的 bug 跟蹤工具。此外,隨著 SaaS 這種交付方式變得更受歡迎, 許多工具都可以在現(xiàn)代開發(fā)人員運行應用程序的云環(huán)境中運行,例如 GCP 和 AWS。但是對于一個成熟的CI/CD管道(Pipeline)來說,最后的階段是持續(xù)部署。作為持續(xù)交付——自動將生產(chǎn)就緒型構(gòu)建版本發(fā)布到代碼存儲庫——的延伸,持續(xù)部署可以自動將應用發(fā)布到生產(chǎn)環(huán)境。