变量参考 - AWS CodePipeline

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

变量参考

本部分仅供参考。有关创建变量的信息,请参阅使用变量

变量允许您使用在管道执行或操作执行时确定的值来配置管道操作。

一些操作提供方会生成一组定义的变量。您可以从该操作提供方的默认变量键中进行选择,例如提交 ID。

重要

传递密钥参数时,请勿直接输入值。该值以明文形式提供,因此是可读的。出于安全原因,请勿使用纯文本表示密钥。我们强烈建议您使用 AWS Secrets Manager 来存储机密。

要查看使用变量的 step-by-step示例,请执行以下操作:

变量限制

有关限制信息,请参阅 中的配额 AWS CodePipeline

注意

在操作配置字段中输入变量语法时,请不要超过配置字段的 1000 个字符的限制。如果超过此限制,将会返回验证错误。

概念

此部分列出了与变量和命名空间相关的关键术语和概念。

Variables

变量是键/值对,可用于在管道中动态配置操作。目前,有三种方法提供这些变量:

  • 在每个管道执行开始时,都有一组隐式可用的变量。这组变量当前包括 PipelineExecutionId,这是当前管道执行的 ID。

  • 管道级变量是在管道运行时间创建和解析管道时定义的。

    您可以在创建管道时指定管道级变量,也可以在管道执行时提供值。

  • 有的操作类型在执行时生成一组变量。您可以通过检查作为操作一部分的outputVariables字段来查看操作生成的变量。ListActionExecutionsAPI有关按操作提供方列出的可用键名称的列表,请参阅可用于管道操作的变量。要查看每种操作类型产生的变量,请参阅 CodePipeline 操作结构参考

要在操作配置中引用这些变量,您必须使用带有正确命名空间的变量引用语法。

有关示例变量工作流,请参阅配置变量

命名空间

为了确保可以唯一地引用该变量,必须将其分配到命名空间。将一组变量分配到命名空间后,您可以通过以下语法,使用命名空间和变量键在操作配置中引用这些变量:

#{namespace.variable_key}

您可以在三种类型的命名空间中分配变量:

  • Codepipeline 预留命名空间

    这是分配到在每个管道执行开始时可用的一组隐式变量的命名空间。此命名空间是 codepipeline。变量引用示例:

    #{codepipeline.PipelineExecutionId}
  • 管道级变量命名空间

    这是分配给管道级变量的命名空间。所有管道级变量的命名空间是 variables。变量引用示例:

    #{variables.variable_name}
  • 已分配命名空间的操作

    这是您分配给某个操作的命名空间。该操作生成的所有变量都属于此命名空间。要使某个操作生成的变量可在下游操作配置中使用,您必须使用命名空间配置生成操作。命名空间在整个管道定义中必须唯一,并且不能与任何构件名称冲突。以下是使用命名空间 SourceVariables 配置的操作的变量引用示例。

    #{SourceVariables.VersionId}

变量使用案例

以下是管道级变量的一些常见使用案例,有助于确定如何根据自己的特定需求使用变量。

  • 管道级别的变量适用于希望每次都使用同一个管道但操作配置的输入略有差异的 CodePipeline 客户。任何启动管道的开发人员都会在管道启动时在 UI 中添加变量值。通过此配置,只为此次执行传递参数。

  • 使用管道级变量,您可以将动态输入传递给管道中的操作。您可以将参数化管道迁移到, CodePipeline 而不必维护同一管道的不同版本,也不必创建复杂的管道。

  • 您可以使用管道级变量传递输入参数,以便在每次执行时重复使用管道(例如当您要指定想要部署到生产环境的版本时),如此就不必复制管道了。

  • 您可以使用单个管道将资源部署到多个构建和部署环境。例如,对于带有 CodeCommit 存储库的管道,可以从指定的分支和目标部署环境进行部署, CodeBuild 并在管道级别传递 CodeDeploy参数。

配置变量

您可以在管道级别或管道结构中的操作级别配置变量。

配置管道级变量

您可以添加一个或多个管道级变量。你可以在 CodePipeline 动作配置中引用这个值。您可以在创建管道时添加变量名称、默认值和描述。在执行时解析变量。

注意

如果没有为管道级变量定义默认值,则认为该变量是必需的。启动管道时,必须为所有必需的变量指定覆盖,否则管道执行将因验证错误而失败。

您可以使用管道结构中的变量属性提供管道级变量。在以下示例中,变量 Variable1 的值为 Value1

"variables": [ { "name": "Variable1", "defaultValue": "Value1", "description": "description" } ]

有关管道JSON结构的示例,请参见创建管道、阶段和操作

有关在管道执行时传递的管道级变量的教程,请参阅教程:使用管道级变量

请注意,不支持在任何类型的源操作中使用管道级变量。

