

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

# 了解 CI/CD
<a name="understanding-cicd"></a>

持續整合和持續交付 (CI/CD) 是自動化軟體版本生命週期的程序。在某些情況下，CI/CD 中的 *D* 也可以表示*部署*。當您將變更發佈至生產環境時，就會發生*持續交付*與*持續部署*之間的差異。透過持續交付，在提升生產變更之前，需要手動核准。持續部署在整個管道中具有不間斷的流程，不需要明確核准。由於此策略討論一般 CI/CD 概念，因此提供的建議和資訊適用於持續交付和持續部署方法。

CI/CD 會自動化傳統上從遞交取得新程式碼到生產環境所需的許多或所有手動程序。CI/CD 管道包含來源、建置、測試、預備和生產階段。在每個階段中，CI/CD 管道會佈建部署或測試程式碼所需的任何基礎設施。透過使用 CI/CD 管道，開發團隊可以對程式碼進行變更，然後自動測試並推送到部署。

讓我們先檢閱基本 CI/CD 程序，再討論您可以刻意或無意中偏離完全 CI/CD 的一些方式。下圖顯示每個階段中的 CI/CD 階段和活動。



![CI/CD 程序的五個階段，以及每個階段的活動和環境。](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/strategy-cicd-litmus/images/cicd-stages.png)


## 關於持續整合
<a name="about-continuous-integration"></a>

持續整合發生在程式碼儲存庫中，例如 中的 Git 儲存庫GitHub。您會將單一主要分支視為程式碼基礎的真實來源，並建立短期分支以進行功能開發。當您準備好將功能部署到上層環境時，您可以將功能分支整合到主要分支。功能分支永遠不會直接部署到上層環境。如需詳細資訊，請參閱本指南中的 [以主體為基礎的方法](fully-cicd-process-differences.md#trunk-based-approach)。

*持續整合程序*

1. 開發人員會從主分支建立新的分支。

1. 開發人員會在本機進行變更、建置和測試。

1. 當變更準備就緒時，開發人員會建立[提取請求](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests) (GitHub 文件），以主分支做為目的地。

1. 程式碼會經過檢閱。

1. 當程式碼獲得核准時，它會合併到主分支。

## 關於持續交付
<a name="about-continuous-delivery"></a>

持續交付發生在隔離的環境中，例如開發環境和生產環境。每個環境中發生的動作可能有所不同。通常，其中一個第一階段用於在繼續之前更新管道本身。部署的最終結果是，每個環境都會以最新的變更進行更新。用於建置和測試的開發環境數量也有所不同，但我們建議您至少使用兩個。在管道中，每個環境都會依其重要性順序更新，並以最重要的環境做為結尾，也就是生產環境。

*持續交付程序*

管道的持續交付部分會透過從來源儲存庫的主分支提取程式碼並將其傳遞至建置階段來啟動。儲存庫的基礎設施即程式碼 (IaC) 文件概述了在每個階段中執行的任務。雖然使用 IaC 文件不是強制性的，但[AWS Cloud Development Kit (AWS CDK)](https://docs.aws.amazon.com/cdk/latest/guide/home.html)強烈建議使用 IaC 服務或工具，例如 [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)或 。最常見的步驟包括：

1. 單位測試

1. 程式碼建置

1. 資源佈建

1. 整合測試

如果管道中的任何階段發生任何錯誤或任何測試失敗，目前階段會回復到先前的狀態，且管道會終止。後續變更必須在程式碼儲存庫中開始，並執行完整的 CI/CD 程序。