在CodePipeline中获取提交ID

时间:2017-11-13 12:51:48

标签: amazon-web-services continuous-integration continuous-deployment aws-codepipeline aws-codebuild

我正在使用CodePipeline CodeCommit。通过推送到master分支自动触发构建。在CodePipeline控制台中,我可以清楚地看到我正在接收提交ID,但我需要在构建环境中获取它,因此我可以在构建它时将它们作为标记添加到ECS图像中。有没有办法进入构建环境。 This is the id i am looking for

5 个答案:

答案 0 :(得分:3)

这是你要找的吗?

http://docs.aws.amazon.com/codepipeline/latest/userguide/monitoring-source-revisions-view.html#monitoring-source-revisions-view-cli

大多数(如果不是全部)语言SDK也内置了此API。

答案 1 :(得分:3)

您可以使用CODEBUILD_RESOLVED_SOURCE_VERSION环境变量来检索构建时CodePipeline中显示的提交哈希。

答案 2 :(得分:2)

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。

答案 3 :(得分:0)

添加了一个答案,该答案解释了如何在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}作为环境变量,则无法正确解析。

答案 4 :(得分:0)

除了@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