CodePipeline 管道结构参考 - Amazon CodePipeline
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

CodePipeline 管道结构参考

默认情况下,您成功创建的任何管道都 Amazon CodePipeline 具有有效的结构。但是,如果您手动创建或编辑 JSON 文件来创建管道或更新管道 Amazon CLI,则可能会无意中创建了一个无效的结构。以下参考可帮助您更好地了解管道结构的要求以及如何排查问题。请参阅 中的配额 Amazon CodePipeline 中适用于所有管道的约束。

中的有效操作类型和提供者 CodePipeline

管道结构格式用于在管道中构建操作和阶段。操作类型由操作类别和提供方类型组成。

以下是中的有效操作类别 CodePipeline:

  • 来源

  • 构建

  • 测试

  • 部署

  • 审批

  • 调用

每个操作类别都有一组指定的提供方。每个操作提供方(比如 Amazon S3)都有一个提供方名称(比如 S3),您必须在管道结构中操作类别的 Provider 字段中使用该名称。

管道结构中的操作类别部分的 Owner 字段有三个有效值:AWSThirdPartyCustom

要查找操作提供方的提供方名称和所有者信息,请参阅操作结构参考每个操作类型的输入和输出构件数量

此表按操作类型列出了有效的提供方。

注意

有关 Bitbucket Cloud GitHub、、En GitHub terprise Server 或 GitLab .com 操作,请参阅CodeStarSourceConnection 适用于 Bitbucket Cloud GitHub、、 GitHub 企业服务器、 GitLab .com 和 GitLab 自我管理操作操作参考主题。

按操作类型列出的有效操作提供方
操作类别 有效操作提供方 操作参考
来源 Amazon S3 Amazon S3 源操作
Amazon ECR Amazon ECR
CodeCommit CodeCommit
CodeStarSourceConnection (适用于 Bitbucket Cloud GitHub、、 GitHub 企业服务器或 GitLab .com 操作) CodeStarSourceConnection 适用于 Bitbucket Cloud GitHub、、 GitHub 企业服务器、 GitLab .com 和 GitLab 自我管理操作
构建 CodeBuild Amazon CodeBuild
自定义 CloudBees 每个操作类型的输入和输出构件数量
自定义 Jenkins 每个操作类型的输入和输出构件数量
自定义 TeamCity 每个操作类型的输入和输出构件数量
测试 CodeBuild Amazon CodeBuild
Amazon Device Farm 每个操作类型的输入和输出构件数量
ThirdParty GhostInspector 每个操作类型的输入和输出构件数量
自定义 Jenkins 每个操作类型的输入和输出构件数量
ThirdParty 微焦 StormRunner 负载 每个操作类型的输入和输出构件数量
ThirdParty Nouvola 每个操作类型的输入和输出构件数量
部署 Amazon S3 Amazon S3 部署操作
Amazon CloudFormation Amazon CloudFormation
Amazon CloudFormation StackSets (包括CloudFormationStackSetCloudFormationStackInstances操作) Amazon CloudFormation StackSets
CodeDeploy 每个操作类型的输入和输出构件数量
Amazon ECS 每个操作类型的输入和输出构件数量
Amazon ECS(蓝色/绿色)(这是 CodeDeployToECS 操作) 每个操作类型的输入和输出构件数量
Elastic Beanstalk 每个操作类型的输入和输出构件数量
Amazon AppConfig Amazon AppConfig
Amazon OpsWorks 每个操作类型的输入和输出构件数量
服务目录 每个操作类型的输入和输出构件数量
Amazon Alexa 每个操作类型的输入和输出构件数量
自定义 XebiaLabs 每个操作类型的输入和输出构件数量
审批 手动 每个操作类型的输入和输出构件数量
调用 Amazon Lambda Amazon Lambda
Amazon Step Functions Amazon Step Functions

中的 CodePipeline 某些操作类型仅在部分 Amazon 区域可用。某一 Amazon 地区可能有操作类型可用,但该操作类型的 Amazon 提供者不可用。

有关各个操作提供方的更多信息,请参阅与动 CodePipeline 作类型的集成

