

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

# 教學：建立簡易管道 (S3 儲存貯體)
<a name="tutorials-simple-s3"></a>

建立管道最簡單的方法是使用 AWS CodePipeline 主控台中的**建立管道**精靈。

在本教學課程中，您會建立兩階段管道，使用版本控制的 S3 來源儲存貯體和 CodeDeploy 來釋出範例應用程式。

**注意**  
當 Amazon S3 是管道的來源提供者時，您可以將來源檔案壓縮為單一 .zip，並將 .zip 上傳至來源儲存貯體。您也可以上傳單一解壓縮檔案；不過，預期 .zip 檔案的下游動作會失敗。

**重要**  
在建立管道的過程中，CodePipeline 將使用客戶提供的 S3 成品儲存貯體來製作成品。（這與用於 S3 來源動作的 儲存貯體不同。) 如果 S3 成品儲存貯體位於與管道帳戶不同的帳戶中，請確定 S3 成品儲存貯體由 所擁有 AWS 帳戶 ，安全且可靠。

在您建立此範本管道後，您將新增另一個額外階段，然後停用並啟用階段間的轉換。

**重要**  
您在此程序中新增至管道的許多動作都涉及您在建立管道之前需要建立 AWS 的資源。來源動作 AWS 的資源一律必須在您建立管道 AWS 的相同區域中建立。例如，如果您在美國東部 （俄亥俄） 區域建立管道，則 CodeCommit 儲存庫必須位於美國東部 （俄亥俄） 區域。  
您可以在建立管道時新增跨區域動作。跨區域動作 AWS 的資源必須位於您計劃執行動作的相同 AWS 區域中。如需詳細資訊，請參閱[在 CodePipeline 中新增跨區域動作](actions-create-cross-region.md)。

在您開始之前，應先完成 [CodePipeline 入門](getting-started-codepipeline.md) 中的事前準備。