注意

如果管道中的某些操作中已经使用 variables 命名空间,则必须更新操作定义并为冲突的操作选择另一个命名空间。

配置操作级变量

您可以通过为操作声明命名空间来配置操作以生成变量。该操作必须已经是生成变量的操作提供方之一。否则,可用的变量将为管道级别的变量。

您可以通过以下方法声明命名空间:

  • 在控制台的 Edit action (编辑操作) 页面上,在 Variable namespace (变量命名空间) 中输入命名空间。

  • 在JSON管道结构的namespace参数字段中输入命名空间。

在此示例中,您将名称为的namespace参数添加到 CodeCommit 源操作中SourceVariables。这会将操作配置为生成可用于该操作提供方的变量,例如 CommitId

{ "name": "Source", "actions": [ { "outputArtifacts": [ { "name": "SourceArtifact" } ], "name": "Source", "namespace": "SourceVariables", "configuration": { "RepositoryName": "MyRepo", "BranchName": "mainline", "PollForSourceChanges": "false" }, "inputArtifacts": [], "region": "us-west-2", "actionTypeId": { "provider": "CodeCommit", "category": "Source", "version": "1", "owner": "AWS" }, "runOrder": 1 } ] },

接下来,您需要配置下游操作来使用由上一个操作生成的变量。您可以通过以下方法执行此操作:

  • 在控制台的 Edit action (编辑操作) 页面上,在操作配置字段中输入变量语法(针对下游操作)。

  • 在JSON管道结构的操作配置字段中输入变量语法(用于下游操作)

在此示例中,构建操作的配置字段显示在操作执行时更新的环境变量。该示例为执行 ID #{codepipeline.PipelineExecutionId} 指定命名空间和变量,并为提交 ID #{SourceVariables.CommitId} 指定命名空间和变量。

{ "name": "Build", "actions": [ { "outputArtifacts": [ { "name": "BuildArtifact" } ], "name": "Build", "configuration": { "EnvironmentVariables": "[{\"name\":\"Release_ID\",\"value\":\"#{codepipeline.PipelineExecutionId}\",\"type\":\"PLAINTEXT\"},{\"name\":\"Commit_ID\",\"value\":\"#{SourceVariables.CommitId}\",\"type\":\"PLAINTEXT\"}]", "ProjectName": "env-var-test" }, "inputArtifacts": [ { "name": "SourceArtifact" } ], "region": "us-west-2", "actionTypeId": { "provider": "CodeBuild", "category": "Build", "version": "1", "owner": "AWS" }, "runOrder": 1 } ] },

变量解析

每当在管道执行中执行某个操作时,该操作生成的变量均可用于确保在该操作之后运行的操作。要在使用操作中使用这些变量,您可以使用前面示例中显示的语法,将变量添加到使用操作的配置中。在它执行消耗操作之前,先 CodePipeline 解析配置中存在的所有变量引用,然后再启动动作执行。

示例:用于多个操作的变量

变量规则

以下规则可帮助您进行变量的配置:

  • 您可以通过新的操作属性或通过编辑操作,为操作指定命名空间和变量。

  • 使用管道创建向导时,控制台会为该向导创建的每个操作生成一个命名空间。

  • 如果未指定命名空间,则无法在任何操作配置中引用该操作生成的变量。

  • 要引用操作生成的变量,引用操作必须发生在生成变量的操作之后。这意味着引用操作需要在生成变量的操作之后的阶段,或者在相同阶段中但具有较后的运行顺序。

可用于管道操作的变量

操作提供方确定操作可以生成哪些变量。

有关管理变量的 step-by-step过程,请参见使用变量

使用已定义变量键的操作

与可选择的命名空间不同,以下操作使用无法编辑的变量键。例如,对于 Amazon S3 操作提供方,只有 ETagVersionId 变量键可用。

每次执行还具有一组 CodePipeline生成的管道变量,其中包含有关执行的数据,例如管道版本 ID。管道中的任何操作都可以使用这些变量。

CodePipeline 执行 ID 变量

CodePipeline 执行 ID 变量
提供商 变量键 示例值 变量语法示例
codepipeline PipelineExecutionId 8abc75f0-fbf8-4f4c-bf EXAMPLE #{codepipeline.PipelineExecutionId}

Amazon ECR 操作输出变量

亚马逊ECR变量
变量键 示例值 变量语法示例
ImageDigest sha256: EXAMPLE1122334455 #{SourceVariables.ImageDigest}
ImageTag 最新 #{SourceVariables.ImageTag}
ImageURI 11111 EXAMPLE .dkr. ecr.us-west-2.amazonaws.com /ecs-repo: latest #{SourceVariables.ImageURI}
RegistryId EXAMPLE12233 #{SourceVariables.RegistryId}
RepositoryName my-image-repo #{SourceVariables.RepositoryName}

