如何将环境变量从源传递到AWS CodePipelines中的Build?

时间:2019-10-29 17:12:50

标签: amazon-web-services webhooks aws-codepipeline aws-codebuild github-webhook

在AWS CodeBuild中,传递环境变量非常容易,如the documentation所示。如果要获取事件触发器引用,可以使用上下文敏感的变量CODEBUILD_WEBHOOK_TRIGGER:对于GitHub PUSH事件,这将是分支名称,而对于{{1 }}或PULL_REQUEST_CREATED事件,这将是PR号。

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

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

1 个答案:

答案 0 :(得分: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:

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

我能得到的最接近的方法是在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“安装”阶段添加以下内容:
    • apt-get install jq
  3. 在Buildspec中添加以下内容,以获取提交消息:
    • COMMIT_MSG = $(aws代码管道列表-管道执行-管道名称-最大项目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/