【问题标题】:Getting Commit ID in CodePipeline在 CodePipeline 中获取提交 ID
【发布时间】:2021-08-06 22:16:59
【问题描述】:

我正在使用 CodePipelineCodeCommit。推送到master 分支会自动触发构建。在CodePipeline 控制台中,可以清楚地看到我正在接收提交ID,但我需要在构建环境中获取它,以便在构建时将它们作为标签添加到ECS 映像中。有没有办法进入构建环境。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • CODEBUILD_RESOLVED_SOURCE_VERSION 是提交 sha。
    • 我曾假设此变量仅在 codebuild 提取源本身时可用。然而,即使它的来源是 CODEPIPELINE,这个变量仍然有效。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      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 也显示在上面的示例中。

      【讨论】:

        【解决方案4】:

        这就是你要找的吗?

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-08-18
            • 1970-01-01
            • 1970-01-01
            • 2014-10-04
            • 2014-03-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多