【问题标题】:How do you pass environment variables from the Source to the Build in AWS CodePipelines?如何将环境变量从源传递到 AWS CodePipelines 中的构建?
【发布时间】:2019-11-06 19:05:28
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案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 的“安装”阶段添加以下内容:
      • apt-get install 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/

    【讨论】:

    • 因此,对于我的示例,我将如何获取类似于 CODEBUILD_WEBHOOK_TRIGGER 在 CodeBuild 中提供的信息,例如 pr/1234
    • 这似乎更接近,但我仍然没有看到 pr/1234 AWS CodeBuild 会将其作为 CODEBUILD_WEBHOOK_TRIGGER 吗?
    猜你喜欢
    • 2019-02-10
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 2018-12-15
    • 2019-09-13
    • 1970-01-01
    • 2017-06-04
    • 2022-06-14
    相关资源
    最近更新 更多