

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 持續整合和持續交付
<a name="ci-cd"></a>

**比使用傳統軟體開發和基礎設施管理程序的組織更快地發展和改善應用程式和服務。**

採用具有[持續整合](https://aws.amazon.com/devops/continuous-integration/)和[持續交付](https://aws.amazon.com/devops/continuous-delivery/) (CI/CD) 的 [DevOps](https://aws.amazon.com/devops/) 實務，可提升建置、測試和部署應用程式的簡化、自動化和高效率程序。CI/CD 可讓您快速交付軟體、降低部署錯誤的風險，並確保應用程式隨時掌握最新功能和錯誤修正。主要目標是透過使用傳統軟體開發和基礎設施管理程序，以更快的速度發展和改善應用程式和服務。

## Start
<a name="ci-cd-start"></a>

### 採用軟體元件管理
<a name="ci-cd-components"></a>

軟體元件管理是管理用於建置軟體的所有個別元件的實務，包括程式庫、架構、原始程式碼儲存庫、模組、成品和第三方相依性。我們建議您使用 Git 或 Apache Subversion 等版本控制系統來管理原始碼、啟用協同合作，以及維護程式碼變更的歷史記錄。您可以監控儲存庫中的變更和事件，以自動化程序、建立管道、管理您的程式碼，並視需要將工作流程與其他 服務整合。 

### 建立 CI/CD 管道
<a name="ci-cd-pipelines"></a>

CI/CD 管道是由遞交至版本控制系統的變更所啟動的一組自動化指示。它們通常包含建置應用程式、執行自動化測試，以及將程式碼部署到特定環境的指示。您可以使用 [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html)、Jenkins、GitLab 或 CircleCI 等工具來設定自動化 CI/CD 管道。您也可以直接在支援管道產生版本的控制系統中設定它們。

從用於持續整合的最低可行管道開始，然後轉換到包含更多動作和階段的[持續交付](https://aws.amazon.com/builders-library/going-faster-with-continuous-delivery/?did=ba_card&trk=ba_card)管道。將您的持續交付組態視為程式碼。您可以為每個分支和團隊使用多個不同的管道，因此請考慮您需要設定哪些組態變數，以及如何最好地支援將使用管道的團隊。

考慮部署時段 – 您要部署程式碼的日期和時間。請考慮您系統的低需求時數，因此如果您必須轉返，它將對您的客戶影響最小。其他最佳實務包括避免在星期五進行部署，以及在高尖峰日期或假日之前實作程式碼凍結。當遞交的作者無法使用時 （例如假期），請考慮定義有關部署程式碼的規則。請記住，部署失敗，您可能需要依賴外部協助。評估不同的[部署方法](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/deployment-methods.html)，例如就地部署、滾動部署、不可變部署和藍/綠部署。請考慮將全受管服務用於持續交付工作流程，以提高可用性和安全性，同時將複雜性和管理降至最低。

### 部署自動化測試
<a name="ci-cd-testing"></a>

現代實務建議*向左轉移* （將測試移至更靠近開發人員和 [IDE](https://aws.amazon.com/what-is/ide/)，以及更早的生命週期），以在問題遞交至儲存庫並啟動管道之前偵測和修復問題。此實務涉及開發人員的快速意見回饋迴圈，因為在開發人員進行編碼時偵測到錯誤。向左轉移與降低成本相關聯，因為測試不需要執行管道，這可能會導致非同步意見回饋和更高的營運費用。

自動化測試會在開發程序初期發現錯誤，並包含單元測試、整合測試和功能測試。建議您鼓勵[開發人員儘早使用工具](https://aws.amazon.com/products/developer-tools/)來建立單元測試，並在將程式碼推送至中央儲存庫之前執行它們。此外，請確定您的自動化程序包含[靜態程式碼分析](https://aws.amazon.com/blogs/devops/automating-detection-of-security-vulnerabilities-and-bugs-in-ci-cd-pipelines-using-amazon-codeguru-reviewer-cli/)、效能基準測試和安全應用程式測試。

### 建立文件
<a name="ci-cd-docs"></a>

除了實作 CI/CD 管道以簡化開發工作流程之外，您應該維護清晰且全面的文件，以確保管道的持續有效性、可維護性和可擴展性。文件是 CI/CD 管道的重要層面，因為它可讓開發團隊清楚了解管道的設計、元件和程序。當您建立文件時，請從管道概觀開始、解釋架構和設計權衡、描述正在使用的工具和技術、指定初始組態和設定、概述安全措施和存取控制，以及包含疑難排解和維護資訊。

### 使用基礎設施做為程式碼
<a name="ci-cd-iac"></a>

使用 Terraform、Ansible 或 等工具[AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)來管理基礎設施，並確保一致且可重現的環境。將您的基礎設施視為程式碼，確保您追蹤基礎設施的變更，並避免直接在主控台中進行變更。定義所有基礎設施，包括資料庫佈建，即程式碼，並使用管道部署這些變更。考慮在具有一小部分已淨化生產資料的管道中，以程式碼形式執行資料庫整合。如果可能，請進行變更，並在程式碼中追蹤這些變更。

如同軟體程式碼，請遵循基礎設施程式碼的這些最佳實務：
+ 使用版本控制。
+ 利用錯誤追蹤和票證系統。
+ 讓對等檢閱變更後再套用。
+ 建立基礎設施程式碼模式和設計。
+ 測試基礎設施變更。

### 保留和追蹤標準指標
<a name="ci-cd-metrics"></a>

為了維持高水準的效能，請針對關鍵指標進行開發和追蹤，以了解管道的運作狀態和業務影響，包括：
+ **組建頻率。**建置數量可讓您深入了解團隊的生產力和變更的複雜性。
+ **部署頻率。**定期部署表示運作狀態良好、敏捷的開發程序。
+ **變更的前置時間。**測量變更達到生產的平均時間，可協助您識別部署過程中的瓶頸。
+ **管道的平均時間。**從初始管道階段到每個後續階段的平均時間，有助於最佳化您的工作流程。
+ **生產變更量。**追蹤到達生產環境的變更數量，可讓您深入了解生產環境的穩定性。
+ **建置時間。**平均建置時間可能表示程式碼庫或基礎設施中的潛在問題。

## 進階
<a name="ci-cd-advance"></a>

### 使用組態管理
<a name="ci-cd-config"></a>

組態管理工具在自動化部署、組態和管理軟體和基礎設施方面扮演重要角色。它們提供一種系統性方法來處理變更，並維護各種環境中基礎設施、軟體和組態的所需狀態。這些工具可讓開發人員使用宣告性或命令性語言來定義系統所需的狀態。然後，組態管理工具會自動將這些組態套用至目標系統的程序，以確保一致性和可重複性。

使用組態管理工具來自動化軟體和基礎設施的部署、組態和管理。[AWS Systems Manager State Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-state.html) 是一種安全且可擴展的組態管理服務，可將受管節點和其他 AWS 資源維持在您定義的狀態的程序自動化。

### 整合監控和記錄
<a name="ci-cd-monitoring"></a>

將監控和記錄解決方案整合到 CD 管道，可為開發團隊和整體軟體開發程序帶來許多好處。這些解決方案可以提供應用程式效能的即時洞見、更快速地識別和解決問題，並促進持續改進，以協助確保應用程式在整個生命週期中保持可靠性、效能和可擴展性。投資監控和記錄解決方案是維護強大且有效率的 CD 管道的關鍵層面，最終有助於成功交付高品質的軟體。

### 建立合併的節奏
<a name="ci-cd-cadence"></a>

每天至少對主線 （幹線或主） 分支遞交或合併程式碼變更一次，或最好在每個任務之後每天多次。此節奏會導致多個每日管道調用。提取式分支工作流程模型符合此方法。使用[特徵標記](https://aws.amazon.com/blogs/mt/using-aws-appconfig-feature-flags/)、[暗啟動](https://martinfowler.com/bliki/DarkLaunching.html)和類似技術來自訂客戶使用的功能。 

### 擷取部署後行為
<a name="ci-cd-post-deploy"></a>

部署之後，請使用自動化合成測試擷取生產行為，並將結果與持續交付管道同步，以確保立即執行修正動作。開發人員的首要任務應該是盡快修正管道中發現的錯誤、將程式碼變更遞交至原始程式碼儲存庫，以及驗證管道中的錯誤解析。

部署後最佳實務包括觀察最重要的關鍵績效指標 (KPIs)，並驗證生產環境中沒有錯誤。自動化錯誤處理和評估部署後 KPIs，以量化版本的影響。自動產生開發人員可用來進行改善的速度、安全性和穩定性指標。如需詳細資訊，請參閱 上的 [DevOps 監控儀表板](https://aws.amazon.com/solutions/implementations/aws-devops-monitoring-dashboard/)解決方案 AWS。

## Excel
<a name="ci-cd-excel"></a>

採用尖端實務和技術以獲得最佳效能。持續精簡 CI/CD 程序可協助您改善軟體品質、縮短上市時間，並提高敏捷性。新的技術和工具會持續出現，這使得您的組織必須隨時掌握資訊並適應以維持競爭優勢。

若要保持適應性，請考慮下列事項：
+ 將一切定義為程式碼，包括您的應用程式、組態、基礎設施、資料、 AWS 帳戶和組織、部署管道、聯網，以及安全與合規控制。
+ 為運算映像、共用服務和應用程式建立對應的[部署管道](https://aws-samples.github.io/aws-deployment-pipeline-reference-architecture)。
+ 考慮 GitOps 模型，其中提取型請求會透過比較現有基礎設施狀態與所需狀態來啟動工作流程以部署變更，如程式碼中所述。
+ 考慮使用 CD 管道來部署機器學習 (ML)、資料、物聯網 (IoT) 和其他工作負載。
+ 以數位方式簽署所有建置成品，並將其存放在安全儲存庫中。
+ 透過自動產生軟體物料清單來追蹤軟體來源，該清單會建立部署給客戶的所有版本化和數位簽章成品的記錄。
+ 在您消除軟體交付程序中的所有手動活動之後，請移除手動檢閱板。

對於已自動化整個軟體交付程序的應用程式和服務，請考慮持續部署，其中團隊會部署變更，將管道中的所有檢查傳遞給生產環境中的客戶。如需視覺效果，請參閱 網站上的[什麼是持續交付？](https://aws.amazon.com/devops/continuous-delivery/)的第一個 AWS 圖表。

### 整合 AI/ML 技術
<a name="ci-cd-aiml"></a>

將人工智慧 (AI) 和機器學習 (ML) 技術整合至 CI/CD 管道提供數種優點，包括下列項目：
+ 自動化測試產生
+ 智慧測試優先順序
+ 偵測問題的預測分析
+ 異常偵測和根本原因分析
+ 程式碼檢閱和品質保證
+ 部署最佳化

如需詳細資訊，請參閱 AWS 網站上的[新增智慧到您的開發人員操作](https://aws.amazon.com/machine-learning/ml-use-cases/ai-for-devops/)。

### 採用混沌工程實務
<a name="ci-cd-chaos"></a>

混沌工程涉及刻意將故障注入系統，以測試其承受意外事件並從中復原的能力。透過識別弱點並主動解決它們，組織可以改善其整體系統可靠性，並將潛在問題的影響降至最低。

採用混沌工程實務，使用 Gremlin、Chaos Monkey 或 Litmus 等工具來測試系統的彈性。定期執行受控實驗，以識別漏洞、驗證容錯能力，並確保您的應用程式正常處理非預期的故障。這種主動方法有助於提高系統可靠性，並有助於更強大的 CI/CD 管道。

### 最佳化效能
<a name="ci-cd-perf"></a>

使用分析工具、即時監控和回饋迴圈，持續最佳化應用程式的效能。套用下列技術，以確保您的應用程式可以處理增加的流量和需求：
+ 程式碼最佳化
+ 分析
+ 即時監控
+ 回饋迴圈
+ 快取
+ 負載平衡
+ 可擴展性和效能測試

### 實作進階可觀測性
<a name="ci-cd-adv-observability"></a>

提升雲端基礎設施的可觀測性，不僅止於收集、彙總和分析指標、日誌和追蹤的基本概念。當使用 [Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html) 和 等工具增強可觀測性時[AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html)，它會發展為策略實務，以推動持續交付和創新。

在強大的 CI/CD 管道中，進階可觀測性可讓您發現洞見，不只是關於應用程式和基礎設施，也關於整個系統的效能和運作狀態，包括管道本身。這些洞見可協助您：
+ 快速識別、了解和解決潛在問題，以改善應用程式穩定性並減少停機時間
+ 簡化 CI/CD 程序，以建立更快且更可靠的交付
+ 深入了解程式碼變更和部署的影響，以推動明智的決策
+ 最佳化資源使用率，以提高營運效率和成本效益

若要提升可觀測性：
+ 將可觀測性嵌入應用程式和基礎設施的每一層，以建立系統效能、行為和運作狀態的完整檢視。
+ 使用 Amazon CloudWatch 等工具集中資料收集、儲存和分析，以統一您的可觀測性資料，以便於存取和解譯。
+ 使用 AWS X-Ray 進行分散式追蹤，以了解應用程式及其基礎服務的效能。
+ 建立回饋迴圈以持續改進，並使用可觀測性資料來推動系統的反覆增強。

採用進階可觀測性不只是維護您的系統，而是實現卓越營運並推動組織中持續創新的策略發展。

### 實作 GitOps 實務
<a name="ci-cd-adv-gitops"></a>

實作 GitOps 實務，透過使用 Git 儲存庫作為單一事實來源來管理基礎設施和應用程式組態。此方法可簡化變更管理、增強可追蹤性，並確保跨環境的一致性。