AWS CloudFormation StackSets 操作输出变量

AWS CloudFormation StackSets 变量
变量键 示例值 变量语法示例
OperationId 11111111-2bbb-111-2bbb-11111example #{DeployVariables.OperationId}
StackSetId my-stackset:1111aaaa-1111-2222-2bbb-11111example #{DeployVariables.StackSetId}

CodeCommit 操作输出变量

CodeCommit 变量
变量键 示例值 变量语法示例
AuthorDate 2019-10-29T03:32:21Z #{SourceVariables.AuthorDate}
BranchName 开发 #{SourceVariables.BranchName}
CommitId

exampleb01f91b31

#{SourceVariables.CommitId}
CommitMessage 修复了一个错误(最大大小为 100 KB) #{SourceVariables.CommitMessage}
CommitterDate 2019-10-29T03:32:21Z #{SourceVariables.CommitterDate}
RepositoryName myCodeCommit回购 #{SourceVariables.RepositoryName}

CodeStarSourceConnection 操作输出变量

CodeStarSourceConnection变量(Bitbucket Cloud GitHub、、 GitHub企业存储库和 GitLab .com)
变量键 示例值 变量语法示例
AuthorDate 2019-10-29T03:32:21Z #{SourceVariables.AuthorDate}
BranchName 开发 #{SourceVariables.BranchName}
CommitId

exampleb01f91b31

#{SourceVariables.CommitId}
CommitMessage 修复了一个错误(最大大小为 100 KB) #{SourceVariables.CommitMessage}
ConnectionArn arn: aws: codestar-connections: 区域:account-id:connection/connection-id #{SourceVariables.ConnectionArn}
FullRepositoryName 用户名/ GitHubRepo #{SourceVariables.FullRepositoryName}

GitHub 操作输出变量(GitHub 操作版本 1)

GitHub 变量(GitHub 操作版本 1)
变量键 示例值 变量语法示例
AuthorDate 2019-10-29T03:32:21Z #{SourceVariables.AuthorDate}
BranchName main #{SourceVariables.BranchName}
CommitId

exampleb01f91b31

#{SourceVariables.CommitId}
CommitMessage

修复了一个错误(最大大小为 100 KB)

#{SourceVariables.CommitMessage}
CommitterDate 2019-10-29T03:32:21Z #{SourceVariables.CommitterDate}
CommitUrl #{SourceVariables.CommitUrl}
RepositoryName myGitHub回购 #{SourceVariables.RepositoryName}

S3 操作输出变量

S3 变量
变量键 示例值 变量语法示例
ETag example28be1c3 #{SourceVariables.ETag}
VersionId exampleta_ IUQCv #{SourceVariables.VersionId}

使用用户配置的变量键的操作

对于 CodeBuild AWS CloudFormation、和 Lambda 操作,变量键由用户配置。

CloudFormation 操作输出变量

AWS CloudFormation 变量
变量键 变量语法示例

对于 AWS CloudFormation 操作,变量由堆栈模板Outputs部分中指定的任何值生成。请注意,生成输出的唯一 CloudFormation 操作模式是那些导致创建或更新堆栈的操作模式,例如堆栈创建、堆栈更新和更改集执行。生成变量的相应操作模式包括:

  • CREATE_UPDATE

  • CHANGE_SET_EXECUTE

  • CHANGE_SET_REPLACE

  • REPLACE_开_ FAILURE

有关这些操作模式的更多信息,请参阅AWS CloudFormation 部署操作参考。有关向您展示如何在使用 AWS CloudFormation 输出变量的管道中使用 AWS CloudFormation 部署操作创建管道的教程,请参阅教程:创建使用 AWS CloudFormation 部署操作中的变量的管道
#{DeployVariables.StackName}

CodeBuild 操作输出变量

CodeBuild 变量
变量键 变量语法示例

对于 CodeBuild 操作,变量由导出的环境变量生成的值生成。通过在构建规范中编辑您的 CodeBuild操作 CodePipeline 或将 CodeBuild 环境变量添加到构建规范来设置环境变量。

在 CodeBuild 构建规范中添加说明,以便在导出的变量部分下添加环境变量。请参阅 AWS CodeBuild 用户指南 中的 env/exported-variables

#{BuildVariables.EnvVar}

Lambda 操作输出变量

Lambda 变量
变量键 变量语法示例
Lambda 操作将生成请求outputVariables部分中包含的所有键值对作为变量。PutJobSuccessResult API

有关使用上游操作 (CodeCommit) 中的变量并生成输出变量的 Lambda 操作的教程,请参阅。教程:将变量与 Lambda 调用操作一起使用

#{TestVariables.testRunId}