以下部分提供了每种操作类型的提供方信息和配置属性的示例。

中的管道和舞台结构要求 CodePipeline

两阶段管道具有以下基本结构:

{ "roleArn": "An IAM ARN for a service role, such as arn:aws:iam::80398EXAMPLE:role/CodePipeline_Service_Role", "stages": [ { "name": "SourceStageName", "actions": [ ... See 中的操作结构要求 CodePipeline ... ] }, { "name": "NextStageName", "actions": [ ... See 中的操作结构要求 CodePipeline ... ] } ], "artifactStore": { "type": "S3", "location": "The name of the Amazon S3 bucket automatically generated for you the first time you create a pipeline using the console, such as codepipeline-us-east-2-1234567890, or any Amazon S3 bucket you provision for this purpose" }, "name": "YourPipelineName", "version": 1 }

管道结构具有以下要求:

  • 一个管道必须包含至少两个阶段。

  • 管道的第一阶段必须包含至少一个源操作。它只能包含源操作。

  • 只有管道的第一阶段才可包含源操作。

  • 每个管道中至少有一个阶段必须包含不是源操作的操作。

  • 管道中的所有阶段名称都必须唯一。

  • 无法在控制台中编辑舞 CodePipeline 台名称。如果您使用编辑阶段名称 Amazon CLI,并且该阶段包含带有一个或多个秘密参数(例如 OAuth 令牌)的操作,则不会保留这些秘密参数的值。您必须手动输入参数的值(在返回的 JSON 中,这些值由四个星号掩盖 Amazon CLI),并将其包含在 JSON 结构中。

  • artifactStore字段包含管道的工件存储桶类型和位置,所有操作都在同一个 Amazon 区域中。如果您在与您的管道不同的区域中添加操作,则该artifactStores映射将用于列出执行操作的每个 Amazon 区域的构件存储桶。当您创建或编辑管道时,管道区域中必须有构件存储桶,然后每个您计划执行操作的区域必须有一个构件存储桶。

    以下示例显示了一个管道的基本结构,该管道具有跨区域操作并使用 artifactStores 参数:

    "pipeline": { "name": "YourPipelineName", "roleArn": "CodePipeline_Service_Role", "artifactStores": { "us-east-1": { "type": "S3", "location": "S3 artifact bucket name, such as codepipeline-us-east-1-1234567890" }, "us-west-2": { "type": "S3", "location": "S3 artifact bucket name, such as codepipeline-us-west-2-1234567890" } }, "stages": [ { ...
  • 管道元数据字段与管道结构截然不同,无法进行编辑。在更新管道时,将自动更改 updated 元数据字段中的日期。

  • 在编辑或更新管道时,无法更改管道名称。

    注意

    如果要重命名现有的管道,您可以使用 CLI get-pipeline 命令生成包含管道结构的 JSON 文件。然后,您可以使用 CLI create-pipeline 命令创建具有该结构的新管道,并为其指定新名称。

每次更新管道时,都会自动生成和更新管道的版本号。

中的操作结构要求 CodePipeline

操作具有以下高级结构:

[ { "inputArtifacts": [ An input artifact structure, if supported for the action category ], "name": "ActionName", "region": "Region", "namespace": "source_namespace", "actionTypeId": { "category": "An action category", "owner": "AWS", "version": "1" "provider": "A provider type for the action category", }, "outputArtifacts": [ An output artifact structure, if supported for the action category ], "configuration": { Configuration details appropriate to the provider type }, "runOrder": A positive integer that indicates the run order within the stage, } ]

有关适用于提供方类型的示例 configuration 详细信息的列表,请参阅按提供方类型列出的配置详细信息

操作结构具有以下要求:

  • 阶段中的所有操作名称都必须是唯一的。

  • 操作的输入构件必须与前一操作中声明的输出构件完全相符。例如,如果前一操作包含以下声明:

    "outputArtifacts": [ { "MyApp" } ],

    并且没有其他输出项目,则后一操作的输入项目必须为:

    "inputArtifacts": [ { "MyApp" } ],

    这适用于所有操作,无论它们处于同一阶段还是后续阶段,但输入项目不必是提供输出项目的操作的严格意义上的下一个操作。并行操作可以声明不同的输出构件包,这些包又由不同的后续操作使用。

  • 输出构件名称在管道内必须唯一。例如,一个管道可以包括两个操作,一个具有名为 "MyApp" 的输出项目,另一个具有名为 "MyBuiltApp" 的输出项目。但是,管道不能包含两个都具有名为 "MyApp" 的输出项目的操作。

  • 跨区域操作使用 Region 字段指定要创建操作的 Amazon 区域。为此操作创建的 Amazon 资源必须在region字段中提供的相同区域中创建。无法创建以下操作类型的跨区域操作:

    • 源操作

    • 按第三方提供方列出的操作

    • 按自定义提供方列出的操作

  • 操作可以使用变量进行配置。您可以使用 namespace 字段为执行变量设置命名空间和变量信息。有关执行变量和操作输出变量的参考信息,请参阅Variables

  • 对于当前受支持的所有操作类型,唯一有效的所有者字符串为 AWSThirdPartyCustom。如需了解更多信息,请参阅 CodePipeline API 参考

  • 操作的默认 runOrder 值为 1。值必须是正整数 (自然数)。不能使用分数、小数、负数或零。要指定一个操作序列,请对序列中的第一个操作使用最小的数字,然后对其余的每个操作使用逐渐递增的数字。要指定并行操作,请对要并行运行的每个操作使用同一整数。在控制台中,您可以通过在要运行操作的阶段中选择该级别的添加操作组来指定操作串行序列,也可以通过选择添加操作来指定并行序列。操作组是指同一级别中一个或多个操作的运行顺序。

    例如,如果您希望一个阶段中的三个操作依次运行,则应将第一个操作的 runOrder 值指定为 1,将第二个操作的 runOrder 值指定为 2,将第三个操作的 runOrder 值指定为 3。但是,如果您希望第二个和第三个操作并行运行,则应将第一个操作的 runOrder 值指定为 1,将第二个和第三个操作的 runOrder 值均指定为 2。

    注意

    顺序操作的编号不必十分严格。例如,如果您的序列中有三个操作并决定删除第二个操作,则不需要对第三个操作的 runOrder 值重新编号。因为该操作的 runOrder 值 (3) 大于第一个操作的 runOrder 值 (1),所以它将在此阶段中的第一个操作之后连续运行。

  • 当您使用 Amazon S3 桶作为部署位置时,您还可以指定对象键。对象键可以是文件名(对象)或前缀(文件夹路径)和文件名的组合。您可以使用变量来指定您希望管道使用的位置名称。Amazon S3 部署操作支持在 Amazon S3 对象键中使用以下变量。

    使用 Amazon S3 中的变量
    Variable 控制台输入的示例 输出
    datetime js-application/{datetime}.zip 此格式的 UTC 时间戳:<YYYY>-<MM>-DD>_<HH>-<MM>-<SS>

    例如:

    js-application/2019-01-10_07-39-57.zip

    uuid js-application/{uuid}.zip UUID 是全局唯一标识符,保证不同于任何其他标识符。此格式的 UUID(十六进制格式中的所有位数):<8 位数> – <4 位数> –4 位数> – <4 位数> – <12 位数>

    例如:

    js-application/54a60075-b96a-4bf3-9013-db3a9EXAMPLE.zip

  • 以下是以下actionTypeId类别的有效类别 CodePipeline:

    • Source

    • Build

    • Approval

    • Deploy

    • Test

    • Invoke

    此处提供了一些提供方类型和配置选项。

  • 操作类别的有效提供方类型因类别而异。例如,对于源操作类型,有效的提供方类型为 S3GitHubCodeCommitAmazon ECR。此示例显示了使用 S3 提供方的源操作的结构:

    "actionTypeId": { "category": "Source", "owner": "AWS", "version": "1", "provider": "S3"},
  • 每个操作都必须具有有效的操作配置,这取决于该操作的提供方类型。下表列出了每个有效提供方类型所需的操作配置元素:

    提供方类型的操作配置属性
    提供方名称 操作类型中的提供方名称 配置属性 是否是必需的属性?
    Amazon S3(部署操作提供方) 有关更多信息,包括与 Amazon S3 部署操作参数相关的示例,请参阅 Amazon S3 部署操作
    Amazon S3(源操作提供方) 有关更多信息,包括与 Amazon S3 源操作参数相关的示例,请参阅 Amazon S3 源操作
    Amazon ECR 有关更多信息,包括与 Amazon ECR 参数相关的示例,请参阅 Amazon ECR
    CodeCommit 有关更多信息,包括与 CodeCommit 参数相关的示例,请参阅CodeCommit
    GitHub 有关更多信息,包括与 GitHub 参数相关的示例,请参阅GitHub 版本 1 源操作结构参考
    Amazon CloudFormation 有关更多信息,包括与 Amazon CloudFormation 参数相关的示例,请参阅Amazon CloudFormation
    CodeBuild 有关 CodeBuild 参数的更多说明和示例,请参阅Amazon CodeBuild
    CodeDeploy 有关 CodeDeploy 参数的更多说明和示例,请参阅Amazon CodeDeploy
    Amazon Device Farm 有关 Amazon Device Farm 参数的更多说明和示例,请参阅Amazon Device Farm
    Amazon Elastic Beanstalk ElasticBeanstalk ApplicationName 必需
    EnvironmentName 必需
    Amazon Lambda 有关更多信息,包括与 Amazon Lambda 参数相关的示例,请参阅Amazon Lambda
    Amazon OpsWorks Stacks OpsWorks Stack 必需
    Layer 可选
    App 必需
    Amazon ECS 有关与 Amazon ECS 参数相关的更多说明和示例,请参阅 Amazon Elastic Container Service
    Amazon ECS 和 CodeDeploy(蓝色/绿色) 有关 Amazon ECS 和 CodeDeploy 蓝/绿参数的更多描述和示例,请参阅。Amazon 弹性容器服务和 CodeDeploy 蓝绿色
    服务目录 ServiceCatalog TemplateFilePath 必需
    ProductVersionName 必需
    ProductType 必需
    ProductVersionDescription 可选
    ProductId 必需
    Alexa Skills Kit AlexaSkillsKit ClientId 必需
    ClientSecret 必需
    RefreshToken 必需
    SkillId 必需
    Jenkins 你在 Jenkins CodePipeline 插件中提供的操作名称(例如,MyJenkinsProviderName ProjectName 必需
    手动审批 Manual CustomData 可选
    ExternalEntityLink 可选
    NotificationArn 可选

每个操作类型的输入和输出构件数量

根据操作类型,您可以具有以下数量的输入和输出项目:

构件的操作类型约束
所有者 操作的类型 提供商 有效的输入构件数 有效的输出构件数
AWS 来源 Amazon S3 0 1
AWS 来源 CodeCommit 0 1
AWS 来源 Amazon ECR 0 1
ThirdParty 来源 GitHub 0 1
AWS 构建 CodeBuild 1 到 5 0 到 5
AWS 测试 CodeBuild 1 到 5 0 到 5
AWS 测试 Amazon Device Farm 1 0
AWS 审批 手动 0 0
AWS 部署 Amazon S3 1 0
AWS 部署 Amazon CloudFormation 0 到 10 0 到 1
AWS 部署 CodeDeploy 1 0
AWS 部署 Amazon Elastic Beanstalk 1 0
AWS 部署 Amazon OpsWorks Stacks 1 0
AWS 部署 Amazon ECS 1 0
AWS 部署 服务目录 1 0
AWS 调用 Amazon Lambda 0 到 5 0 到 5
ThirdParty 部署 Alexa Skills Kit 1 到 2 0
Custom 构建 Jenkins 0 到 5 0 到 5
Custom 测试 Jenkins 0 到 5 0 到 5
Custom 任意受支持的类别 与自定义操作中指定的一样 0 到 5 0 到 5

PollForSourceChanges 参数的默认设置

PollForSourceChanges 参数默认值由用于创建管道的方法确定,如下表所述。许多情况下,PollForSourceChanges 参数默认为 true,并且必须被禁用。

PollForSourceChanges 参数默认为 true 时,应执行以下操作:

  • PollForSourceChanges 参数添加到 JSON 文件或 Amazon CloudFormation 模板。

  • 创建变更检测资源(CloudWatch 事件规则,如果适用)。

  • PollForSourceChanges 参数设置为 false。

    注意

    如果您创建了 CloudWatch 事件规则或 webhook,则必须将该参数设置为 false 以避免多次触发管道。

    PollForSourceChanges 参数不可用于 Amazon ECR 源操作。

  • PollForSourceChanges 参数默认值
    来源 创建方法 示例“配置”JSON 结构输出
    CodeCommit 使用控制台创建管道(更改检测资源也由控制台创建)。该参数显示在管道结构输出中,并默认为 false
    BranchName": "main", "PollForSourceChanges": "false", "RepositoryName": "my-repo"
    管道是使用 CLI 或创建的 Amazon CloudFormation,PollForSourceChanges参数不显示在 JSON 输出中,但它设置为 true
    BranchName": "main", "RepositoryName": "my-repo"
    Amazon S3 使用控制台创建管道(更改检测资源也由控制台创建)。该参数显示在管道结构输出中,并默认为 false
    "S3Bucket": "my-bucket", "S3ObjectKey": "object.zip", "PollForSourceChanges": "false"
    管道是使用 CLI 或创建的 Amazon CloudFormation,PollForSourceChanges参数不显示在 JSON 输出中,但它设置为 true
    "S3Bucket": "my-bucket", "S3ObjectKey": "object.zip"
    GitHub 使用控制台创建管道(更改检测资源也由控制台创建)。该参数显示在管道结构输出中,并默认为 false
    "Owner": "MyGitHubAccountName", "Repo": "MyGitHubRepositoryName" "PollForSourceChanges": "false", "Branch": "main" "OAuthToken": "****"
    管道是使用 CLI 或创建的 Amazon CloudFormation,PollForSourceChanges参数不显示在 JSON 输出中,但它设置为 true
    "Owner": "MyGitHubAccountName", "Repo": "MyGitHubRepositoryName", "Branch": "main", "OAuthToken": "****"

    ² 如果已在某个时候将 PollForSourceChanges 添加到 JSON 结构或 Amazon CloudFormation 模板中,它将如下所示:

    "PollForSourceChanges": "true",

    ³ 有关适用于每个源提供方的更改检测资源的信息,请参阅更改检测方法

按提供方类型列出的配置详细信息

本节列出每个操作提供方的有效 configuration 参数。

以下示例为使用 Service Catalog 的部署操作显示了一个有效的配置,用于在控制台中创建的管道(没有单独的配置文件):

"configuration": { "TemplateFilePath": "S3_template.json", "ProductVersionName": "devops S3 v2", "ProductType": "CLOUD_FORMATION_TEMPLATE", "ProductVersionDescription": "Product version description", "ProductId": "prod-example123456" }

以下示例为使用 Service Catalog 的部署操作显示了一个有效的配置,用于在控制台中创建的管道(有单独的 sample_config.json 配置文件):

"configuration": { "ConfigurationFilePath": "sample_config.json", "ProductId": "prod-example123456" }

以下示例显示使用 Alexa Skills Kit 的部署操作的有效配置:

"configuration": { "ClientId": "amzn1.application-oa2-client.aadEXAMPLE", "ClientSecret": "****", "RefreshToken": "****", "SkillId": "amzn1.ask.skill.22649d8f-0451-4b4b-9ed9-bfb6cEXAMPLE" }

以下示例显示手动审批的有效配置:

"configuration": { "CustomData": "Comments on the manual approval", "ExternalEntityLink": "http://my-url.com", "NotificationArn": "arn:aws:sns:us-west-2:12345EXAMPLE:Notification" }