在 CodePipeline 中获取提交 ID
Getting Commit ID in CodePipeline
我正在使用 CodePipeline
和 CodeCommit
。推送到 master
分支会自动触发构建。在 CodePipeline
控制台中,可以清楚地看到我正在接收提交 ID,但我需要在构建环境中获取它,以便在构建它时可以将它们作为标签添加到 ECS 映像中。有没有办法进入构建环境。
这是您要找的吗?
大多数(如果不是全部)语言 SDK 也内置了这个 API。
您可以使用 CODEBUILD_RESOLVED_SOURCE_VERSION
环境变量来检索在构建时显示在 CodePipeline 中的提交哈希。
CodePipeline 现在还允许您使用在执行时生成的变量来配置您的管道。在此示例中,您的 CodeCommit 操作将生成一个名为 CommitId 的变量,您可以通过 CodeBuild 操作配置将其传递到 CodeBuild 环境变量中。
以下是该功能的概念性概述:https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-variables.html
有关将提交 ID 传递到构建操作的示例,您可以访问此处:
https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-variables.html
还值得考虑使用 CodePipeline 执行 ID 而不是提交 ID 标记图像,这样可以防止将来使用相同提交的构建覆盖图像。使用 CodePipeline 执行 ID 也显示在上面的示例中。
添加一个解释如何在 CloudFormation 中实现此目的的答案,因为我花了一段时间才弄明白。您需要将阶段定义为:
Name: MyStageName
Actions:
-
Name: StageName
InputArtifacts:
- Name: InputArtifact
ActionTypeId:
Category: Build
Owner: AWS
Version: '1'
Provider: CodeBuild
OutputArtifacts:
- Name: OutputArtifact
Configuration:
ProjectName: !Ref MyBuildProject
EnvironmentVariables:
'[{"name":"COMMIT_ID","value":"#{SourceVariables.CommitId}","type":"PLAINTEXT"}]'
在你的动作中你需要有这种语法。请注意,CodePipeline 阶段的 EnvironmentVariables
属性 与 AWS::CodeBuild::Project
属性 不同。如果你要在那里添加 #{SourceVariables.CommitId}
作为环境变量,它不会被正确解析。
除了@Bar 的回答:仅添加 EnvironmentVariables
是不够的,您还需要设置 Namespace
。
例如:
pipeBackEnd:
Type: AWS::CodePipeline::Pipeline
Properties:
...
Stages:
- Name: GitSource
Actions:
- Name: CodeSource
ActionTypeId:
Category: Source
...
Configuration: (...)
Namespace: SourceVariables # <<< === HERE, in Source
- Name: Deploy
Actions:
- Name: BackEnd-Deploy
ActionTypeId:
Category: Build
Provider: CodeBuild (...)
Configuration:
ProjectName: !Ref CodeBuildBackEnd
EnvironmentVariables: '[{"name":"BranchName","value":"#{SourceVariables.BranchName}","type":"PLAINTEXT"},{"name":"CommitMessage","value":"#{SourceVariables.CommitMessage}","type":"PLAINTEXT"}]'
此外,它可能有用:list of CodePipeline variables
我正在使用 CodePipeline
和 CodeCommit
。推送到 master
分支会自动触发构建。在 CodePipeline
控制台中,可以清楚地看到我正在接收提交 ID,但我需要在构建环境中获取它,以便在构建它时可以将它们作为标签添加到 ECS 映像中。有没有办法进入构建环境。
这是您要找的吗?
大多数(如果不是全部)语言 SDK 也内置了这个 API。
您可以使用 CODEBUILD_RESOLVED_SOURCE_VERSION
环境变量来检索在构建时显示在 CodePipeline 中的提交哈希。
CodePipeline 现在还允许您使用在执行时生成的变量来配置您的管道。在此示例中,您的 CodeCommit 操作将生成一个名为 CommitId 的变量,您可以通过 CodeBuild 操作配置将其传递到 CodeBuild 环境变量中。
以下是该功能的概念性概述:https://docs.aws.amazon.com/codepipeline/latest/userguide/reference-variables.html
有关将提交 ID 传递到构建操作的示例,您可以访问此处: https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-variables.html
还值得考虑使用 CodePipeline 执行 ID 而不是提交 ID 标记图像,这样可以防止将来使用相同提交的构建覆盖图像。使用 CodePipeline 执行 ID 也显示在上面的示例中。
添加一个解释如何在 CloudFormation 中实现此目的的答案,因为我花了一段时间才弄明白。您需要将阶段定义为:
Name: MyStageName
Actions:
-
Name: StageName
InputArtifacts:
- Name: InputArtifact
ActionTypeId:
Category: Build
Owner: AWS
Version: '1'
Provider: CodeBuild
OutputArtifacts:
- Name: OutputArtifact
Configuration:
ProjectName: !Ref MyBuildProject
EnvironmentVariables:
'[{"name":"COMMIT_ID","value":"#{SourceVariables.CommitId}","type":"PLAINTEXT"}]'
在你的动作中你需要有这种语法。请注意,CodePipeline 阶段的 EnvironmentVariables
属性 与 AWS::CodeBuild::Project
属性 不同。如果你要在那里添加 #{SourceVariables.CommitId}
作为环境变量,它不会被正确解析。
除了@Bar 的回答:仅添加 EnvironmentVariables
是不够的,您还需要设置 Namespace
。
例如:
pipeBackEnd:
Type: AWS::CodePipeline::Pipeline
Properties:
...
Stages:
- Name: GitSource
Actions:
- Name: CodeSource
ActionTypeId:
Category: Source
...
Configuration: (...)
Namespace: SourceVariables # <<< === HERE, in Source
- Name: Deploy
Actions:
- Name: BackEnd-Deploy
ActionTypeId:
Category: Build
Provider: CodeBuild (...)
Configuration:
ProjectName: !Ref CodeBuildBackEnd
EnvironmentVariables: '[{"name":"BranchName","value":"#{SourceVariables.BranchName}","type":"PLAINTEXT"},{"name":"CommitMessage","value":"#{SourceVariables.CommitMessage}","type":"PLAINTEXT"}]'
此外,它可能有用:list of CodePipeline variables