**Topics**
+ [步驟 1：為您的應用程式建立 S3 來源儲存貯體](#s3-create-s3-bucket)
+ [步驟 2：建立 Amazon EC2 Windows 執行個體並安裝 CodeDeploy 代理程式](#S3-create-instances)
+ [步驟 3：在 CodeDeploy 中建立應用程式](#S3-create-deployment)
+ [步驟 4：在 CodePipeline 中建立您的第一個管道](#s3-create-pipeline)
+ [(選用) 步驟 5：新增另一個階段至您的管道](#s3-add-stage)
+ [（選用） 步驟 6：停用和啟用 CodePipeline 中階段之間的轉換](#s3-configure-transitions)
+ [步驟 7：清除資源](#s3-clean-up)

## 步驟 1：為您的應用程式建立 S3 來源儲存貯體
<a name="s3-create-s3-bucket"></a>

您可以將來源檔案或應用程式存放於任何版本控制的位置。在本教學課程中，您會為範例應用程式檔案建立 S3 儲存貯體，並在該儲存貯體上啟用版本控制。啟用版本控制後，您會複製範本應用程式至該儲存貯體。

**建立 S3 儲存貯體**

1. 登入位於 的 主控台 AWS 管理主控台。開啟 S3 主控台。

1. 選擇**建立儲存貯體**。

1. 在 **Bucket Name (儲存貯體名稱)** 中，輸入儲存貯體的名稱 (例如 **awscodepipeline-demobucket-example-date**)。
**注意**  
由於 Amazon S3 中的所有儲存貯體名稱必須是唯一的，請使用您自己的名稱，而不是範例中顯示的名稱。您只要新增日期至範例名稱就可變更名稱。請記下此名稱，因為您在整個教學課程中都會用到。

   在**區域中**，選擇您要建立管道的區域，例如**美國西部 （奧勒岡）**，然後選擇**建立儲存貯**體。

1. 建立儲存貯體後，會顯示成功橫幅。選擇 **Go to bucket details (前往儲存貯體詳細資訊)**。

1. 在 **Properties (屬性)** 標籤上，選擇 **Versioning (版本控制)**。選擇 **Enable versioning (啟用版本控制)**，然後選擇 **Save (儲存)**。

   啟用版本控制時，Amazon S3 會儲存儲存貯體中每個物件的每個版本。

1. 在 **Permissions (許可)** 索引標籤上，保留預設值。如需 S3 儲存貯體和物件許可的相關資訊，請參閱[在政策中指定許可](https://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html)。

1. 接著，下載範本並將其儲存至本機電腦的資料夾或目錄中。

   1. 選擇下列其中一項。如果要依照本教學中針對 Windows Server 執行個體的步驟執行，請選擇 `SampleApp_Windows.zip`。
      + 如果您想要使用 CodeDeploy 部署到 Amazon Linux 執行個體，請在此處下載範例應用程式：[SampleApp\$1Linux.zip](samples/SampleApp_Linux.zip)。
      + 如果您想要使用 CodeDeploy 部署到 Windows Server 執行個體，請在此處下載範例應用程式：[SampleApp\$1Windows.zip](samples/SampleApp_Windows.zip)。

      範例應用程式包含下列使用 CodeDeploy 部署的檔案：
      + `appspec.yml` – 應用程式規格檔案 (AppSpec 檔案） 是 CodeDeploy 用來管理部署的 [YAML](http://www.yaml.org) 格式檔案。如需 AppSpec 檔案的詳細資訊，請參閱*AWS CodeDeploy 《 使用者指南*》中的 [CodeDeploy AppSpec 檔案參考](https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file.html)。
      + `index.html` – 索引檔案包含已部署範例應用程式的首頁。
      + `LICENSE.txt` – 授權檔案包含範例應用程式的授權資訊。
      + 指令碼的檔案 – 範例應用程式使用指令碼將文字檔案寫入執行個體上的位置。每個 CodeDeploy 部署生命週期事件都會寫入一個檔案，如下所示：
        + （僅限 Linux 範例） `scripts` 資料夾 – 資料夾包含下列 Shell 指令碼來安裝相依性，以及啟動和停止自動化部署的範例應用程式：`install_dependencies`、 `start_server`和 `stop_server`。
        + （僅限 Windows 範例） `before-install.bat` – 這是`BeforeInstall`部署生命週期事件的批次指令碼，將執行此指令碼來移除先前部署此範例期間寫入的舊檔案，並在執行個體上建立位置以寫入新檔案。

   1. 下載已壓縮的檔案。不要將檔案解壓縮。

1. 在 Amazon S3 主控台中，針對您的儲存貯體上傳 檔案：

   1. 選擇**上傳**。

   1. 拖放檔案或選擇 **Add files (新增檔案)**，並瀏覽到該檔案。

   1. 選擇**上傳**。

## 步驟 2：建立 Amazon EC2 Windows 執行個體並安裝 CodeDeploy 代理程式
<a name="S3-create-instances"></a>

**注意**  
本教學課程提供建立 Amazon EC2 Windows 執行個體的範例步驟。如需建立 Amazon EC2 Linux 執行個體的範例步驟，請參閱 [步驟 3：建立 Amazon EC2 Linux 執行個體並安裝 CodeDeploy 代理程式](tutorials-simple-codecommit.md#codecommit-create-deployment)。當系統提示輸入要建立的執行個體數目時，請指定 **2** 個執行個體。

在此步驟中，您會建立將部署範例應用程式的 Windows Server Amazon EC2 執行個體。在此程序中，您會使用允許在執行個體上安裝和管理 CodeDeploy 代理程式的政策來建立執行個體角色。CodeDeploy 代理程式是一種軟體套件，可讓執行個體用於 CodeDeploy 部署。您也可以連接政策，允許執行個體擷取 CodeDeploy 代理程式用來部署應用程式的檔案，並允許 SSM 管理執行個體。

**建立執行個體角色**

1. 開啟 IAM 主控台，網址為 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))。

1. 從主控台儀表板，選擇 **Roles (角色)**。

1. 選擇建**立角色**。

1. 在**選取信任實體類型**下，選取 **AWS 服務**。在 **Choose a use case (選擇使用案例)** 下，選取 **EC2**，然後選擇 **Next: Permissions (下一步：許可)**。

1. 搜尋並選取名為 的政策**`AmazonEC2RoleforAWSCodeDeploy`**。

1. 搜尋並選取名為 的政策**`AmazonSSMManagedInstanceCore`**。選擇下**一步：標籤**。

1. 選擇下**一步：檢閱**。輸入角色的名稱 (例如，**EC2InstanceRole**)。
**注意**  
記下您的角色名稱，以用於下一個步驟。您會在建立執行個體時選擇此角色。

   選擇建**立角色**。

**啟動執行個體**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在側邊導覽中，選擇**執行個體**，然後從頁面頂端選取**啟動執行個體**。

1. 在**名稱和標籤**下，在**名稱**中輸入 **MyCodePipelineDemo**。這會將標籤**索引鍵** **Name**和標籤**值** 指派給執行個體**MyCodePipelineDemo**。稍後，您會建立 CodeDeploy 應用程式，將範例應用程式部署到執行個體。CodeDeploy 會根據標籤選取要部署的執行個體。

1. 在**應用程式和作業系統映像 (Amazon Machine Image)** 下，選擇 **Windows** 選項。（此 AMI 描述為 **Microsoft Windows Server 2019 Base**，並標記為「免費方案合格」，可在 **Quick Start** 下找到。)

1. 在**執行個體類型**下，選擇符合免費方案的`t2.micro`類型做為執行個體的硬體組態。

1. 在**金鑰對 （登入）** 下，選擇金鑰對或建立一個金鑰對。

   您也可以選擇**不使用金鑰對繼續**。
**注意**  
基於本教學的目的，您可以在不使用金鑰對的情況下繼續進行。若要使用 SSH 連接到執行個體，請建立或使用金鑰對。

1. 在**網路設定**下，執行下列動作。

   在**自動指派公有 IP** 中，請確定狀態為**啟用**。
   + 在 **Assign a security group (指派安全群組)** 旁，選擇 **Create a new security group (建立新的安全群組)**。
   + 在 **SSH** 的資料列的**來源類型**下，選擇**我的 IP**。
   + 選擇**新增安全群組**，選擇 **HTTP**，然後在**來源類型**下，選擇**我的 IP**。

1. 展開 **Advanced Details** (進階詳細資訊)。在 **IAM 執行個體描述檔**中，選擇您在先前程序中建立的 IAM 角色 （例如 **EC2InstanceRole**)。

1. 在**摘要**下，於**執行個體數量**下，輸入 `2`.。

1. 選擇**啟動執行個體**。

1. 選擇 **View all instances** (檢視所有執行個體)，以關閉確認頁面並返回主控台。

1. 您可以在 **Instances (執行個體)** 頁面上檢視啟動狀態。當您啟動執行個體時，其初始狀態是 `pending`。在執行個體啟動後，其狀態會變更為 `running`，並得到公有的 DNS 名稱。(如果 **Public DNS (公有 DNS)** 欄未顯示，請選擇 **Show/Hide (顯示/隱藏)** 圖示，然後選擇 **Public DNS (公有 DNS)**。)

1. 執行個體可能需要幾分鐘的時間才能準備就緒讓您連線。請確認您的執行個體已通過狀態檢查。您可以在 **Status Checks (狀態檢查)** 欄位查看此資訊。

## 步驟 3：在 CodeDeploy 中建立應用程式
<a name="S3-create-deployment"></a>

在 CodeDeploy 中，*應用程式*是您要部署之程式碼的名稱形式的識別符。CodeDeploy 使用此名稱，以確保在部署期間參考正確的修訂、部署組態和部署群組組合。當您稍後在本教學課程中建立管道時，請選取您在此步驟中建立的 CodeDeploy 應用程式名稱。

您先建立服務角色供 CodeDeploy 使用。如果您已建立服務角色，則不需要建立另一個角色。

**建立 CodeDeploy 服務角色**

1. 開啟 IAM 主控台，網址為 https：//[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))。

1. 從主控台儀表板，選擇 **Roles (角色)**。

1. 選擇建**立角色**。

1. 在**選取信任的實體**下，選擇 **AWS 服務**。在**使用案例中**，選擇 **CodeDeploy**。從列出的選項中選擇 **CodeDeploy**。選擇**下一步**。`AWSCodeDeployRole` 受管政策已連接至角色。

1. 選擇**下一步**。

1. 輸入角色的名稱 (例如 **CodeDeployRole**)，然後選擇 **Create role (建立角色)**。

**在 CodeDeploy 中建立應用程式**

1. 在 https：//[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) 開啟 CodeDeploy 主控台。

1. 如果**應用程式**頁面未顯示，請在 AWS CodeDeploy 功能表中選擇**應用程式**。

1. 選擇**建立應用程式**。

1. 在 **Application name (應用程式名稱)** 中，輸入 `MyDemoApplication`。

1. 在 **Compute Platform (運算平台)** 中，選擇 **EC2/On-premises (EC2/ 現場部署)**。

1. 選擇**建立應用程式**。

**在 CodeDeploy 中建立部署群組**

1. 在顯示您應用程式的頁面上，選擇 **Create deployment group (建立部署群組)**。

1. 在 **Deployment group name (部署群組名稱)** 中，輸入 **MyDemoDeploymentGroup**。

1. 在**服務角色**中，選擇您先前建立的服務角色。您必須至少使用建立 AWS CodeDeploy 的服務角色中所述[的信任和許可來信任CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/getting-started-create-service-role.html)。若要取得服務角色 ARN，請參閱[取得服務角色 ARN (主控台)](https://docs.aws.amazon.com/codedeploy/latest/userguide/how-to-create-service-role.html#getting-started-get-service-role-console)。

1. 在 **Deployment type (部署類型)** 下，選擇 **In-place (就地進行)**。

1. 在 **Environment configuration (環境組態)** 下，選擇 **Amazon EC2 Instances (Amazon EC2 執行個體)**。在**金鑰**欄位中選擇**名稱**，然後在**值**欄位中，輸入 **MyCodePipelineDemo**。
**重要**  
在您建立 EC2​ 執行個體時，您必須在此為 **Name (名稱)** 金鑰選擇為執行個體指派的相同數值。如果您使用 **MyCodePipelineDemo** 以外的程式碼來標記執行個體，請務必在此使用該程式碼。

1. 在具有 ** AWS Systems Manager 的客服人員組態**下，選擇**現在並排程更新**。這會在執行個體上安裝 代理程式。Windows 執行個體已使用 SSM 代理程式設定，現在將使用 CodeDeploy 代理程式更新。

1. 在**部署設定**下，選擇 `CodeDeployDefault.OneAtaTime`。

1. 在**Load Balancer**下，確定未選取**啟用負載平衡**方塊。您不需要為此範例設定負載平衡器或選擇目標群組。取消選取核取方塊後，不會顯示負載平衡器選項。

1. 在 **Advanced (進階)** 區段中，保留預設值。

1. 選擇 **Create deployment group (建立部署群組)**。

## 步驟 4：在 CodePipeline 中建立您的第一個管道
<a name="s3-create-pipeline"></a>

在教學課程的此部分中，您會建立管道。該範本會自動透過管道執行。

**建立 CodePipeline 自動發行程序**

1. 登入 AWS 管理主控台 並開啟 CodePipeline 主控台，網址為 https：//[http://console.aws.amazon.com/codesuite/codepipeline/home](https://console.aws.amazon.com/codesuite/codepipeline/home)。

1. 在 **Welcome (歡迎)** 頁面、**Getting started (入門)** 頁面、或者 **Pipelines (管道)** 頁面上，選擇 **Create pipeline (建立管道)**。

1. 在**步驟 1：選擇建立選項**頁面的**建立選項**下，選擇**建置自訂管道**選項。選擇**下一步**。

1. 在**步驟 2：選擇管道設定**中，在**管道名稱**中輸入 **MyFirstPipeline**。
**注意**  
如果您選擇了另一個管道名稱，請務必在此整個教學中皆使用該名稱 (而非 **MyFirstPipeline**)。在您建立管道後，便無法更改其名稱。管道名稱會受到一些限制。如需詳細資訊，請參閱[AWS CodePipeline 中的配額](limits.md)。

1. CodePipeline 提供 V1 和 V2 類型的管道，其特性和價格有所不同。V2 類型是您可以在 主控台中選擇的唯一類型。如需詳細資訊，請參閱[管道類型](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types-planning.html?icmpid=docs_acp_help_panel)。如需 CodePipeline 定價的資訊，請參閱 [定價](https://aws.amazon.com/codepipeline/pricing/)。

1. 在 **Service role (服務角色)** 中，執行下列其中一項作業：
   + 選擇**新服務角色**，以允許 CodePipeline 在 IAM 中建立新的服務角色。
   + 選擇 **Existing service role (現有服務角色)** 以使用已在 IAM 中建立的服務角色。在 **Role name (角色名稱)** 中，從清單選擇您的服務角色。

1. 將 **Advanced settings (進階設定)** 下的設定保留為預設值，然後選擇 **Next (下一步)**。

1. 在**步驟 3：新增來源階段**的**來源提供者**中，選擇 **Amazon S3**。在 **Bucket (儲存貯體)** 中，輸入您在 [步驟 1：為您的應用程式建立 S3 來源儲存貯體](#s3-create-s3-bucket) 中建立的 S3 儲存貯體名稱。在 **S3 物件金鑰**中，輸入有或沒有檔案路徑的物件金鑰，記得也要加入副檔名。例如，對於 `SampleApp_Windows.zip`，輸入範例檔案名稱，如下列範例所示：

   ```
   SampleApp_Windows.zip
   ```

   選擇 **下一個步驟**。

   在 **Change detection options (變更刪除選項)** 下，保持預設設定。這可讓 CodePipeline 使用 Amazon CloudWatch Events 來偵測來源儲存貯體中的變更。

    選擇**下一步**。

1. 在**步驟 4：新增建置階段**中，選擇**略過建置階段**，然後再次選擇**略過**以接受警告訊息。選擇**下一步**。

1. 在**步驟 5：新增測試階段**中，選擇**略過測試階段**，然後再次選擇**略過**以接受警告訊息。

   選擇**下一步**。

1. 在**步驟 6：新增部署階段**的**部署提供者**中，選擇 **CodeDeploy。 ****區域**欄位預設為與您的管道 AWS 區域 相同的 。在 **Application name** (應用程式名稱) 中，輸入 `MyDemoApplication`，或選擇 **Refresh** (重新整理) 按鈕，然後從清單中選擇應用程式名稱。在 **Deployment group (部署群組)** 中，輸入 **MyDemoDeploymentGroup**，或從清單中選擇，然後選擇 **Next (下一步)**。
**注意**  
名稱「Deploy」(部署)，是預設指定給在 **Step 4: Add deploy stage (步驟 4：新增部署階段)** 步驟中建立的階段名稱，如同「Source」(來源) 是管道的第一階段所指定的名稱。

1. 在**步驟 7：檢閱**中，檢閱資訊，然後選擇**建立管道**。

1. 管道開始執行。當 CodePipeline 範例將網頁部署到 CodeDeploy 部署中的每個 Amazon EC2 執行個體時，您可以檢視進度、成功和失敗訊息。

恭喜您！您剛在 CodePipeline 中建立簡單的管道。管道有兩個階段：
+ 名為 **Source (來源)** 的來源階段，可偵測存放於 S3 儲存貯體中的版本控制範例應用程式變更，並將那些變更提取至管道中。
+ 使用 CodeDeploy 將這些變更部署到 EC2 執行個體的**部署**階段。

現在，請驗證結果。

**驗證您的管道是否成功執行**

1. 檢視管道初始進度。每一個階段狀態會從 **No executions yet (尚未執行)**​ 變更為 **In Progress (進行中)**，然後顯示 **Succeeded (成功)**​ 或 **Failed (失敗)**。該管道應會在幾分鐘內完成初次執行。

1. 在該動作狀態顯示 **Succeeded (成功)**​ 後，在 **Deploy (部署)**​ 階段，選擇 **Details (詳細資訊)**。這會開啟 CodeDeploy 主控台。

1. 在 **Deployment group (部署群組)** 索引標籤的 **Deployment lifecycle events (部署生命週期事件)** 下，選擇執行個體 ID。這會開啟 EC2 主控台。

1. 在 **Description (敘述)** 標籤的 **Public DNS (公有 DNS)** 中複製地址，然後貼上至您 Web 瀏覽器的地址列中。檢視索引頁面以了解您上傳至 S3 儲存貯體的範例應用程式。

   網頁會顯示您上傳到 S3 儲存貯體的範例應用程式。

如需關於階段、動作以及管道如何運作的更多資訊，請參閱 [CodePipeline 概念](concepts.md)。

## (選用) 步驟 5：新增另一個階段至您的管道
<a name="s3-add-stage"></a>

現在，在管道中新增另一個階段，以使用 CodeDeploy 從預備伺服器部署到生產伺服器。首先，在 CodeDeploy 的 CodePipelineDemoApplication 中建立另一個部署群組。 CodeDeploy 然後您將新增一個階段，該階段包括了使用此部署群組的動作。若要新增另一個階段，您可以使用 CodePipeline 主控台或 AWS CLI 來擷取和手動編輯 JSON 檔案中管道的結構，然後執行 **update-pipeline**命令以使用您的變更更新管道。

**Topics**
+ [在 CodeDeploy 中建立第二個部署群組](#s3-add-stage-part-1)
+ [在您的管道中新增部署群組以做為另一個階段](#s3-add-stage-part-2)

### 在 CodeDeploy 中建立第二個部署群組
<a name="s3-add-stage-part-1"></a>

**注意**  
在教學課程的這個部分中，您會建立第二個部署群組，但會部署到與之前相同的 Amazon EC2 執行個體。這僅用於示範用途。它旨在無法向您展示 CodePipeline 中顯示錯誤的方式。

**在 CodeDeploy 中建立第二個部署群組**

1. 在 https：//[https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy) 開啟 CodeDeploy 主控台。

1. 選擇 **Applications** (應用程式)，然後在應用程式清單中選擇 `MyDemoApplication`。

1. 選擇 **Deployment groups (部署群組)** 索引標籤，然後選擇 **Create deployment group (建立部署群組)**。

1. 在 **Create deployment group (建立部署群組)** 頁面上的 **Deployment group name (部署群組名稱)** 中，輸入第二個部署群組的名稱 (例如 **CodePipelineProductionFleet**)。

1. 在**服務角色**中，選擇您用於初始部署的相同 CodeDeploy 服務角色 （而非 CodePipeline 服務角色）。

1. 在 **Deployment type (部署類型)** 下，選擇 **In-place (就地進行)**。

1. 在 **Environment configuration (環境組態)** 下，選擇 **Amazon EC2 Instances (Amazon EC2 執行個體)**。在**金鑰**方塊中選擇**名稱**，然後在**值**方塊中，`MyCodePipelineDemo`從清單中選擇。將 **Deployment settings (部署設定)** 保留為預設組態。

1. 在 **Deployment configuration (部署組態)** 下，選擇 `CodeDeployDefault.OneAtaTime`。

1. 在 **Load Balancer (負載平衡器)** 下，清除 **Enable load balancing (啟用負載平衡)**。

1.  選擇 **Create deployment group (建立部署群組)**。

### 在您的管道中新增部署群組以做為另一個階段
<a name="s3-add-stage-part-2"></a>

現在您已擁有另一個部署群組，您可新增使用此部署群組的階段，以部署到您在稍早使用的相同 EC2 執行個體。您可以使用 CodePipeline 主控台或 AWS CLI 新增此階段。

**Topics**
+ [建立第三個階段 (主控台)](#s3-add-stage-part-2-console)
+ [建立第三個階段 (CLI)](#s3-add-stage-part-2-cli)

#### 建立第三個階段 (主控台)
<a name="s3-add-stage-part-2-console"></a>

您可以使用 CodePipeline 主控台來新增使用新部署群組的新階段。由於此部署群組是部署在您已使用中的 EC2 執行個體，故在此階段的部署動作失敗。

1. 登入 AWS 管理主控台 並開啟 CodePipeline 主控台，網址為 https：//[http://console.aws.amazon.com/codesuite/codepipeline/home](https://console.aws.amazon.com/codesuite/codepipeline/home)。

1. 在**名稱**中，選擇您建立的管道名稱 MyFirstPipeline。

1. 在管道詳細資訊頁面上，選擇 **Edit (編輯)**。

1. 在 **Edit (編輯)** 頁面上，選擇 **\$1 Add stage (\$1 新增階段)** 以在 Deploy (部署) 階段後立即新增一個階段。  
![\[顯示編輯畫面上 + 新增階段按鈕的影像\]](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/edit-pipeline-console-pol.png)

1. 在 **Add stage (新增階段)** 的 **Stage name (階段名稱)** 中，輸入 **Production**。選擇 **Add stage (新增階段)**。

1. 在新階段中，選擇 **\$1 Add action group (\$1 新增動作群組)**。

1. 在 **Edit action (編輯動作)** 的 **Action name (動作名稱)** 中，輸入 **Deploy-Second-Deployment**。在**動作提供者**的**部署**下，選擇 **CodeDeploy**。

1. 在 CodeDeploy 區段的應用程式**名稱**中，`MyDemoApplication`從下拉式清單中選擇 ，就像您在建立管道時所做的一樣。在 **Deployment group (部署群組)** 中，選擇您剛才建立的部署群組 **CodePipelineProductionFleet**。在 **Input artifacts** (輸入成品) 中，從來源動作中選擇輸入成品。選擇**儲存**。

1. 在 **Edit (編輯)** 頁面中，選擇 **Save (儲存)**。在 **Save pipeline changes (儲存管道變更)** 中，選擇 **Save (儲存)**。

1. 雖然新階段已新增至您的管道，但由於沒有發生觸發另一個管道執行的變更，所以會顯示 **No executions yet (尚未執行)**。您必須手動重新執行最新的修訂版本，來查看已編輯管道的執行情形。在管道詳細資訊頁面上，選擇**釋出變更**，然後在出現提示時選擇**釋出**。這將會在管道的來源動作所指定的各個來源位置中執行最新的可用版本。

   或者，若要使用 從本機 Linux、macOS 或 Unix 機器的終端機或本機 Windows 機器的命令提示字元 AWS CLI 重新執行管道，請執行 **start-pipeline-execution**命令，指定管道的名稱。這會再次透過管道，在您的來源儲存貯體中執行應用程式。

   ```
   aws codepipeline start-pipeline-execution --name MyFirstPipeline
   ```

   此命令會傳回 `pipelineExecutionId`​ 物件。

1. 返回 CodePipeline 主控台，然後在管道清單中，選擇 **MyFirstPipeline** 開啟檢視頁面。

   該管道顯示了三個階段，以及透過這三個階段執行的成品狀態。管道可能需要五分鐘以執行所有階段。和之前一樣，您會看到該部署在前兩個階段已成功，但 **Production (生產)** 階段會顯示 **Deploy-Second-Deployment (部署-第二-部署)** 動作失敗。

1. 在 **Deploy-Second-Deployment (部署-第二-部署)** 動作中，選擇 **Details (詳細資訊)**。系統會將您重新導向至 CodeDeploy 部署的 頁面。在此案例中，該失敗是部署至所有 EC2​ 執行個體之第一個執行個體群組的結果，造成第二個部署群組沒有任何執行個體。
**注意**  
此失敗是刻意設計的，以說明在管道階段中發生失敗時的情況。

#### 建立第三個階段 (CLI)
<a name="s3-add-stage-part-2-cli"></a>

雖然使用 AWS CLI 將階段新增至管道比使用 主控台更為複雜，但它可讓您更清楚地了解管道的結構。

**為管道建立第三階段**

1. 在本機 Linux、macOS 或 Unix 機器上開啟終端機工作階段，或在本機 Windows 機器上開啟命令提示，然後執行 **get-pipeline**命令來顯示您剛建立的管道結構。對於 **MyFirstPipeline**，您可能輸入下列命令：

   ```
   aws codepipeline get-pipeline --name "MyFirstPipeline"
   ```

   此命令會傳回 MyFirstPipeline 的結構。該輸出的第一部分應如下所示：

   ```
   {
       "pipeline": {
           "roleArn": "arn:aws:iam::80398EXAMPLE:role/AWS-CodePipeline-Service",
           "stages": [
       ...
   ```

   該輸出的最後一個部分包含了管道中繼資料，應如下所示：

   ```
       ...
           ],
           "artifactStore": {
               "type": "S3"
               "location": "amzn-s3-demo-bucket",
           },
           "name": "MyFirstPipeline",
           "version": 4
       },
       "metadata": {
           "pipelineArn": "arn:aws:codepipeline:us-east-2:80398EXAMPLE:MyFirstPipeline",
           "updated": 1501626591.112,
           "created": 1501626591.112
       }
   }
   ```

1. 複製並貼上此結構至純文字編輯器中，然後將檔案儲存為 **pipeline.json**。為方便起見，請將此檔案儲存在您執行 **aws codepipeline**​ 命令的相同目錄中。
**注意**  
您可透過 **get-pipeline** 命令直接將 JSON 輸送到檔案，如下所示：  

   ```
   aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json
   ```

1. 複製 **Deploy (部署)** 階段區段，並貼在前兩個階段的後面。由於它是一個部署階段 (如同 **Deploy (部署)**​ 階段)，故您可使用它做為第三階段的範本。

1. 變更階段的名稱和部署群組的詳細資訊。

   下列範例顯示您在**部署**階段之後新增至 pipeline.json 檔案的 JSON。使用新數值編輯強調元素。請記得包含逗號，以分隔 **Deploy (部署)** 和 **Production (生產)** 階段定義。

   ```
   ,
   {
       "name": "Production",
        "actions": [
           {
            "inputArtifacts": [
                {
                 "name": "MyApp"
                }
              ],
             "name": "Deploy-Second-Deployment",
             "actionTypeId": {
                 "category": "Deploy",
                 "owner": "AWS",
                 "version": "1",
                 "provider": "CodeDeploy"
                 },
            "outputArtifacts": [],
            "configuration": {
                 "ApplicationName": "CodePipelineDemoApplication",
                 "DeploymentGroupName": "CodePipelineProductionFleet"
                  },
            "runOrder": 1
           }
       ]
   }
   ```

1. 如果您使用的是使用 **get-pipeline** 命令擷取的管道結構，則必須從 JSON 檔案中移除 `metadata` 行。否則，**update-pipeline** 命令無法使用它。移除 `"metadata": { }` 行，以及 `"created"`、`"pipelineARN"` 和 `"updated"` 欄位。

   例如，從結構中移除下列幾行：

   ```
   "metadata": {  
     "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name",
     "created": "date",
     "updated": "date"
     }
   ```

   儲存檔案。

1. 執行 **update-pipeline**​ 命令，指定管道 JSON 檔案，如以下所示：

   ```
   aws codepipeline update-pipeline --cli-input-json file://pipeline.json
   ```

   此命令會傳回已更新管道的整個結構。
**重要**  
請確認在檔案名稱之前包含 `file://`。這是此命令必要項目。

1.  執行 **start-pipeline-execution**​ 命令，指定管道名稱。這會再次透過管道，在您的來源儲存貯體中執行應用程式。

   ```
   aws codepipeline start-pipeline-execution --name MyFirstPipeline
   ```

   此命令會傳回 `pipelineExecutionId`​ 物件。

1. 開啟 CodePipeline 主控台，然後從管道清單中選擇 **MyFirstPipeline**。

   該管道顯示了三個階段，以及透過這三個階段執行的成品狀態。管道可能需要五分鐘以執行所有階段。和之前一樣，雖然該部署在前兩個階段已成功，**Production (生產)**​ 階段仍會顯示 **Deploy-Second-Deployment (部署-第二-部署)**​ 動作失敗。

1. 在 **Deploy-Second-Deployment (部署-第二-部署)** 動作中，選擇 **Details (詳細資訊)** 以查看該失敗的詳細資訊。系統會將您重新導向至 CodeDeploy 部署的詳細資訊頁面。在此案例中，該失敗是部署至所有 EC2​ 執行個體之第一個執行個體群組的結果，造成第二個部署群組沒有任何執行個體。
**注意**  
此失敗是刻意設計的，以說明在管道階段中發生失敗時的情況。

## （選用） 步驟 6：停用和啟用 CodePipeline 中階段之間的轉換
<a name="s3-configure-transitions"></a>

您可在管道中的階段之間啟用或停用轉換。在階段間停用轉換，可讓您手動控制階段與階段之間的轉換。例如，您可能想執行管道的前兩個階段，但不希望在準備好部署至生產前轉換至第三個階段，或您正在針對該階段的問題或失敗進行故障排除。

**停用和啟用 CodePipeline 管道中階段之間的轉換**

1. 開啟 CodePipeline 主控台，然後從管道清單中選擇 **MyFirstPipeline**。

1. 在管道的詳細資訊頁面上，選擇在第二階段 (**部署**) 和您在上一節 (**生產**) 中新增的第三階段之間**停用轉換**按鈕。

1. 在 **Disable transition (停用轉換)** 中，輸入在階段間停用轉換的原因，然後選擇 **Disable (停用)**。

   階段之間的箭號會顯示圖示與顏色變更，並會顯示 **Enable transition (啟用轉換)** 按鈕。  
![\[本圖顯示將轉換停用的原因顯示為「在故障疑難排解時停用轉換」\]](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/codepipeline-disabled-transition-pol.png)

1. 再次將您的範例上傳至 S3 儲存貯體。由於該儲存貯體是版本控制的，此變更會啟動該管道。

1. 返回您管道的詳細資訊頁面並查看階段狀態。管道檢視將改變，以顯示前兩個階段的進度與成功狀態，但第三個階段上不會發生變更。此程序可能需要幾分鐘的時間。

1. 選擇兩階段之間的 **Enable transition (啟用轉換)** 按鈕以啟用轉換。在 **Enable transition (啟用轉換)** 對話方塊中，選擇 **Enable (啟用)**。該階段會在幾分鐘內開始執行，並嘗試處理已透過管道前兩個階段執行的成品。
**注意**  
如果您希望第三個階段成功，請在啟用轉換之前編輯 CodePipelineProductionFleet 部署群組，並指定應用程式部署所在的不同 EC2 執行個體集。有關如何執行此操作的詳細資訊，請參閱[變更部署群組設定](https://docs.aws.amazon.com/codedeploy/latest/userguide/how-to-change-deployment-group-settings.html)。如果您建立更多 EC2 執行個體，您可能需要支付額外費用。

## 步驟 7：清除資源
<a name="s3-clean-up"></a>

您可以將本教學課程中建立的一些資源應用在 [教學：建立四階段管道](tutorials-four-stage-pipeline.md) 中。例如，您可以重複使用 CodeDeploy 應用程式和部署。您可以使用 CodeBuild 等提供者設定建置動作，這是雲端中全受管的建置服務。您也可以透過組件伺服器或系統來設定使用供應商的組件動作，例如 Jenkins。

不過，在您完成這些教學課程之後，應該刪除管道以及其所使用的資源，才不會因為持續使用那些資源而付費。首先，刪除管道，然後刪除 CodeDeploy 應用程式及其相關聯的 Amazon EC2 執行個體，最後刪除 S3 儲存貯體。

**清除此教學中使用的資源**

1. 若要清除 CodePipeline 資源，請遵循 [中刪除管道 AWS CodePipeline](pipelines-delete.md)中的指示。

1. 若要清除 CodeDeploy 資源，請依照 中的[說明清除資源 （主控台）](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorials-wordpress-clean-up.html#tutorials-wordpress-clean-up-console)。

1. 若要刪除 S3 儲存貯體，請按照[刪除或清空儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-or-empty-bucket.html)中的說明進行。如果您不想建立更多管道，請刪除用以存放管道成品所建立的 S3 儲存貯體。如需此儲存貯體的詳細資訊，請參閱 [CodePipeline 概念](concepts.md)。