什麼是 CI/CD 管道?
在競爭日益激烈的應用程式市場中,企業面臨著應對軟體更新、錯誤修正和創新的壓力。軟體和營運團隊必須緊密合作,以解決使用者意見回饋、解決問題並部署更新,同時不影響業務營運。傳統軟體開發週期,尤其是基於順序瀑布模型的軟體開發週期,難以跟上現代軟體交付的步伐。隨著軟體開發生命週期變得更緊湊,開發團隊轉為使用 CI/CD 來高效地建立精確、高品質且更安全的程式碼。
CI/CD 代表持續整合和持續交付。在某些情況下,CD 也可能意味著持續部署。
- 持續整合可讓多位開發人員同時處理並合併其程式碼,而不會影響程式碼穩定性。
- 持續交付是一種自動化工作流程,用於測試、驗證和準備軟體,以便在人工核准後發佈。
- 持續部署類似於持續交付,不同之處在於由預先設定的規則自動進行核准。
CI/CD 可以共同實作為一個管道,其中會自動執行先前手動執行的所有程序。若要更全面地了解 CI/CD 管道的運作方式,請參閱下面的圖表。
CI/CD 管道中的每個階段都包含軟體開發過程中的特定活動。它們採用自動化測試來在軟體建置向前傳播之前審查程式碼的品質、漏洞和其他技術問題。這樣,開發團隊就可以盡早識別並修正程式碼問題,從而節省企業大量的時間、資源和成本。
CI/CD 管道的設定看起來很簡單。但是,企業在實作 CI/CD 工作流程時經常面臨挑戰,尤其是在進行內部部署設定時。例如,當公司需要管理大量應用程式、工具和團隊成員時,它們會遇到基礎設施瓶頸。如果沒有解決該瓶頸,開發人員就要浪費更多時間修正管道,而不是處理程式碼本身。
透過將 CI/CD 工作流程轉移到 AWS 雲端,團隊能夠擴展現代化軟體開發工作負載,更有效地傳達變更,以及更高效地管理資源。例如,Duolingo 將其 CI/CD 管道移轉至 AWS EC2 Mac,並且實作進階自動擴展策略。作為結果,他們將建置時間從 50 分鐘縮短到僅有 16 分鐘。
如何建立 CI/CD 管道?
AWS 藉助受管和自動化服務使 CI/CD 實作更加輕鬆、自動化和安全。團隊不需要手動佈建開發工具、伺服器和資源,而是專注於處理高價值的活動,例如回應使用者請求和制定軟體發佈程序的策略。
作為開始,您可以使用 AWS CloudFormation 自動部署雲端資源,DevOps 團隊需要這些雲端資源來設定 CI/CD 管道。首先,在範本中描述所需的資源或使用預先建置的範本。然後,CloudFormation 會佈建資源,這些資源共同構成支援 CI/CD 的基礎環境。接下來,您可以在 AWS 雲端中實作 CI/CD 管道階段,如下所示。
來源
來源階段會追蹤開發人員執行的版本變更。開發人員將原始程式碼的版本從分享的中央儲存庫複製到其本機電腦。然後,他們編輯、編譯、測試修改的程式碼並將其與儲存庫合併。
以下說明團隊如何使用 AWS 工具執行和管理程式碼變更。
步驟 1 - 使用 IDE 編寫程式碼
開發人員可以使用 AWS Cloud9 建立新程式碼或編輯現有程式碼,這是支援熱門程式設計語言的雲端整合式開發環境 (IDE)。藉助 Cloud9,只要有權存取網際網路,您就可以在 Web 瀏覽器上編寫、執行和偵錯原始程式碼。或者,如果您安裝第三方 IDE,則可以下載軟體開發套件 (SDK),以支援以各種語言編寫程式碼,包括 Java、Python 和 JavaScript。SDK 可讓您從偏好的編碼環境,透過應用程式介面 (API) 存取 AWS 資源和程式庫。
步驟 2 - 將程式碼遞交至中央儲存庫
開發人員使用第三方工具 (如 GitHub) 來建立私有程式碼儲存庫、管理提取請求和合併變更。該工具充當版本控制系統,可讓您追蹤同事開發人員遞交的變更,以及根據需要恢復到先前的功能性原始程式碼。
建置和測試
在建置階段,儲存在中央儲存庫中的程式碼會傳送至建置伺服器。然後,建置伺服器將原始程式碼和相依關係轉換為稱為成品的軟體檔案,開發人員可以在後續階段執行該檔案。例如,如果您正在建置一個 Java 程式,則將取得 JAR 或 WAR 檔案。在此階段可以執行幾個初步測試,包括單元和靜態程式碼分析。
- 單元測試可確保個別軟體功能產生正確的結果。
- 靜態程式碼分析會檢查原始程式碼以識別錯誤、安全漏洞,以及是否遵守編碼標準。
如果程式碼在任何測試中失敗,開發人員就將其恢復為先前的狀態並解決問題。
通常,軟體團隊需要設定自己的建置伺服器來封裝其應用程式。此外,他們需要手動編寫測試指令碼,驗證這些指令碼,並且透過重複的反覆運作監控結果。現在,他們可以使用 AWS CodeBuild 加速推進 CI/CD 建置工作流程。該工具可讓團隊在進行變更時自動化建置和測試軟體。它從指定的儲存庫中找到原始程式碼,並且執行您已設定的建置指令碼。
AWS CodeBuild 會自動擴展其運算容量以符合您的組建工作負載。這樣,您不必等待之前的建置完成,就可開始新的建置。軟體團隊可以儘早識別程式碼問題,並在問題變得複雜之前加以解決。
例如,如果您要建置 Node.js 專案,則可以將 Jasmine 或 Jest 測試架構與 AWS CodeBuild 整合。藉助這些架構,您可以輕鬆編寫測試案例,指定預期的結果,並在建置執行期間驗證它們。
建置後立即進行測試階段。它旨在讓應用程式接受更嚴格的測試,讓軟體團隊能夠提升程式碼品質、效能、安全性和其他關鍵方面。藉助 CI/CD 管道,測試可以自動化並擴展到多個領域。
- 整合測試可確保應用程式使用的所有服務和第三方元件彼此正確互動。
- 功能測試從最終使用者的角度提供對應用程式的全面評估。
- 安全測試會探查應用程式是否有潛在的安全風險和漏洞。
- 效能測試可確保應用程式在極端或意外條件 (例如突然的流量高峰) 下保持回應性和功能性。
再次聲明,應用程式必須通過所有指定的測試,然後才能移到下一個階段。
模擬
模擬可讓您在將應用程式發佈給最終使用者之前執行最終檢查。在此階段,軟體團隊將應用程式部署在模仿真實世界實作的環境中。通常,他們會使用模擬資料並招募一組最終使用者來測試應用程式,目標是在發佈前發現未偵測到的問題。
例如,您已更新應用程式,並且想要檢查其在使用者互動方面的行為方式。在模擬環境中部署該應用程式可協助您評估軟體效能,而不會中斷業務營運。滿足所有測試條件後,軟體團隊將應用程式部署到生產環境中,讓最終使用者可以存取該應用程式。
跨環境部署可能極具挑戰性,尤其是在團隊手動執行此任務時。AWS CodeDeploy 可簡化應用程式部署工作。該工具可自動將應用程式部署到各種環境中。您可以檢視部署活動,追蹤變更,以及視需要回復至之前的版本。它還可以彌補模擬和生產之間的差距。例如,您可以使用用於生產發佈模擬的確切部署指示。
生產
生產是真實使用者存取您應用程式的即時環境。修改、測試和驗證變更後,軟體團隊會在生產環境中發佈更新的應用程式。雖然此舉動標誌 CI/CD 管道的結束,但確保應用程式符合效能、安全性和業務要求的努力仍在繼續。因此,在生產中運作時,您需要持續監控應用程式。
Amazon CloudWatch 服務可讓開發和營運團隊詳細了解其在 AWS、內部部署或其他雲端環境上部署的應用程式。該服務會自動收集並視覺化營運資料,讓您更全面地了解應用程式在真實環境下的表現。此外,您可以設定提醒並接收需要團隊立即關注之事件的通知。
您如何自動化 CI/CD 管道?
簡化來自不同供應商的 CI/CD 工具可能極具挑戰性,尤其是如果涉及廣泛的手動設定。但是,藉助 AWS CodePipeline,您可以自動化、擴展和加速整個程式碼發佈程序,同時仍然保持靈活性。
AWS CodePipeline 可讓您使用圖形化使用者介面建模 CI/CD 工作流程。您可以輕鬆將 AWS 服務整合到管道中,或者連線至您使用的現有工具和資源。例如,如果您想使用 Jenkins 作為建置伺服器,則可以將其與 AWS CodePipeline 整合。
我們在下面總結相應的執行步驟。
- 安裝 Jenkins 和適用於 Jenkins 的 AWS CodePipeline 外掛程式。
- 然後,藉助適用於 Jenkins 的 AWS Identity and Access Management (IAM) 設定存取許可。這可讓 Jenkins 使用授權憑證與 AWS CodePipeline 進行互動。
- 登入 AWS CodePipeline 主控台並建立自訂管道。
- 將該管道連線至分享的原始程式碼儲存庫,例如 GitHub。
- 然後,新增一個建置階段並選取 Jenkins 作為建置伺服器。
- 新增任何必要的測試階段,包括所需的測試動作和建置觸發程式。
- 接下來,將部署階段連線至 AWS CodeDeploy 或其他部署服務。
AWS 如何支援您的 CI/CD 管道需求?
CI/CD 管道支援企業更快速地生產、測試和發佈應用程式更新,而不會影響軟體品質和安全性。軟體開發團隊使用自動化 CI/CD 工具修改程式碼、合併變更、自動化測試、排程部署等。但是,有些團隊因基礎設施、資源和程序限制而在擴展 CI/CD 工作流程方面遇到挑戰。
AWS 提供一套雲端式解決方案來建立、簡化和擴展 CI/CD 管道。
- AWS CloudFormation 佈建 CI/CD 工具在其上執行的資源。
- AWS Cloud9 可讓開發人員從其瀏覽器編寫、執行和偵錯程式碼。
- AWS CodeBuild 可讓您編譯、測試和封裝應用程式,而無需管理自己的建置伺服器。
- AWS CodeDeploy 可在任何環境中自動部署,包括內部部署和 AWS 執行個體。
- AWS CodePipeline 可讓您建模整個 CI/CD 工作流程,從來源到即時生產環境。
- AWS CloudWatch 可讓營運團隊持續監控、記錄和分析已部署的應用程式。
如果您需要進一步協助設定 CI/CD 管道,請聯絡 Amazon 專業服務團隊。