在AWS代码构建步骤中获取源存储库提交哈希

问题描述 投票:0回答:4

有没有办法从 AWS CodeBuild 构建步骤中获取提交哈希?我尝试使用 CODEBUILD_RESOLVED_SOURCE_VERSION 但它返回 IaC 存储库的提交 ID,而不是源存储库的提交 ID。

我知道如果你有执行 ID,有一种方法可以获取它:

aws codepipeline get-pipeline-execution --pipeline-name my-pipeline --pipeline-execution-id e550c757-434a-4c94-8e2e-5122ca14d861

但是我也没有 pipeline-execution-id。我只有 CODEBUILD_BUILD_ID。

amazon-web-services aws-codebuild
4个回答
4
投票

如果您使用 CodePipeline,使用 CLI 查询的替代方法是访问之前阶段的命名空间变量

  1. 编辑您想要从中公开变量的管道阶段。给
    namespace
    一个值。这将允许您从该阶段引用暴露的变量。对于此示例,假设我有一个名为 Source 的阶段,并将我的命名空间命名为
    GitVariables
    。如果您使用 GitHub、GitLab、CodeCommit 或源,变量看起来非常一致。
  2. 编辑调用 CodeBuild 的管道阶段以添加引用步骤 #1 中公开的命名空间变量的环境变量。例如,如果我想向 CodeBuild 公开一个名为 GIT_COMMIT_ID 的环境变量,我将使用以下内容:

管道运行时,将向 CodeBuild 执行添加一个名为

GIT_COMMIT_ID
的环境变量。


3
投票

找到了适合我的解决方案:

PIPELINE_EXECUTION_ID=$(aws codepipeline get-pipeline-state --region ${AWS_REGION} --name my-pipeline --query 'stageStates[?actionStates[?latestExecution.externalExecutionId==`'${CODEBUILD_BUILD_ID}'`]].latestExecution.pipelineExecutionId' --output text)
SOURCE_REPO_COMMIT_HASH=$(aws codepipeline get-pipeline-execution --pipeline-name my-pipeline --pipeline-execution-id $PIPELINE_EXECUTION_ID --query "pipelineExecution.artifactRevisions[?name=='src'].revisionId" --output text)

您可能需要将

artifactRevisions[?name=='src']
中的“src”更改为对您的项目有效的任何值。

摘自@IfTrue 下面的评论:

其他读者的旁注:sashoalm 提到可能需要更改的部分('src')是 CodePipeline 中“阶段”内“操作组”中输出工件的名称,它在其中监视 CodeCommit 更改。 AWS 文档的这一部分还解释了查询背后的魔力:docs.aws.amazon.com/cli/latest/reference/codepipeline/… – IfTrue


2
投票

当 CodeBuild 作为 CodePipeline 阶段的一部分运行并通过 Webhook 调用源 GitHub/CodeCommit 操作时,要在 CodeBuild 中检索 Git 提交消息:

  1. 确保您的 CodeBuild 项目的服务角色有权在管道上执行“ListPipelineExecutions”

  2. 在构建规范“安装”阶段添加以下内容:

    apt-get install jq
    
  3. 在 Buildspec 中需要获取提交消息的位置添加以下内容:

    COMMIT_MSG=$(aws codepipeline list-pipeline-executions  --pipeline-name <Pipeline_Name> --max-items 1 | jq -r '.pipelineExecutionSummaries[0].sourceRevisions[0].revisionSummary')
    
    echo $COMMIT_MSG
    

0
投票

如果您在 AWS CodePipeline 中使用 AWS CodeBuild(例如,您已设置一个网络书来触发来自 GitHub 的独立 CodeBuild 项目):

完整的提交哈希 ID 会传递到 CodeBuild 执行,并可通过环境变量访问

CODEBUILD_RESOLVED_SOURCE_VERSION

可用于此类设置的其他有用的环境变量包括:

  • CODEBUILD_SOURCE_VERSION
    GitHub PR 编号(例如“pr/397”)

  • CODEBUILD_WEBHOOK_EVENT
    - 特定的网络书事件类型,例如 PULL_REQUEST_CREATEDPULL_REQUEST_UPDATED 参考:https://docs.aws.amazon.com/codebuild/latest/userguide/github-webhook.html

  • CODEBUILD_WEBHOOK_HEAD_REF
    - 与 PR 关联的分支

  • CODEBUILD_WEBHOOK_TRIGGER
    - GitHub PR 编号(例如“pr/397”) 似乎与
    CODEBUILD_SOURCE_VERSION

    重复
© www.soinside.com 2019 - 2024. All rights reserved.