

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 创建管道、阶段和操作
<a name="pipelines-create"></a>

您可以使用 AWS CodePipeline 控制台或 AWS CLI 创建管道。管道必须包含至少两个阶段。管道的第一个阶段必须是源阶段。管道必须至少有一个其他阶段，可以是构建阶段或部署阶段。

**重要**  
作为创建管道的一部分，客户提供的 S3 工件存储桶将 CodePipeline 用于项目。（这与用于 S3 源操作的存储桶不同。） 如果 S3 工件存储桶与您的管道账户位于不同的账户中，请确保 S3 工件存储桶归其所有 AWS 账户 ，该存储桶是安全且可靠的。

您可以向管道中添加与管道 AWS 区域 不同的操作。跨区域操作是指操作的提供者，而操作类型或提供者类型位于与您的管道不同的 AWS 区域的操作。 AWS 服务 有关更多信息，请参阅 [在中添加跨区域操作 CodePipeline](actions-create-cross-region.md)。

您还可以创建管道以生成基于容器的应用程序，并将 Amazon ECS 作为部署提供方以部署应用程序。在创建管道以使用 Amazon ECS 部署基于容器的应用程序之前，您必须创建一个映像定义文件，如[映像定义文件参考](file-reference.md)中所述。

CodePipeline 当源代码变更被推送时，使用变更检测方法启动您的管道。这些检测方法基于源类型：
+ CodePipeline 使用 Amazon Ev CloudWatch ents 来检测您的 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 控制台，[网址为 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. 在**服务角色**中，执行下列操作之一：
   + 选择 “**新建服务角色**” CodePipeline 以允许在 IAM 中创建新的服务角色。
   + 选择**现有服务角色**以使用已在 IAM 中创建的服务角色。在**角色 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. （可选）展开**高级设置**。

1. 在**构件存储**中，执行下列操作之一：

   1. 选择**默认位置**，在为管道选择的管道中使用默认项目存储，例如指定为默认的 S3 工件存储桶。 AWS 区域 

   1. 如果您在管道所在的区域中已有构件存储（例如，S3 构件存储桶），请选择**自定义位置**。在**存储桶**中，选择存储桶名称。
**注意**  
这不是源代码的源存储桶。这是管道的项目存储。每个管道都需要一个单独的构件存储，例如 S3 存储桶。创建或编辑管道时，管道区域中必须有一个工件存储桶，并且每个运行操作的 AWS 区域都必须有一个工件存储桶。  
有关更多信息，请参阅[输入和输出构件](welcome-introducing-artifacts.md)和[CodePipeline 管道结构参考](reference-pipeline-structure.md)。

1. 在**加密密钥**中，执行下列操作之一：

   1. 要使用 CodePipeline 默认值 AWS KMS key 加密管道项目存储（S3 存储桶）中的数据，请选择**默认 AWS 托管密钥**。

   1. 要使用客户托管密钥对管道构件存储（S3 桶）中的数据进行加密，请选择**客户托管密钥**。选择密钥 ID、密钥 ARN 或别名 ARN。

1.  选择**下一步**。

**步骤 2：创建源阶段**

1. 在**步骤 3：添加源阶段**页面上的**源提供方**中，选择您的源代码存储到的存储库的类型，指定其必需选项。其它字段的显示取决于所选的源提供方，如下所示。
   + 对于 **Bitbucket Cloud、 GitHub （通过 GitHub 应用程序）、E GitHub nterprise 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 命令，请选择**完全克隆**。此选项只能由 CodeBuild 下游操作使用。

          如果选择此选项，则需要更新 CodeBuild 项目服务角色的权限，如所示[故障排除 CodePipeline](troubleshooting.md)。如需查看教程以了解如何使用**完整克隆**选项，请参阅[教程：使用带有 GitHub 管道源的完整克隆](tutorials-github-gitclone.md)。
   + 对于 **Amazon S3**：

     1. 在**Amazon S3 位置**中，提供 S3 存储桶名称和已启用版本控制的存储桶中对象的路径。存储桶名称和路径的格式与以下内容类似：

        ```
         s3://bucketName/folderName/objectName
        ```
**注意**  
当 Amazon S3 是您的管道的源提供程序时，您可以将一个或多个源文件压缩到单个 .zip 文件中，然后将 .zip 文件上传到源桶。您也可以上传单个解压缩的文件；但是，需要 .zip 文件的下游操作将失败。

     1. 选择 S3 源存储桶后， CodePipeline 创建 Amazon E CloudWatch vents 规则和要为此管道创建的 AWS CloudTrail 跟踪。接受**更改检测选项**下面的默认值。这 CodePipeline 允许使用 Amazon Ev CloudWatch en AWS CloudTrail ts 并检测新管道的更改。选择**下一步**。
   + 对于 **AWS CodeCommit**：
     + 在**存储库名称**中，选择要用作管道源位置的 CodeCommit 存储库的名称。在**分支名称**中，从下拉列表中选择要使用的分支。
     + 在**输出构件格式**中，为构件选择格式。
       + 要使用默认方法存储 CodeCommit 操作的输出对象，请选择**CodePipeline默认**。该操作访问存储库中的文件，并将工件 CodeCommit 存储在管道工件存储区的 ZIP 文件中。
       + 要存储包含存储库的 URL 引用的 JSON 文件，以便下游操作可以直接执行 Git 命令，请选择**完全克隆**。此选项只能由 CodeBuild 下游操作使用。

         如果选择此选项，则需要向您的 CodeBuild 服务角色添加`codecommit:GitPull`权限，如所示[为 CodeCommit 源操作添加 CodeBuild GitClone 权限](troubleshooting.md#codebuild-role-codecommitclone)。您还需要为 CodePipeline 服务角色添加`codecommit:GetRepository`权限，如所示[为 CodePipeline 服务角色添加权限](how-to-custom-role.md#how-to-update-role-new-services)。如需查看教程以了解如何使用**完整克隆**选项，请参阅[教程：使用带有 GitHub 管道源的完整克隆](tutorials-github-gitclone.md)。
     + 选择 CodeCommit 存储库名称和分支后，**更改检测选项**中会显示一条消息，显示要为此管道创建的 Amazon Ev CloudWatch ents 规则。接受**更改检测选项**下面的默认值。这 CodePipeline 允许使用 Amazon E CloudWatch vents 来检测您的新管道的更改。
   + 对于 **Amazon ECR**：
     + 在**存储库名称**中，选择 Amazon ECR 存储库的名称。
     + 在**映像标签**中，指定映像名称和版本（如果与最新版本不同）。
     + 在**输出构件**中，选择默认输出对象，例如 MyApp，它包含您希望下一阶段使用的图像名称和存储库 URI 信息。

       有关使用 CodeDeploy蓝绿色部署（包括 Amazon ECR 源阶段）为 Amazon ECS 创建管道的教程，请参阅。[教程：使用 Amazon ECR 源和 ECS-to-CodeDeploy部署创建管道](tutorials-ecs-ecr-codedeploy.md)

     当您在管道中包含一个 Amazon ECR 源阶段时，在您提交更改时，源操作生成 `imageDetail.json` 文件作为输出构件。有关 `imageDetail.json` 文件的信息，请参阅[用于亚马逊 ECS 部署操作的 imageDetail.json 文件 blue/green](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 操作，请选择 **Commands**。
**注意**  
运行 Commands 操作将在 AWS CodeBuild中产生单独的费用。如果您计划在 CodeBuild 操作中插入构建命令，请继续选择 “其他生成提供程序”，然后选择 CodeBuild。

     在 **Commands** 中，输入用于您操作的 Shell 命令。有关 Commands 操作的更多信息，请参阅 [Commands 操作参考](action-reference-Commands.md)。
   + 要选择其他构建提供商 CodeBuild，例如，请选择**其他提供商**。从**构建提供程序**中，选择构建服务的自定义操作提供程序，并提供该提供程序的配置详细信息。有关如何添加 Jenkins 作为构建提供程序的示例，请参阅[教程：创建一个四阶段管道](tutorials-four-stage-pipeline.md)。
   + 从**构建提供程序**中，选择 **AWS CodeBuild**。

     在**区域**中，选择资源所在的 AWS 区域。Re **g** ion 字段指定为此操作类型和提供者类型创建 AWS 资源的位置。仅为操作提供方是 AWS 服务的操作显示此字段。“**区域**” 字段默认为与您的管道相同的 AWS 区域。

     在**项目名称**中选择您的构建项目。如果您已经在中创建了构建项目 CodeBuild，请选择它。或者，您可以在中创建构建项目， CodeBuild 然后返回此任务。按照《*CodeBuild用户指南*》中的 “[创建要使用的管道](https://docs.aws.amazon.com/codebuild/latest/userguide/how-to-create-pipeline.html#pipelines-create-console)” CodeBuild 中的说明进行操作。

     在 “**生成规范**” 下， CodeBuildbuildspec 文件是可选的，你可以改为输入命令。在**插入构建命令**中，输入用于操作的 Shell 命令。有关使用构建命令的注意事项的更多信息，请参阅[Commands 操作参考](action-reference-Commands.md)。如果要在其他阶段运行命令或者命令列表很长，请选择**使用 buildspec 文件**。

     在**环境变量**中，要将 CodeBuild环境变量添加到生成操作中，请选择**添加环境变量**。每个变量由三个条目组成：
     + 在**名称**中，输入环境变量的名称或键。
     + 在**值**中，输入环境变量的值。如果为变量类型选择 “**参数**”，请确保此值是您已存储在 Sy AWS stems Manager 参数存储中的参数的名称。
**注意**  
我们强烈不鼓励使用环境变量来存储敏感值，尤其是 AWS 证书。使用 CodeBuild 控制台或 AWS CLI 时，环境变量将以纯文本形式显示。对于敏感值，我们建议您改用 **参数** 类型。
     + （可选）在**类型**中，输入环境变量的类型。有效值为**明文**或**参数**。默认值为**明文**。

     （可选）在**构建类型**中，选择下列选项之一：
     + 要在单个构建操作执行中运行每次构建，请选择**单次构建**。
     + 要在同一个构建操作执行中运行多次构建，请选择**批处理构建**。

     （可选）如果您选择运行批处理构建，则可以选择**将批处理中的所有构件合并到一个位置**，将所有构建构件放入单个输出构件中。

1. 要将阶段配置为自动重试，请选择**启用阶段失败时的自动重试**。有关自动重试的更多信息，请参阅[配置阶段在失败时自动重试](stage-retry.md#stage-retry-auto)。

1. 选择**下一步**。

**步骤 5：创建测试阶段**

如果您计划创建构建或部署阶段，则此步骤是可选的。

1. 在**步骤 5：添加测试阶段**页面上，执行下列操作之一，然后选择**下一步**：
   + 如果您计划创建构建或部署阶段，请选择**跳过测试阶段**。
   + 在**测试提供商**中，选择测试操作提供商并填写相应的字段。

1. 选择**下一步**。

**步骤 6：创建部署阶段**

如果已创建了构建阶段，则此步骤为可选步骤。

1. 在 “**步骤 6：添加部署阶段**” 页面上，执行以下操作之一，然后选择 “**下一步**”：
   + 如果您在前面步骤中创建了构建或测试阶段，则选择**跳过部署阶段**。
**注意**  
如果您已跳过构建或测试阶段，则此选项不会显示。
   + 在**部署提供程序**中，选择您为部署提供程序创建的自定义操作。

     在**区域**中，仅对于跨区域操作，请选择创建资源的 AWS 区域。**区域**字段指定为此操作类型和提供方类型创建 AWS 资源的位置。此字段仅在操作提供方是 AWS 服务的情况下对操作显示。“**区域**” 字段默认为与您的管道相同的 AWS 区域。
   + 在**部署提供程序**中，适用于默认提供商的字段如下所示：
     + **CodeDeploy**

       在**应用程序名称**中，输入或选择现有 CodeDeploy 应用程序的名称。在**部署组**中，输入应用程序的部署组的名称。选择**下一步**。您还可以在 CodeDeploy 控制台中创建应用程序和/或部署组。
     + **AWS Elastic Beanstalk**

        在**应用程序名称**中，输入或选择现有 Elastic Beanstalk 应用程序的名称。在**环境名称**中，输入应用程序的环境。选择**下一步**。您还可以在 Elastic Beanstalk 控制台中创建应用程序和/或环境。
     + **AWS OpsWorks Stacks**

       在**堆栈**中，输入或选择要使用的堆栈的名称。在**层**中，选择目标实例所属的层。在 **App** 中，选择您要更新和部署的应用程序。如果您需要创建一个应用程序，请选择**在 AWS OpsWorks中创建一个新的**。

       有关将应用程序添加到堆栈和层中的信息 AWS OpsWorks，请参阅*AWS OpsWorks 用户指南*中的[添加应用程序](https://docs.aws.amazon.com/opsworks/latest/userguide/workingapps-creating.html)。

       有关如何使用中的简单管道 CodePipeline 作为在 AWS OpsWorks 层上运行的代码的源代码的 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 集群的名称。在**服务名称**中，输入或选择在集群上运行的服务的名称。您还可以创建集群和服务。在**映像文件名**中，键入描述服务的容器和映像的映像定义文件的名称。
**注意**  
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（蓝/绿）**

       输入 CodeDeploy 应用程序和部署组、Amazon ECS 任务定义和 AppSpec 文件信息，然后选择 “**下一步**”。
**注意**  
**Amazon ECS（蓝/绿）** 操作需要 imageDetail.json 文件作为部署操作的输入构件。由于 Amazon ECR 源操作会创建此文件，所以包括 Amazon ECR 源操作的管道无需提供 `imageDetail.json` 文件。有关更多信息，请参阅 [用于亚马逊 ECS 部署操作的 imageDetail.json 文件 blue/green](file-reference.md#file-reference-ecs-bluegreen)。

       有关使用创建蓝绿部署到 Amazon ECS 集群的管道的教程 CodeDeploy，请参阅[教程：使用 Amazon ECR 源和 ECS-to-CodeDeploy部署创建管道](tutorials-ecs-ecr-codedeploy.md)。
     + **AWS Service Catalog**

       如果您要使用控制台中的字段指定配置，请选择**输入部署配置**，如果您有单独的配置文件，请选择**配置文件**。输入产品和配置信息，然后选择**下一步**。

       有关使用管道将产品更改部署到 Service Catalog 的教程，请参阅[教程：创建部署到 Service Catalog 的管道](tutorials-S3-servicecatalog.md)。
     + **Alexa Skills Kit**

       在 **Alexa Skill ID** 中，为您的 Alexa 技能输入技能 ID。在**客户端 ID** 和**客户端密钥**中，输入使用 Login with Amazon（LWA）安全配置文件生成的凭证。在**刷新令牌**中，输入使用 ASK CLI 命令生成的刷新令牌，以检索刷新令牌。选择**下一步**。

       有关使用管道部署 Alexa 技能并生成 LWA 凭据的教程，请参阅[教程：创建部署 Amazon Alexa 技能的管道](tutorials-alexa-skills-kit.md)。
     + **Amazon S3**

       在**存储桶**中，您要使用的 S3 存储桶的名称。如果部署阶段的输入项目是 ZIP 文件，请选择**在部署前提取文件**。如果选择了**在部署前提取文件**，则您可以（可选）为要将 ZIP 文件解压缩到的**部署路径**输入值。如果未选择，则您需要在 **S3 对象键**中输入一个值。
**注意**  
大多数源和构建阶段输出构件都会被压缩。除了 Amazon S3 之外的所有管道源提供方都会先压缩源文件，然后再将它们作为输入构件提供给下一个操作。

       （可选）在**标准 ACL** 中，输入要应用于部署到 Amazon S3 的对象的[标准 ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl)。
**注意**  
应用标准 ACL 将覆盖已应用于对象的任何现有 ACL。

       （可选）在**缓存控制**中，为从存储桶下载对象的请求指定缓存控制参数。有关有效值的列表，请参阅 HTTP 操作的 [http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9) 标头字段。要在**缓存控件**中输入多个值，请在每个值之间使用逗号。您可以在每个逗号后添加一个空格（可选），如本示例所示。  
![\[该图显示了控制台中的缓存控制字段，其中包含以下条目：public, max-age=0, no-transform\]](http://docs.aws.amazon.com/zh_cn/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>

要使用创建管道，您需要创建一个 JSON 文件来定义管道结构，然后使用`--cli-input-json`参数运行**create-pipeline**命令。 AWS CLI 

**重要**  
您不能 AWS CLI 使用创建包含合作伙伴操作的管道。您必须改用 CodePipeline 控制台。

有关管道结构的更多信息，请参阅《 CodePipeline [API](https://docs.aws.amazon.com/cli/latest/reference/codepipeline) 参考》中的 an [CodePipeline 管道结构参考](reference-pipeline-structure.md) d [create-pipelin](https://docs.aws.amazon.com/cli/latest/reference/codepipeline/create-pipeline.html) e。

要创建 JSON 文件，请使用示例管道 JSON 文件，编辑该文件，然后在运行 **create-pipeline** 命令时调用该文件。

**先决条件：**

您需要在中为其创建的服务角色的 ARN。 CodePipeline [入门 CodePipeline](getting-started-codepipeline.md)运行命令时，您可以在管道 JSON 文件中使用 CodePipeline 服务角色 ARN。**create-pipeline**有关创建服务角色的更多信息，请参阅[创建 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 Ev CloudWatch ents 来检测您的 CodeCommit 源存储库和分支或 S3 源存储桶中的更改。下一步包括手动为您的管道创建这些资源的说明。将此标记设置为 `false` 将禁用定期检查，当您使用建议的更改检测方法时不需要定期检查。

1. 要在您的管道所在区域之外的区域创建构建、测试或部署操作，您必须向管道结构添加以下内容。有关说明，请参阅[在中添加跨区域操作 CodePipeline](actions-create-cross-region.md)。
   + 将 `Region` 参数添加到您的操作的管道结构。
   + 使用`artifactStores`参数为您要执行操作的每个 AWS 区域指定一个对象存储桶。

1. 如果您对其结构感到满意，请使用类似 **pipeline.json** 的名称保存您的文件。

**创建管道**

1. 运行 **create-pipeline** 命令，并使用 `--cli-input-json` 参数指定您之前创建的 JSON 文件。

   要*MySecondPipeline*使用名为 pipeline.json 的 JSON 文件创建一个名为 pipeline.json 的管道，其中包含名称 *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 事件规则，如中所述[为 CodeCommit 源创建 EventBridge 规则 (CLI)](pipelines-trigger-source-repo-changes-cli.md)。
   + 对于包含 Amazon S3 源的管道，您必须手动创建 CloudWatch 事件规则和 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)。
+ 为管道创建服务角色并在模板中引用。
+ 使用默认构件存储创建构件存储，例如在您为管道选择的 AWS 区域 中为管道指定的默认 S3 构件存储桶。

要查看用于静态模板创建向导的开源入门模板集合，请参见存储库，网址为[https://github.com/aws/codepipeline-starter-templates](https://github.com/aws/codepipeline-starter-templates)。

使用静态模板创建管道时，将根据使用案例的需要在每个模板中配置管道结构。例如，在此过程中使用部署到 CloudFormation 的模板作为示例。该模板生成一个名为以下结构**DeployToCloudFormationService**的管道：
+ 包含源操作的构建阶段，其配置由您在向导中指定。
+ 在 CloudFormation中具有部署操作和相关资源堆栈的部署阶段。

使用静态模板创建管道时， CodePipeline 会创建阶段（源、构建、暂存）的名称。这些名称不能更改。您可以对稍后添加的阶段使用更具体的名称（例如 BuildToGamma 或 DeployToProd）。

**步骤 1：访问控制台**

1. 登录 AWS 管理控制台 并打开 CodePipeline 控制台，[网址为 http://console.aws.amazon。 com/codesuite/codepipeline/home](https://console.aws.amazon.com/codesuite/codepipeline/home)。

1. 在 **Welcome** 页面上，选择 **Create pipeline**。

   如果这是您第一次使用 CodePipeline，请选择 “**入门**”。

**步骤 2：选择模板**

选择一个模板来创建具有部署阶段、自动化或 CI 管道的管道。

1. 在**步骤 1：选择创建选项**页面上，执行以下操作之一，然后选择**下一步**：
   + 如果您计划创建部署阶段，请选择**部署**。查看部署到 ECR 的模板的选项或 CloudFormation。在本示例中，选择**部署**，然后选择部署到 CloudFormation。
   + 如果您计划创建 CI 管道，请选择**持续集成**。查看 CI 管道的选项，例如构建到 Gradle。
   + 如果您计划创建自动管道，请选择**自动化**。查看自动化选项，例如安排 python 构建。

1.   
![\[该图显示了向导中已选择 CloudFormation 部署的 “选择模板” 选项\]](http://docs.aws.amazon.com/zh_cn/codepipeline/latest/userguide/images/create-static-choose-template-depl.png)  
![\[该图显示了向导中的选择源页面\]](http://docs.aws.amazon.com/zh_cn/codepipeline/latest/userguide/images/create-static-choose-template-CI.png)  
![\[该图显示了在向导中选择自动化的选择模板选项\]](http://docs.aws.amazon.com/zh_cn/codepipeline/latest/userguide/images/create-static-choose-template-auto.png)

**步骤 3：选择源**
+ 在**步骤 3：选择源**页面上的**源提供方**下，选择您的源代码存储到的存储库的提供方，指定其必需选项，然后选择**下一步**。
  + 对于 **Bitbucket Cloud、 GitHub （通过 GitHub 应用程序）、E GitHub nterprise 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 命令，请选择**完全克隆**。此选项只能由 CodeBuild 下游操作使用。

         如果选择此选项，则需要更新 CodeBuild 项目服务角色的权限，如所示[故障排除 CodePipeline](troubleshooting.md)。如需查看教程以了解如何使用**完整克隆**选项，请参阅[教程：使用带有 GitHub 管道源的完整克隆](tutorials-github-gitclone.md)。
  + 对于 **Amazon ECR**：
    + 在**存储库名称**中，选择 Amazon ECR 存储库的名称。
    + 在**映像标签**中，指定映像名称和版本（如果与最新版本不同）。
    + 在**输出构件**中，选择默认输出对象，例如 MyApp，它包含您希望下一阶段使用的图像名称和存储库 URI 信息。

    当您在管道中包含一个 Amazon ECR 源阶段时，在您提交更改时，源操作生成 `imageDetail.json` 文件作为输出构件。有关 `imageDetail.json` 文件的信息，请参阅[用于亚马逊 ECS 部署操作的 imageDetail.json 文件 blue/green](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_cn/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)。