1

在 AWS CodeBuild 中,传递环境变量非常容易,如文档中所示。如果我想获取事件触发器引用,我可以使用变量CODEBUILD_WEBHOOK_TRIGGER,它是上下文相关的:对于 GitHubPUSH事件,这将是分支名称,但对于PULL_REQUEST_CREATEDorPULL_REQUEST_UPDATED事件,这将是 PR 编号。

所以问题是这样的:使用 AWS CodePipeline 时,CodeBuild 项目的“源”是 CodePipeline 而不是 GitHub webhook。突然,CODEBUILD_WEBHOOK_TRIGGER是一个空字符串,似乎对触发 CodePipeline 的原始 GitHub webhook 事件一无所知。

如何使用由 CodePipeline 触发的 CodeBuild 项目访问这些环境变量?这似乎是 AWS 忽略的一个用例,因此它可能是一个错误。不幸的是,仅使用基本访问帐户很难提交错误报告。

4

1 回答 1

1

你是对的。在这种特殊情况下,CodePipeline 是调用 start-build API 来开始构建的人。CODEBUILD_WEBHOOK_TRIGGER 是 CodeBuild 特定的,只有在 webhook 调用 CodeBuild 时才会设置。

如果您想知道触发管道的 webhook,您可以使用 list-webhooks [1] API 调用和基于管道名称的附加过滤器来获取 webhook 详细信息。

参考:[1] https://docs.aws.amazon.com/cli/latest/reference/codepipeline/list-webhooks.html

编辑1:

我错了 list-webhooks 会为您提供所需的信息。我做了一些测试,它只为您提供了为 Source 操作定义的 webhook 列表。

我能得到的最接近的是在您的 CodeBuild 构建规范中使用“list-pipeline-executions”[2] CLI 调用。

如果您运行此命令:

$ aws codepipeline list-pipeline-executions --pipeline-name <Pipeline_Name> --region us-east-1 --max-items 1

它会给你类似这样的输出:

{
    "pipelineExecutionSummaries": [
        {
            "pipelineExecutionId": "ccdd87a0-41e4-4489-9332-0720dc526b37",
            "status": "InProgress",
            "startTime": 1573037463.245,
            "lastUpdateTime": 1573037463.245,
            "sourceRevisions": [
                {
                    "actionName": "Source",
                    "revisionId": "4d3bcb17e4a71e3d4bf15215954172639716c326",
                    "revisionSummary": "Merge pull request #3 from shariqmus/readme-edits\n\nUpdate Code.py",
                    "revisionUrl": "https://github.com/shariqmus/hello-world/commit/4d3bcb17e4a71e3d4bf15215954172639716c326"
                }
            ]
        }
    ],
    "NextToken": "eyJuZXh0VG9rZW4iOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAxfQ=="
}

'revisionSummary' 包含 PR 详细信息。您可以使用 'jq' [3] 过滤此值,因此构建规范中的命令将类似于:

  1. 确保您的 CodeBuild 项目的服务角色有权在管道上执行“ListPipelineExecutions”
  2. 在 Buildspec 'Install' 阶段添加以下内容:
    • apt-get 安装 jq
  3. 在需要获取提交消息的 Buildspec 中添加以下内容:
    • COMMIT_MSG=$(aws codepipeline list-pipeline-executions --pipeline-name --max-items 1 | jq -r '.pipelineExecutionSummaries[0].sourceRevisions[0].revisionSummary')
    • 回声 $COMMIT_MSG

我希望这个答案有帮助。

参考:

[2] https://docs.aws.amazon.com/cli/latest/reference/codepipeline/list-pipeline-executions.html

[3] https://stedolan.github.io/jq/

于 2019-11-01T07:13:14.277 回答