做者:Tiffany Jachjanpm
在8月份,我分享了一個關於經過模式和實踐啓用CI/CD的談話。這篇博客文章總結了上述談話的內容,告訴讀者如何實現持續的軟件交付。安全
CI/CD是什麼?微信
今天的軟件交付,不只僅是將可交付的東西交到客戶手中。爲了成功,團隊和組織須要以快速、安全和可重複的方式交付價值。架構
下面DevOps生命週期圖中是交付軟件所需的操做:框架
持續集成和持續交付(Continuous Integration and Continuous Delivery,CI/CD)使得軟件交付工做流,可以涉及多個團隊和跨越開發、保證、操做、安全和財務團隊的功能。讓咱們更詳細地討論CI和CD,以便更好地理解目標和實現模式。工具
持續集成(CI)支持開發團隊和工做流。在任何開發團隊中,最大的挑戰都是管理特性開發。使用代碼涉及開發、合併衝突、代碼管理和測試,致使部署提早時間長、部署不頻繁和高更改失敗率。解決方案是利用CI以自動化的方式集成開發變動,從而改進特性開發的節奏和過程。性能
持續交付(CD)支持運營團隊和工做流。目標是安全並重復地將工件交付到生產環境中。CD流程幫助實現服務的自動化操做,包括髮布、部署和監視應用程序。當咱們將一個工件提高到生產環境或更高的環境中時,咱們會給驗證過程添加嚴格性。爲環境的每一個階段或工做流添加額外的測試,容許咱們在到達客戶以前捕獲問題。單元測試
今天,咱們將責任和目標向左轉移,以確保在軟件交付過程的早期捕獲到問題。不然,生產故障和事件管理可能對企業有害。學習
持續集成實踐和模式測試
在前面提到的高級環境中,每一個CI/CD進程都須要構建應用程序代碼。當你構建應用程序時,源代碼將被編譯或解釋並處理爲可部署的包。這個可部署的包稱爲CI/CD過程當中的工件。讓咱們分享一些使用持續集成實踐處理構建過程的實際例子。
對構建進行自動化和測試
CI流水線中的主要實踐是自動化構建過程。這個構建過程能夠利用特定代碼基的構建工具。例如,你可使用npm來構建Node JavaScript應用程序,或者使用Maven和Gradle來構建基於Java或JVM的應用程序。
在構建過程當中,你但願確保集成並執行單元測試,以便對不知足功能需求的代碼進行構建時失敗。另外一方面,沒有足夠的單元測試或代碼覆蓋率可能會致使構建經過但在CI/CD進程線上失敗。所以,確保你擁有單元測試對於持續集成流程來講是不可或缺的。它們在機器上建立和運行的資源也更便宜。端到端(E2E)開銷大,調試困難,由於它們須要運行多個服務。
工做的主線
另外一個CI實踐涉及到開發團隊儘早將他們的代碼集成到他們代碼存儲庫的主要分支中。這能夠防止在開發人員進行特性開發時,對特性和主要分支的維護變得很是糟糕。即便事情仍在進行中,該工做對主分支的任何最終用戶或測試人員都是不可見的。
修復壞掉的
第三個CI實踐涉及到修復主幹中損壞的構建。持續集成假設你的團隊正在開發已知的穩定版本的代碼。
持續交付實踐和模式
持續的交付過程能夠確保安全、快速和可持續地將任何類型的更改交付到生產環境或交付到消費者手中。持續交付實踐和模式有助於實現這些結果。
自動化交付生命週期
每一個組織都有一個建立和交付代碼的流程。一個持續交付流水線使這個過程自動化。典型的交付職責包括配置基礎設施、部署應用程序、批准部署變動、質量保證/測試和監視。使用CD流水線做爲這些現有進程的模型。
基礎架構即代碼(Infrastructure as code)是一種幫助團隊提供、配置和管理基礎架構資源的實踐。
定義發佈和回滾策略
軟件發佈是軟件向消費者的分發。不管什麼時候咱們發佈軟件,咱們都會引入漏洞、問題、bug和非性能軟件的風險。回滾部署或生成修復程序的緣由可能有不少。
定義一個適用於你的用例的發佈策略,以減小變動的恐懼和風險。一些交付團隊將使用「漸進交付」策略向客戶發佈新特性。其中一些實踐包括Canary部署和特性標誌管理。我建議學習更多關於這些功能的知識,以及如何經過CI/CD流水線啓用它們。
此外,回滾策略每每反映發佈策略。是否決定在部署新實例時保持應用程序的當前版本運行,這取決於你。只要確保你有一個回滾策略來處理任何宕機和數據丟失。
在較低的環境中快速失敗
使用瀑布方法進行交付的組織艱難地努力知足不斷變化的環境和指望。在流水線中快速失敗相似於在開發團隊中借用敏捷和精益方法成爲事實標準。咱們主要但願作的是將責任和活動轉移到交付軟件的過程當中。向左思惟的轉變使開發人員得到了技能和工具,能夠在不破壞東西的狀況下快速行動。
大多數產品團隊可能更喜歡在問題到達客戶以前抓住它。在較低的環境中使用流水線以快速失敗,並避免頻繁的生產事故。
總結
你的CI/CD流水線充當SDLC流程的模型。它創建了一個自動化的企業治理過程,確保你的組織可以積極地管理和理解風險。
這篇文章主要介紹了用於構建健壯的、有能力的CI/CD流水線的現有實踐和模式。若是你從一個實踐開始,我建議你將測試集成到CI流程中。這將致使關於自動化其餘相關軟件開發和交付工做流的額外討論。
這就是我演講的所有內容!感謝每個加入任何現場會議與此內容。交付的生態系統是不斷進化的。我但願繼續簡化和擴大咱們今天持續交付的方式。若是你對這些內容感興趣,我將在10月7-8日的CDCon 快閃演講中分享一個可伸縮的CI/CD框架。若是你想知道將來的內容和活動,能夠關注個人推特( @tiffanyjachja )和領英。
爲下一代持續交付協做提供一箇中立的家。
CDF(Continuous Delivery Foundation,持續交付基金會)是許多快速增加的持續交付項目,包括Jenkins、Jenkins X、Spinnaker和Tekton,的供應商中立家園。CDF經過開放模型、培訓、行業指南和可移植性重點來支持DevOps從業者。
Linux基金會是非營利性組織,是技術生態系統的重要組成部分。
Linux基金會經過提供財務和智力資源、基礎設施、服務、活動以及培訓來支持建立永續開源生態系統。在共享技術的建立中,Linux基金會及其項目經過共同努力造成了非凡成功的投資。掃描二維碼關注LFAPAC微信公衆號。