在AWS代码构建步骤中获取源回购提交哈希

时间:2019-11-27 15:38:43

标签: amazon-web-services aws-codebuild

是否可以从AWS CodeBuild构建步骤中获取提交哈希?我尝试使用CODEBUILD_RESOLVED_SOURCE_VERSION,但它返回的是IaC存储库的“提交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。

3 个答案:

答案 0 :(得分:2)

如果您使用的是CodePipeline,则可以使用access namespaced variables from previous stages来替代使用CLI进行查询。

  1. 编辑要从中公开变量的管道阶段。给namespace赋一个值。这样您就可以从该阶段开始引用exposed variables。对于此示例,假设我有一个名为Source的阶段,并将我的命名空间命名为GitVariables。如果您使用的是GitHub,GitLab,CodeCommit或源,则变量看起来非常一致。 Set namespace for CodePipeline action
  2. 编辑调用CodeBuild的管道阶段,以添加一个环境变量,该环境变量引用步骤1中公开的命名空间变量。例如,如果要向CodeBuild公开一个名为GIT_COMMIT_ID的环境变量,则可以使用以下代码: CodePipeline - set environment variable

当管道运行时,环境变量将被添加到名为GIT_COMMIT_ID的CodeBuild执行中。

答案 1 :(得分:0)

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

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”更改为对您的项目有效的任何值。

答案 2 :(得分:0)

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

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

  2. 在Buildspec“安装”阶段添加以下内容:

    didRegisterForRemoteNotificationsWithDeviceToken
  3. 在Buildspec中添加以下内容,以获取提交消息:

    apt-get install jq