

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

# 建立管道、階段和動作
<a name="pipelines-create"></a>

您可以使用 AWS CodePipeline 主控台或 AWS CLI 來建立管道。管道必須擁有至少兩個階段。管道的第一階段必須是來源階段。管道必須至少有一個其他階段是建置或部署階段。

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

您可以將與管道 AWS 區域 不同的動作新增至管道。跨區域動作是指 AWS 服務 是 動作的提供者，而動作類型或提供者類型位於與您的管道不同的 AWS 區域中。如需詳細資訊，請參閱[在 CodePipeline 中新增跨區域動作](actions-create-cross-region.md)。

您也可以建立管道，使用 Amazon ECS 做為部署提供者來建置和部署容器型應用程式。建立管道以使用 Amazon ECS 部署容器型應用程式之前，您必須建立影像定義檔案，如中所述[映像定義檔案參考](file-reference.md)。

推送原始程式碼變更時，CodePipeline 會使用變更偵測方法來啟動您的管道。這些偵測方法視原始碼類型而定：
+ CodePipeline 使用 Amazon CloudWatch Events 來偵測 CodeCommit 來源儲存庫和分支或 S3 來源儲存貯體中的變更。

**注意**  
當您使用主控台建立或編輯管道時，將為您建立變更偵測資源。如果您使用 AWS CLI 建立管道，則必須自行建立其他資源。如需詳細資訊，請參閱[CodeCommit 來源動作和 EventBridge](triggering.md)。

