1. 程式人生 > 其它 >CICD:持續整合、持續交付、持續部署

CICD:持續整合、持續交付、持續部署

一、簡介

CI / CD的採用改變了開發人員和測試人員如何釋出軟體。

最初是瀑布模型,後來是敏捷開發,現在是DevOps,這是現代開發人員構建出色的產品的技術路線。隨著DevOps的興起,出現了持續整合(Continuous Integration)、持續交付(Continuous Delivery)、持續部署(Continuous Deployment)的新方法。傳統的軟體開發和交付方法正在迅速變得過時。從歷史上看,在敏捷時代,大多數公司會每月,每季度,每兩年甚至每年釋出部署/釋出軟體。然而,現在,在DevOps時代,每週,每天,甚至每天多次是常態。當SaaS正在佔領世界時,尤其如此,您可以輕鬆地動態更新應用程式,而無需強迫客戶下載新元件。很多時候,他們甚至都不會意識到正在發生變化。開發團隊通過軟體交付流水線(Pipeline)實現自動化,以縮短交付週期,大多數團隊都有自動化流程來檢查程式碼並部署到新環境。今天,我們將介紹什麼是CI / CD / CD,以及現代軟體公司如何使用工具將部署程式碼的流程自動化。
持續整合的重點是將各個開發人員的工作集合到一個程式碼倉庫中。通常,每天都要進行幾次,主要目的是儘早發現整合錯誤,使團隊更加緊密結合,更好地協作。
持續交付的目的是最小化部署或釋放過程中固有的摩擦。它的實現通常能夠將構建部署的每個步驟自動化,以便任何時刻能夠安全地完成程式碼釋出(理想情況下)。
持續部署是一種更高程度的自動化,無論何時對程式碼進行重大更改,都會自動進行構建/部署。
這些階段中的每一個都是交付管道的一部分 。在Humble和Farley的書《持續交付:可靠的軟體版本中,通過構建,測試和部署自動化》,解釋“對軟體的每次更改,都會在釋出過程中經歷一個複雜的過程。該過程涉及構建軟體,然後通過多個測試和部署階段進行這些構建。反過來,這需要許多人之間的合作,也許需要幾個團隊之間的合作。部署管道對此過程進行建模,並且它在持續整合和釋出管理工具中的實現,使您能夠在從版本控制轉移到各種測試和部署,以向用戶釋出時檢視和控制每個更改的進度。”

軟體交付流水線

二、持續整合(CI)

通過持續整合,開發人員能夠頻繁將其程式碼整合到公共程式碼倉庫的主分支中。開開發人員能夠在任何時候多次向倉庫提交作品,而不是獨立地開發每個功能模組並在開發週期結束時一一提交。
這裡的一個重要想法是讓開發人員更快,更頻繁地做到這一點,從而降低整合成本。實際情況中,開發人員在整合時經常會發現新程式碼和已有程式碼存在衝突。如果整合較早並更加頻繁,那麼衝突將更容易解決且執行成本更低。當然,還有一些權衡。此流程變更不提供任何額外的質量保證。實際上,許多組織發現這種整合變得更加昂貴,因為它們依賴於手動過程來確保新程式碼不會引入新的錯誤,並且不會破壞現有程式碼。為了減少整合任務期間的摩擦,持續整合依賴於測試套件和自動化測試執行。然而,要認識到自動化測試和持續測試是完全不同的這一點很重要,我們會在文章結尾處詳細說明。
CI 的目標是將整合簡化成一個簡單、易於重複的日常開發任務,這將有助於降低總體構建成本,並在週期的早期發現缺陷。要想有效地使用 CI 必須轉變開發團隊的習慣,要鼓勵頻繁迭代構建,並且在發現 bug 的早期積極解決。

三、持續部署

實際上是 CI 的擴充套件,其中軟體交付流程進一步自動化,以便隨時輕鬆地部署到生成環境中。CD 集中依賴於部署流水線,團隊通過流水線自動化測試和部署過程。此流水線是一個自動化系統,可以針對構建執行一組漸進的測試套件。CD 具有高度的自動化,並且在一些雲端計算環境中也易於配置。在流水線的每個階段,如果構建無法通過關鍵測試會向團隊發出警報。否則,將繼續進入下一個測試,並在連續通過測試後自動進入下一個階段。流水線的最後一個部分會將構建部署到和生產環境等效的環境中。這是一個整體的過程,因為構建、部署和環境都是一起執行和測試的,它能讓構建在實際的生產環境可部署和可驗證。
AWS上提供了現代CI / CD管道的可靠展示。亞馬遜是雲端計算提供商之一,提供令人印象深刻的CI / CD 管道環境,並提供一個演練過程,您可以從其中選擇眾多開發資源,並將它們連結在一個易於配置且易於監控的管道中。

許多人認為持續交付的吸引力主要在於,它自動化了從提交程式碼到倉庫,再到測試和釋出產品過程的所有步驟。這是構建和測試過程細緻的自動化,但是如何釋出以及釋出什麼仍然是需要人工操作,持續部署可以改變這一點。

四、持續部署

持續部署擴充套件了持續交付,以便軟體構建,在通過所有測試時自動部署。在這樣的流程中,不需要人為決定何時及如何投入生產環境。CI/CD 系統的最後一步將在構建後的元件/包退出流水線時自動部署。此類自動部署可以配置為快速向客戶分發元件、功能模組或修復補丁,並準確說明當前提供的內容。
採用持續部署的組織可以將新功能快速傳遞給使用者,得到使用者對於新版本的快速反饋,並且可以迅速處理任何明顯的缺陷。使用者對無用或者誤解需求的功能的快速反饋有助於團隊規劃投入,避免將精力集中於不容易產生回報的地方。隨著 DevOps 的發展,新的用來實現 CI/CD 流水線的自動化工具也在不斷湧現。這些工具通常能與各種開發工具配合,包括像 GitHub 這樣的程式碼倉庫和 Jira 這樣的 bug 跟蹤工具。此外,隨著 SaaS 這種交付方式變得更受歡迎,許多工具都可以在現代開發人員執行應用程式的雲環境中執行,例如 GCP 和 AWS。最受歡迎的自動化工具是 Jenkins(以前的 Hudson),這是一個由數百名貢獻者和商業公司 Cloudbees 支援的開源專案。Cloudbees 甚至聘請了 Jenkins 的創始人,並提供了一些 Jenkins 培訓專案和附加元件。除了開源專案之外,還有一些更現代化的商業產品例如 CircleCI,Codeship 和 Shippable。這些產品各有優缺點,我鼓勵開發人員在開發流程中一一嘗試它們,以瞭解它們在您的環境中的工作方式,以及它們如何與您的工具、雲平臺、容器系統等協作。

一旦部署了現代化的 CI/CD 流水線,您可能會意識到開發人員工作流程中的一些工具和流程也需要進行現代化改造。測試是一個要著重關注的領域,如果您的部署頻率是每天或者一天多次,您的每次測試可能需要數小時甚至一晚上才能完成。mabl 正在使用機器學習解決這個問題。

不積跬步,無以至千里;不積小流,無以成江海。