**Topics**
+ [建立自訂管道 （主控台）](#pipelines-create-console)
+ [建立管道 (CLI)](#pipelines-create-cli)
+ [從靜態範本建立管道](#pipelines-create-templates)

## 建立自訂管道 （主控台）
<a name="pipelines-create-console"></a>

若要在 主控台中建立自訂管道，您必須提供來源檔案位置，以及您將用於動作之提供者的相關資訊。

當您使用主控台來建立管道時，必須加入一個原始碼階段以及下方其中之一或兩者：
+ 建置階段。
+ 部署階段。

當您使用管道精靈時，CodePipeline 會建立階段的名稱 （來源、建置、預備）。這些名稱無法變更。您可以在之後加入的階段使用更明確的名稱 (例如 BuildToGamma 或 DeployToProd)。



**步驟 1：建立並命名管道**

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

1. 在 **Welcome** (歡迎使用) 頁面上，選擇 **Create pipeline** (建立管道)。

   如果這是您第一次使用 CodePipeline，請選擇**開始使用**。

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

1. 在**步驟 2：選擇管道設定**頁面上，在**管道名稱**中，輸入管道的名稱。

   在單一 AWS 帳戶中，您在 AWS 區域中建立的每個管道都必須具有唯一的名稱。名稱可以重複用於不同區域中的管道。
**注意**  
在您建立管道後，便無法更改其名稱。如需其他限制的相關資訊，請參閱 [AWS CodePipeline 中的配額](limits.md)。

1. 在**管道類型**中，選擇下列其中一個選項。管道類型在特性和價格方面有所不同。如需詳細資訊，請參閱[管道類型](pipeline-types.md)。
   + **V1** 類型管道具有 JSON 結構，其中包含標準管道、階段和動作層級參數。
   + **V2** 類型管道具有與 V1 類型相同的結構，以及其他參數支援，例如 Git 標籤和管道層級變數的觸發。

1. 在 **Service role (服務角色)** 中，執行下列其中一項作業：
   + 選擇**新服務角色**，以允許 CodePipeline 在 IAM 中建立新的服務角色。
   + 選擇 **Existing service role (現有服務角色)** 以使用已在 IAM 中建立的服務角色。在 **Role ARN (角色 ARN)** 中，從清單選擇您的服務角色 ARN。
**注意**  
視您的服務角色建立時間而定，您可能需要更新其許可以支援其他 AWS 服務。如需相關資訊，請參閱[將許可新增至 CodePipeline 服務角色](how-to-custom-role.md#how-to-update-role-new-services)。

   如需服務角色與其政策陳述式的詳細資訊，請參閱 [管理 CodePipeline 服務角色](how-to-custom-role.md)。

1. （選用） 在**變數**下，選擇**新增變數**以在管道層級新增變數。

   如需管道層級變數的詳細資訊，請參閱 [變數參考](reference-variables.md)。如需在管道執行時傳遞之管道層級變數的教學課程，請參閱 [教學課程：使用管道層級變數](tutorials-pipeline-variables.md)。
**注意**  
雖然在管道層級新增變數是選擇性的，但對於在管道層級使用變數指定的管道，在沒有提供值的情況下，管道執行將會失敗。

1. (選用) 展開 **Advanced settings (進階設定)**。

1. 在 **Artifact store (成品存放區)** 中，執行下列其中一項操作：

   1. 針對您為管道 AWS 區域 選取的 管道，選擇**預設位置**以使用預設成品存放區，例如指定為預設的 S3 成品儲存貯體。

   1. 在與您的管道相同的區域中，若您已有成品存放區 (例如 S3 成品儲存貯體)，請選擇 **Custom location (自訂位置)**。在 **Bucket (儲存貯體)** 中，選擇儲存貯體名稱。
**注意**  
這不是原始碼的來源儲存貯體。這是管道的成品存放區。每個管道都需要有個別成品存放區，例如 S3 儲存貯體。當您建立或編輯管道時，您必須在管道區域中擁有一個成品儲存貯體，並在您執行動作的每個 AWS 區域中擁有一個成品儲存貯體。  
如需詳細資訊，請參閱[輸入和輸出成品](welcome-introducing-artifacts.md)及[CodePipeline 管道結構參考](reference-pipeline-structure.md)。

1. 在 **Encryption key (加密金鑰)** 中，執行下列其中一項操作：

   1. 若要使用 CodePipeline 預設 AWS KMS key 來加密管道成品存放區 (S3 儲存貯體） 中的資料，請選擇**預設 AWS 受管金鑰**。

   1. 若要使用客戶受管金鑰來加密管道成品存放區 (S3 儲存貯體） 中的資料，請選擇**客戶受管金鑰**。選擇金鑰 ID、金鑰 ARN 或別名 ARN。

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

**步驟 2：建立原始碼階段**

1. 在**步驟 3：新增來源階段**頁面的**來源提供者**中，選擇存放原始碼的儲存庫類型，指定其所需的選項。其他欄位會根據選取的來源提供者顯示，如下所示。
   + 對於 **Bitbucket Cloud、GitHub （透過 GitHub 應用程式）、GitHub Enterprise Server、GitLab.com, 或 GitLab 自我管理**：

     1. 在**連線**下，選擇現有的連線或建立新的連線。若要建立或管理 GitHub 來源動作的連線，請參閱 [GitHub 連線](connections-github.md)。

     1. 選擇您要用作管道來源位置的儲存庫。

        選擇在觸發類型上新增觸發條件或篩選條件，以啟動管道。如需使用觸發程序的詳細資訊，請參閱 [使用程式碼推送或提取請求事件類型新增觸發](pipelines-filter.md)。如需使用 glob 模式篩選的詳細資訊，請參閱 [使用語法中的 glob 模式](syntax-glob.md)。

     1. 在**輸出成品格式**中，選擇成品的格式。
        + 若要使用預設方法儲存 GitHub 動作的輸出成品，請選擇 **CodePipeline 預設**。動作會從 GitHub 儲存庫存取檔案，並將成品存放在管道成品存放區中的 ZIP 檔案中。
        + 若要存放包含儲存庫 URL 參考的 JSON 檔案，以便下游動作可以直接執行 Git 命令，請選擇 **Full clone (完整複製)**。此選項只能由 CodeBuild 下游動作使用。

          如果您選擇此選項，您將需要更新 CodeBuild 專案服務角色的許可，如 所示[CodePipeline 故障診斷](troubleshooting.md)。如需示範如何使用**完整複製**選項的教學課程，請參閱 [教學課程：搭配 GitHub 管道來源使用完整複製](tutorials-github-gitclone.md)。
   + 對於 **Amazon S3**：

     1. 在 **Amazon S3 location (Amazon S3 位置)** 中，提供 S3 儲存貯體名稱與連結到儲存貯體中物件的路徑，並啟用版本控制。儲存貯體名稱與路徑的格式類似下列內容：

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

     1. 選擇 S3 來源儲存貯體後，CodePipeline 會建立 Amazon CloudWatch Events 規則和要為此管道建立的 AWS CloudTrail 線索。接受 **Change detection options (變更偵測選項)** 下的預設設定：​ 這可讓 CodePipeline 使用 Amazon CloudWatch Events AWS CloudTrail 並偵測新管道的變更。選擇**下一步**。
   + 在 **AWS CodeCommit** 中：
     + 在**儲存庫名稱**中，選擇您要用作管道來源位置的 CodeCommit 儲存庫名稱。在 **Branch name (分支名稱)**，從下拉式清單中選擇您想要使用的分支。
     + 在**輸出成品格式**中，選擇成品的格式。
       + 若要使用預設方法儲存 CodeCommit 動作的輸出成品，請選擇 **CodePipeline 預設**。動作會從 CodeCommit 儲存庫存取檔案，並將成品存放在管道成品存放區中的 ZIP 檔案中。
       + 若要存放包含儲存庫 URL 參考的 JSON 檔案，以便下游動作可以直接執行 Git 命令，請選擇 **Full clone (完整複製)**。此選項只能由 CodeBuild 下游動作使用。

         如果您選擇此選項，則需要將 `codecommit:GitPull` 許可新增至 CodeBuild 服務角色，如 所示[為 CodeCommit 來源動作新增 CodeBuild GitClone 許可](troubleshooting.md#codebuild-role-codecommitclone)。您也需要將`codecommit:GetRepository`許可新增至 CodePipeline 服務角色，如 所示[將許可新增至 CodePipeline 服務角色](how-to-custom-role.md#how-to-update-role-new-services)。如需示範如何使用**完整複製**選項的教學課程，請參閱 [教學課程：搭配 GitHub 管道來源使用完整複製](tutorials-github-gitclone.md)。
     + 選擇 CodeCommit 儲存庫名稱和分支後，**變更偵測選項**中會顯示一則訊息，顯示要為此管道建立的 Amazon CloudWatch Events 規則。接受 **Change detection options (變更偵測選項)** 下的預設設定：​ 這可讓 CodePipeline 使用 Amazon CloudWatch Events 來偵測新管道的變更。
   + 對於 **Amazon ECR**：
     + 在**儲存庫名稱**中，選擇 Amazon ECR 儲存庫的名稱。
     + 在 **Image tag (映像標籤)** 中，指定映像名稱和版本，如果與最新不同的話。
     + 在 **Output artifacts (輸出成品)** 中，選擇輸出成品預設值，例如 MyApp，其中包含您要下一個階段使用的映像名稱和儲存庫 URI 資訊。

       如需使用包含 Amazon ECR 來源階段的 CodeDeploy 藍綠部署建立 Amazon ECS 管道的教學課程，請參閱 [教學課程：使用 Amazon ECR 來源和 ECS-to-CodeDeploy 部署建立管道](tutorials-ecs-ecr-codedeploy.md)。

     當您在管道中包含 Amazon ECR 來源階段時，來源動作會在您遞交變更時產生 `imageDetail.json` 檔案做為輸出成品。如需 `imageDetail.json` 詳細資訊，請參閱 [Amazon ECS 藍/綠部署動作的 imageDetail.json 檔案](file-reference.md#file-reference-ecs-bluegreen)。
**注意**  
物件和檔案類型必須與您計劃使用的部署系統相容 （例如 Elastic Beanstalk 或 CodeDeploy)。支援的檔案類型必須包含 .zip、.tar 以及 .tgz 檔案。如需 Elastic Beanstalk 支援容器類型的詳細資訊，請參閱[自訂和設定 Elastic Beanstalk 環境](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers.html)和[支援的平台](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts.platforms.html)。如需使用 CodeDeploy 部署修訂的詳細資訊，請參閱[上傳您的應用程式修訂](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-steps.html#deployment-steps-uploading-your-app)和[準備修訂](https://docs.aws.amazon.com/codedeploy/latest/userguide/how-to-prepare-revision.html)。

1. 若要設定自動重試的階段，請選擇在**階段失敗時啟用自動重試**。如需自動重試的詳細資訊，請參閱 [設定自動重試失敗的階段](stage-retry.md#stage-retry-auto)。

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

**步驟 4：建立建置階段**

如果您打算建立部署階段，此步驟為選用。

1. 在**步驟 4：新增建置階段**頁面上，執行下列其中一項操作，然後選擇**下一步**：
   + 如果您打算建立測試或部署**階段，請選擇略過建置**階段。
   + 若要為您的建置階段選擇命令動作，請選擇**命令**。
**注意**  
執行 Commands 動作會在 中產生個別費用 AWS CodeBuild。如果您打算在 CodeBuild 動作中插入建置命令，請繼續並選擇其他建置提供者，然後選取 CodeBuild。

     在**命令**中，輸入動作的 shell 命令。如需 命令動作的詳細資訊，請參閱 [命令動作參考](action-reference-Commands.md)。
   + 若要選擇 CodeBuild 等其他建置提供者，請選擇**其他提供者**。從 **Build provider (建置提供者)** 中選擇建置服務的自訂動作提供者，並提供該提供者的組態詳細資訊。如需如何將 Jenkins 新增為建置提供者的範例，請參閱 [教學：建立四階段管道](tutorials-four-stage-pipeline.md)。
   + 從 **Build provider (建置供應商)**，選擇 **AWS CodeBuild**。

     在**區域中**，選擇資源所在的 AWS 區域。**區域**欄位會指定為此動作類型和提供者類型建立 AWS 資源的位置。此欄位只會針對動作提供者為 的動作顯示 AWS 服務。**區域**欄位預設為與管道相同的 AWS 區域。

     在 **Project name (專案名稱)** 中，選擇您的建置專案。如果您已在 CodeBuild 中建立建置專案，請選擇它。或者，您可以在 CodeBuild 中建立建置專案，然後返回此任務。遵循 [ CodeBuild 使用者指南中建立使用 CodeBuild 的管道](https://docs.aws.amazon.com/codebuild/latest/userguide/how-to-create-pipeline.html#pipelines-create-console)中的指示。 *CodeBuild *

     在**建置規格**下，CodeBuild buildspec 檔案是選用的，您可以改為輸入命令。在**插入建置命令**中，輸入 動作的 shell 命令。如需使用建置命令考量事項的詳細資訊，請參閱 [命令動作參考](action-reference-Commands.md)。如果您想要在其他階段執行命令，或如果您有較長的命令清單，請選擇**使用 buildspec 檔案**。

     在**環境變數**中，若要將 CodeBuild 環境變數新增至建置動作，請選擇**新增環境變數**。每個變數都是由三個項目組成：
     + 在 **Name (名稱)** 中輸入環境變數的名稱或索引鍵。
     + 在 **Value (值)** 中輸入環境變數的值。如果您選擇變數類型的**參數**，請確定此值是您已存放在 AWS Systems Manager 參數存放區中的參數名稱。
**注意**  
我們強烈建議不使用環境變數來存放敏感值，尤其是 AWS 登入資料。當您使用 CodeBuild 主控台或 AWS CLI 時，環境變數會以純文字顯示。對於敏感值，建議您改用 **Parameter (參數)** 類型。
     + (選擇性) 在 **Type (類型)** 中輸入環境變數的類型。有效值為 **Plaintext (純文字)** 或 **Parameter (參數)**。預設值為 **Plaintext (純文字)**。

     （選用） 在**建置類型**中，選擇下列其中一項：
     + 若要在單一建置動作執行中執行每個組建，請選擇**單一組建**。
     + 若要在相同的建置動作執行中執行多個建置，請選擇**批次建置**。

     （選用） 如果您選擇執行批次建置，您可以選擇**將所有成品從批次合併為單一位置**，將所有建置成品放入單一輸出成品。

1. 若要設定自動重試的階段，請選擇在**階段失敗時啟用自動重試**。如需自動重試的詳細資訊，請參閱 [設定自動重試失敗的階段](stage-retry.md#stage-retry-auto)。

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

**步驟 5：建立測試階段**

如果您打算建立建置或部署階段，此步驟是選用的。

1. 在**步驟 5：新增測試階段**頁面上，執行下列其中一項操作，然後選擇**下一步**：
   + 如果您打算建立建置或部署**階段，請選擇略過測試**階段。
   + 在**測試提供者**中，選擇測試動作提供者，然後填寫適當的欄位。

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

**步驟 6：建立部署階段**

如果您已建立建置階段，此步驟為選用。

1. 在**步驟 6：新增部署階段**頁面上，執行下列其中一項操作，然後選擇**下一步**：
   + 如果您在先前步驟中建立建置或測試階段，請選擇**略過部署**階段。
**注意**  
如果您已經略過建置或測試階段，則不會顯示此選項。
   + 在 **Deploy provider (部署提供者)** 中，選擇您已為部署提供者建立的自訂動作。

     在**區域中**，僅針對跨區域動作，選擇建立資源 AWS 的區域。**區域**欄位會指定為此動作類型和提供者類型建立資源的位置 AWS 。此欄位只會針對動作提供者為 的動作顯示 AWS 服務。**區域**欄位預設為與管道相同的 AWS 區域。
   + 在 **Deploy provider (部署供應商)** 中，可用於預設供應商的欄位如下所示：
     + **CodeDeploy**

       在**應用程式名稱**中，輸入或選擇現有 CodeDeploy 應用程式的名稱。在 **Deployment group (部署群組)** 中，輸入該應用程式的部署群組名稱。選擇**下一步**。您也可以在 CodeDeploy 主控台中建立應用程式、部署群組或兩者。
     + **AWS Elastic Beanstalk**

        在**應用程式名稱**中，輸入或選擇現有 Elastic Beanstalk 應用程式的名稱。在 **Environment name (環境名稱)** 中，輸入應用程式的環境。選擇**下一步**。您也可以在 Elastic Beanstalk 主控台中建立應用程式、環境或兩者。
     + **AWS OpsWorks Stacks**

       在 **Stack (堆疊)** 中，輸入或選擇您想要使用的堆疊名稱。在 **Layer (分層)** 中，選擇您的目標執行個體隸屬的分層。在 **App (應用程式)** 中，選擇您想要更新與部署的應用程式。如果您需要建立應用程式，請選擇**在 中建立新的 AWS OpsWorks**應用程式。

       如需將應用程式新增至堆疊和 layer 的詳細資訊 AWS OpsWorks，請參閱*AWS OpsWorks 《 使用者指南*》中的[新增應用程式](https://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html)。

       如需如何在 CodePipeline 中使用簡單管道做為您在 AWS OpsWorks layer 上執行之程式碼來源的end-to-end範例，請參閱[搭配使用 CodePipeline AWS OpsWorks Stacks](https://docs.aws.amazon.com/opsworks/latest/userguide/other-services-cp.html)。
     + **AWS CloudFormation**

        執行以下任意一項：
       + 在**動作模式中**，選擇**建立或更新堆疊**，輸入堆疊名稱和範本檔案名稱，然後選擇 AWS CloudFormation 要擔任的角色名稱。或者，輸入組態檔案的名稱，然後選擇 IAM 功能選項。
       + 在**動作模式中**，選擇**建立或取代變更集**，輸入堆疊名稱和變更集名稱，然後選擇 AWS CloudFormation 要擔任的角色名稱。或者，輸入組態檔案的名稱，然後選擇 IAM 功能選項。

       如需有關將 AWS CloudFormation 功能整合到 CodePipeline 中管道的資訊，請參閱*AWS CloudFormation 《 使用者指南*》中的[使用 CodePipeline 持續交付](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/continuous-delivery-codepipeline.html)。
     + **Amazon ECS**

       在**叢集名稱**中，輸入或選擇現有 Amazon ECS 叢集的名稱。在 **Service name (服務名稱)** 中，輸入或選擇在叢集上執行的服務名稱。您也可以建立叢集和服務。在 **Image filename (映像檔案名稱)** 中，輸入說明服務容器與映像之映像定義檔案的名稱。
**注意**  
Amazon ECS 部署動作需要 `imagedefinitions.json` 檔案做為部署動作的輸入。檔案預設名稱為 imagedefinitions.json。如果您選用不同的名稱，必須在建立管道部署階段時提供名稱。如需詳細資訊，請參閱[Amazon ECS 標準部署動作的 imagedefinitions.json 檔案](file-reference.md#pipelines-create-image-definitions)。

       選擇**下一步**。
**注意**  
請確定您的 Amazon ECS 叢集已設定兩個或多個執行個體。Amazon ECS 叢集必須至少包含兩個執行個體，以便將一個執行個體維護為主要執行個體，另一個執行個體用於容納新的部署。

       如需使用管道部署容器型應用程式的教學課程，請參閱[教學課程：使用 CodePipeline 持續部署](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-cd-pipeline.html)。
     + **Amazon ECS (Blue/Green) (Amazon ECS (藍/綠))**

       輸入 CodeDeploy 應用程式和部署群組、Amazon ECS 任務定義和 AppSpec 檔案資訊，然後選擇**下一步**。
**注意**  
**Amazon ECS (Blue/Green)** 動作需要 imageDetail.json 檔案做為部署動作的出入成品。由於 Amazon ECR 來源動作會建立此檔案，因此具有 Amazon ECR 來源動作的管道不需要提供 `imageDetail.json` 檔案。如需詳細資訊，請參閱[Amazon ECS 藍/綠部署動作的 imageDetail.json 檔案](file-reference.md#file-reference-ecs-bluegreen)。

       如需使用 CodeDeploy 為 Amazon ECS 叢集建立藍綠部署管道的教學課程，請參閱 [教學課程：使用 Amazon ECR 來源和 ECS-to-CodeDeploy 部署建立管道](tutorials-ecs-ecr-codedeploy.md)。
     + **AWS Service Catalog**

       如果您想要使用主控台中的欄位來指定您的組態，請選擇 **Enter deployment configuration (輸入部署組態)**，或如果您擁有另一個組態檔案，請選擇 **Configuration file (組態檔案)**。輸入產品和組態資訊，然後選擇 **Next (下一步)**。

       如需使用管道將產品變更部署至 Service Catalog 的教學課程，請參閱 [教學課程：建立部署至 Service Catalog 的管道](tutorials-S3-servicecatalog.md)。
     + **Alexa Skills Kit**

       在 **Alexa Skill ID (Alexa 技能 ID)** 中，輸入您 Alexa 技能的技能 ID。在 **Client ID (用戶端 ID)** 和 **Client secret (用戶端密碼)** 中，輸入使用 Login with Amazon (LWA) 安全性描述檔產生的登入資料。在 **Refresh token (重新整理字符)** 中， 輸入您使用 ASK CLI 命令 (用於擷取重新整理字符) 產生的重新整理字符。選擇**下一步**。

       如需有關使用您的管道部署 Alexa 技能和產生 LWA 登入資料的教學課程，請參閱[教學：建立部署 Amazon Alexa 技能的管道](tutorials-alexa-skills-kit.md)。
     + **Amazon S3**

       在 **Bucket (儲存貯體)** 中，輸入您要使用的 S3 儲存貯體名稱。如果您部署階段的輸入成品是 ZIP 檔案，請選擇 **Extract file before deploy (部署前解壓縮檔案)**。如果選取 **Extract file before deploy (部署前解壓縮檔案)**，您可以選擇 ZIP 檔案將要解壓縮至的 **Deployment path (部署路徑)**。如果未選取此選項，您需要在 **S3 object key (S3 物件金鑰)** 中輸入一個值。
**注意**  
大多數來源和建置階段輸出成品都將被壓縮。除了 Amazon S3 之外，所有管道來源提供者都會先壓縮來源檔案，再將它們做為下一個動作的輸入成品。

       （選用） 在**固定 ACL** 中，輸入要套用至部署至 Amazon S3 之物件[的固定 ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl)。
**注意**  
套用固定的 ACL 時會覆寫任何套用到物件的現有 ACL。

       (選用) 在 **Cache control (快取控制)** 中，為從儲存貯體下載物件的請求指定快取控制參數。如需有效值的清單，請參閱 HTTP 操作的 [http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9) 標頭欄位。若要在 **Cache control (快取控制)** 中輸入多個值，請在各值之間使用逗號。如此範例所示，您可以在每個逗號後面加上空格 (選用)。  
![\[顯示主控台中快取控制欄位的影像，包含下列項目：Publical， max-age=0， no-transform\]](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/cache_control_values.png)

       前面的範例項目會顯示在 CLI 中，如下所示：

       ```
       "CacheControl": "public, max-age=0, no-transform"
       ```

       選擇**下一步**。

       如需使用 Amazon S3 部署動作提供者建立管道的教學課程，請參閱 [教學課程：建立使用 Amazon S3 做為部署提供者的管道](tutorials-s3deploy.md)。

1. 若要設定自動重試的階段，請選擇在**階段失敗時啟用自動重試**。如需自動重試的詳細資訊，請參閱 [設定自動重試失敗的階段](stage-retry.md#stage-retry-auto)。

1. 若要設定自動轉返的階段，請選擇在**階段失敗時設定自動轉返**。如需自動轉返的詳細資訊，請參閱 [設定自動轉返的階段](stage-rollback-auto.md)。

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

**步驟 7：檢閱管道**
+ 在**步驟 7：檢閱**頁面上，檢閱管道組態，然後選擇**建立管道**以建立管道，或選擇**上一個**以返回並編輯您的選擇。請選擇 **Cancel (取消)** 以放棄建立管道並離開精靈。​

您現在已建立管道，並可在主控台中檢視。管道會在您建立後即開始執行。如需詳細資訊，請參閱[在 CodePipeline 中檢視管道和詳細資訊](pipelines-view.md)。如需有關變更管道的詳細資訊，請參閱 [在 CodePipeline 中編輯管道](pipelines-edit.md)。

## 建立管道 (CLI)
<a name="pipelines-create-cli"></a>

若要使用 AWS CLI 建立管道，您可以建立 JSON 檔案來定義管道結構，然後使用 `--cli-input-json` 參數執行 **create-pipeline**命令。

**重要**  
您無法使用 AWS CLI 建立包含合作夥伴動作的管道。您必須改用 CodePipeline 主控台。

如需管道結構的詳細資訊，請參閱 CodePipeline [API 參考](https://docs.aws.amazon.com/cli/latest/reference/codepipeline)中的 [CodePipeline 管道結構參考](reference-pipeline-structure.md)和 [create-pipeline](https://docs.aws.amazon.com/cli/latest/reference/codepipeline/create-pipeline.html)。 CodePipeline 

如要建立 JSON 檔案，請使用範本管道 JSON 檔案並進行編輯，然後在執行 **create-pipeline** 命令時呼叫該檔案。

**先決條件：**

您需要在 中為 CodePipeline 建立之服務角色的 ARN[CodePipeline 入門](getting-started-codepipeline.md)。當您執行 **create-pipeline**命令時，您可以在管道 JSON 檔案中使用 CodePipeline 服務角色 ARN。如需建立服務角色的詳細資訊，請參閱[建立 CodePipeline 服務角色](pipelines-create-service-role.md)。與 主控台不同，在 中執行 **create-pipeline**命令 AWS CLI 沒有為您建立 CodePipeline 服務角色的選項。服務角色必須已存在。

您需要存放管道成品之 S3 儲存貯體的名稱。此儲存貯體必須與管道位於相同的區域。當執行 **create-pipeline** 命令時，您在管道 JSON 檔案中使用儲存貯體名稱。與 主控台不同，在 中執行 **create-pipeline**命令 AWS CLI 並不會建立 S3 儲存貯體來存放成品。該儲存貯體必須已經存在。

**注意**  
您也可使用 **get-pipeline**​ 命令以取得該管道的 JSON 結構複本，然後以純文字編輯器修改該結構。

**Topics**

**建立 JSON 檔案**

1. 在終端機 (Linux、macOS 或 Unix) 或命令提示字元 (Windows)，在本機目錄中建立新的文字檔案。

1. （選用） 您可以在管道層級新增一或多個變數。您可以在 CodePipeline 動作的組態中參考此值。您可以在建立管道時新增變數名稱和值，也可以選擇在主控台中啟動管道時指派值。
**注意**  
雖然在管道層級新增變數是選擇性的，但對於在管道層級使用變數指定的管道，在沒有提供值的情況下，管道執行將會失敗。

   管道層級的變數會在管道的執行時間解析。所有變數都是不可變的，這表示在指派值後無法更新。具有解析值的管道層級變數會顯示在每個執行的歷史記錄中。

   您可以使用管道結構中的變數屬性，在管道層級提供變數。在下列範例中，變數的值`Variable1`為 `Value1`。

   ```
          "variables": [
               {
                   "name": "Timeout",
                   "defaultValue": "1000",
                   "description": "description"
               }
           ]
   ```

   將此結構新增至管道 JSON，或在下列步驟中新增至範例 JSON。如需變數的詳細資訊，包括命名空間資訊，請參閱 [變數參考](reference-variables.md)。

1. 在純文字編輯器中開啟檔案並編輯值，以反映您想建立的結構。您必須至少變更管道名稱。您也應考慮是否變更：
   + 此管道成品要存放的 S3 儲存貯體。
   + 您程式碼的來源位置。
   + 部署供應商。
   + 您想如何部署程式碼？
   + 您的管道標籤。

   以下兩個階段的範本管道結構，反白了您應考慮變更的管道值。您的管道可能包含超過兩個以上的階段：

   ```
   {
       "pipeline": {
           "roleArn": "arn:aws:iam::80398EXAMPLE::role/AWS-CodePipeline-Service",  
           "stages": [
               {
                   "name": "Source",
                   "actions": [
                       {
                           "inputArtifacts": [],
                           "name": "Source",
                           "actionTypeId": {
                               "category": "Source",
                               "owner": "AWS",
                               "version": "1",
                               "provider": "S3"
                           },
                           "outputArtifacts": [
                               {
                                   "name": "MyApp"
                               }
                           ],
                           "configuration": {
                               "S3Bucket": "amzn-s3-demo-source-bucket",
                               "S3ObjectKey": "ExampleCodePipelineSampleBundle.zip",
                               "PollForSourceChanges": "false"
                           },
                           "runOrder": 1                       
                       }
                   ]
               },
               {
                   "name": "Staging",
                   "actions": [
                       {
                           "inputArtifacts": [
                               {
                                   "name": "MyApp"
                               }
                           ],
                           "name": "Deploy-CodeDeploy-Application",
                           "actionTypeId": {
                               "category": "Deploy",
                               "owner": "AWS",
                               "version": "1",
                               "provider": "CodeDeploy"
                           },
                           "outputArtifacts": [],
                           "configuration": {
                               "ApplicationName": "CodePipelineDemoApplication",
                               "DeploymentGroupName": "CodePipelineDemoFleet"
                           },
                           "runOrder": 1
                       }
                   ]
               }
           ],
           "artifactStore": {
               "type": "S3",
               "location": "codepipeline-us-east-2-250656481468"
           },
           "name": "MyFirstPipeline",
           "version": 1,
           "variables": [
               {
                   "name": "Timeout",
                   "defaultValue": "1000",
                   "description": "description"
               }
             ]
           },
           "triggers": [
               {
                   "providerType": "CodeStarSourceConnection",
                   "gitConfiguration": {
                       "sourceActionName": "Source",
                       "push": [
                           {
                               "tags": {
                                   "includes": [
                                       "v1"
                                   ],
                                   "excludes": [
                                       "v2"
                                   ]
                               }
                           }
                       ]
                   }
               }
           ]
       "metadata": {
           "pipelineArn": "arn:aws:codepipeline:us-east-2:80398EXAMPLE:MyFirstPipeline",
           "updated": 1501626591.112,
           "created": 1501626591.112
       },
       "tags": [{
         "key": "Project",
         "value": "ProjectA"
       }]
   }
   ```

   此範例透過將管道的 `Project` 標籤鍵和 `ProjectA` 值，新增標籤到管道。如需在 CodePipeline 中標記資源的詳細資訊，請參閱 [標記 資源](tag-resources.md)。

   請確認您 JSON 檔案中的 `PollForSourceChanges` 參數已如下所示進行設定：​ 

   ```
                   "PollForSourceChanges": "false",
   ```

   CodePipeline 使用 Amazon CloudWatch Events 來偵測 CodeCommit 來源儲存庫和分支或 S3 來源儲存貯體中的變更。下一步驟包含了為您的管道手動建立這些資源的說明。在您使用建議的變更偵測方法時，因為無須使用定期檢查，故可將旗標設為 `false` 以將其停用。

1. 若要在與您的管道不同的區域中建立建置、測試或部署動作，您必須將以下項目新增到管道結構。如需說明，請參閱[在 CodePipeline 中新增跨區域動作](actions-create-cross-region.md)。
   + 將 `Region` 參數新增到動作的管道結構。
   + 使用 `artifactStores` 參數來指定您具有 動作的每個 AWS 區域的成品儲存貯體。

1. 當您對其結構滿意時，使用像是 **pipeline.json**​ 的名稱儲存您的檔案。

**建立管道**

1. 執行 **create-pipeline**​ 命令，並用 `--cli-input-json` 參數以指定您之前建立的 JSON 檔案。

   若要使用名為 pipeline.json 的 JSON 檔案建立名為 *MySecondPipeline* 的管道，其中包含名稱 "*MySecondPipeline*" 作為 JSON `name`中 的值，您的命令會如下所示：

   ```
   aws codepipeline create-pipeline --cli-input-json file://pipeline.json
   ```
**重要**  
請確認在檔案名稱之前包含 `file://`。這是此命令必要項目。

   此命令會傳回您所建立的所有管道結構。

1. 若要檢視管道，請開啟 CodePipeline 主控台，然後從管道清單中選擇它，或使用 **get-pipeline-state**命令。如需詳細資訊，請參閱[在 CodePipeline 中檢視管道和詳細資訊](pipelines-view.md)。

1. 若您使用 CLI 來建立管道，您必須為管道手動建立建議的變更偵測資源：
   + 對於具有 CodeCommit 儲存庫的管道，您必須手動建立 CloudWatch Events 規則，如中所述[為 CodeCommit 來源 (CLI) 建立 EventBridge 規則](pipelines-trigger-source-repo-changes-cli.md)。
   + 對於具有 Amazon S3 來源的管道，您必須手動建立 CloudWatch Events 規則和 AWS CloudTrail 線索，如中所述[連線至使用 EventBridge 和 的 Amazon S3 來源動作 AWS CloudTrail](create-cloudtrail-S3-source.md)。

## 從靜態範本建立管道
<a name="pipelines-create-templates"></a>

您可以在 主控台中建立管道，該管道使用 範本來設定具有您指定之原始程式碼和屬性的管道。您必須提供來源檔案位置，以及您將用於動作之來源提供者的相關資訊。您可以為 Amazon ECR 或 CodeConnections 提供的任何第三方儲存庫指定來源動作，例如 GitHub。

範本會在 中 CloudFormation 為您的管道建立堆疊，其中包含下列資源：
+ 使用 V2 管道類型建立管道。在**管道類型**中，選擇下列其中一個選項。管道類型在特性和價格方面有所不同。如需詳細資訊，請參閱[管道類型](pipeline-types.md)。
+ 服務角色會為您的管道建立，並在範本中參考。
+ 成品存放區是使用預設成品存放區來建立，例如指定為預設值的 S3 成品儲存貯體，用於您為管道選取的 AWS 區域 中的管道。

若要檢視用於靜態範本建立精靈的開放原始碼入門範本集合，請參閱位於 https：//[https://github.com/aws/codepipeline-starter-templates](https://github.com/aws/codepipeline-starter-templates) 的儲存庫。

當您使用靜態範本建立管道時，管道結構會根據使用案例的需求在每個範本中設定。例如，部署至 的 範本 CloudFormation 會做為此程序中的範例。範本會產生名為 **DeployToCloudFormationService** 的管道，結構如下：
+ 建置階段，其中包含具有您在精靈中指定之組態的來源動作。
+ 在 中具有部署動作和相關聯資源堆疊的部署階段 CloudFormation。

當您使用靜態範本建立管道時，CodePipeline 會建立階段的名稱 （來源、建置、預備）。這些名稱無法變更。您可以在之後加入的階段使用更明確的名稱 (例如 BuildToGamma 或 DeployToProd)。

**步驟 1：存取 主控台**

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

1. 在 **Welcome** (歡迎使用) 頁面上，選擇 **Create pipeline** (建立管道)。

   如果這是您第一次使用 CodePipeline，請選擇**開始使用**。

**步驟 2：選擇範本**

選擇範本以建立具有部署階段、自動化或 CI 管道的管道。

1. 在**步驟 1：選擇建立選項**頁面上，執行下列其中一項操作，然後選擇**下一步**：
   + 如果您打算建立**部署**階段，請選擇部署。檢視部署到 ECR 或 CloudFormation 的範本選項。在此範例中，選擇**部署**，然後選擇部署到 CloudFormation。
   + 如果您打算建立 CI 管道，請選擇**持續整合**。檢視 CI 管道的選項，例如建置至 Gradle。
   + 如果您打算建立自動化管道，請選擇**自動化**。檢視自動化的選項，例如排程 Python 組建。

1.   
![\[顯示精靈中具有 CloudFormation 部署 Selecrted 的選擇範本選項的影像\]](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/create-static-choose-template-depl.png)  
![\[顯示精靈中選擇來源頁面的影像\]](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/create-static-choose-template-CI.png)  
![\[顯示精靈中選取自動化之選擇範本選項的影像\]](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/create-static-choose-template-auto.png)

**步驟 3：選擇來源**
+ 在**步驟 3：選擇來源**頁面的**來源提供者**中，選擇儲存原始碼的儲存庫提供者，指定其所需的選項，然後選擇**下一步**。
  + 對於 **Bitbucket Cloud、GitHub （透過 GitHub 應用程式）、GitHub Enterprise Server、GitLab.com, 或 GitLab 自我管理**：

    1. 在**連線**下，選擇現有的連線或建立新的連線。若要建立或管理 GitHub 來源動作的連線，請參閱 [GitHub 連線](connections-github.md)。

    1. 選擇您要用作管道來源位置的儲存庫。

       選擇在觸發類型上新增觸發條件或篩選條件，以啟動管道。如需使用觸發程序的詳細資訊，請參閱 [使用程式碼推送或提取請求事件類型新增觸發](pipelines-filter.md)。如需使用 glob 模式篩選的詳細資訊，請參閱 [使用語法中的 glob 模式](syntax-glob.md)。

    1. 在**輸出成品格式**中，選擇成品的格式。
       + 若要使用預設方法儲存 GitHub 動作的輸出成品，請選擇 **CodePipeline 預設**。動作會從 GitHub 儲存庫存取檔案，並將成品存放在管道成品存放區中的 ZIP 檔案中。
       + 若要存放包含儲存庫 URL 參考的 JSON 檔案，以便下游動作可以直接執行 Git 命令，請選擇 **Full clone (完整複製)**。此選項只能由 CodeBuild 下游動作使用。

         如果您選擇此選項，您將需要更新 CodeBuild 專案服務角色的許可，如 所示[CodePipeline 故障診斷](troubleshooting.md)。如需示範如何使用**完整複製**選項的教學課程，請參閱 [教學課程：搭配 GitHub 管道來源使用完整複製](tutorials-github-gitclone.md)。
  + 對於 **Amazon ECR**：
    + 在**儲存庫名稱**中，選擇 Amazon ECR 儲存庫的名稱。
    + 在 **Image tag (映像標籤)** 中，指定映像名稱和版本，如果與最新不同的話。
    + 在 **Output artifacts (輸出成品)** 中，選擇輸出成品預設值，例如 MyApp，其中包含您要下一個階段使用的映像名稱和儲存庫 URI 資訊。

    當您在管道中包含 Amazon ECR 來源階段時，來源動作會在您遞交變更時產生 `imageDetail.json` 檔案做為輸出成品。如需 `imageDetail.json` 詳細資訊，請參閱 [Amazon ECS 藍/綠部署動作的 imageDetail.json 檔案](file-reference.md#file-reference-ecs-bluegreen)。
**注意**  
物件和檔案類型必須與您計劃使用的部署系統相容 （例如 Elastic Beanstalk 或 CodeDeploy)。支援的檔案類型必須包含 .zip、.tar 以及 .tgz 檔案。如需 Elastic Beanstalk 支援容器類型的詳細資訊，請參閱[自訂和設定 Elastic Beanstalk 環境](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers.html)和[支援的平台](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/concepts.platforms.html)。如需使用 CodeDeploy 部署修訂的詳細資訊，請參閱[上傳您的應用程式修訂](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-steps.html#deployment-steps-uploading-your-app)和[準備修訂](https://docs.aws.amazon.com/codedeploy/latest/userguide/how-to-prepare-revision.html)。

**步驟 4：設定範本**

在此範例中，已選取 CloudFormation 的部署。在此步驟中，為您的範本新增組態。  
![\[顯示精靈中設定範本頁面的影像\]](http://docs.aws.amazon.com/zh_tw/codepipeline/latest/userguide/images/create-static-conf-template.png)

1. 在**步驟 4：設定範本**的**堆疊名稱**中，輸入管道的名稱。

1. 編輯適用於範本之許可的預留位置 IAM 政策。

1. 選擇**從範本建立管道**

1. 訊息顯示正在建立管道資源。

**步驟 5：檢視管道**
+ 現在您已建立管道，您可以在 CodePipeline 主控台中檢視管道，並在 中檢視堆疊 CloudFormation。管道會在您建立後即開始執行。如需詳細資訊，請參閱[在 CodePipeline 中檢視管道和詳細資訊](pipelines-view.md)。如需有關變更管道的詳細資訊，請參閱 [在 CodePipeline 中編輯管道](pipelines-edit.md)。