如何将环境变量从Source传递到Build in AWS CodePipelines



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

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

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

你是对的。在这种特殊情况下,CodePipeline是进行start-build API调用以启动构建的程序。CODEBUILD_WEBHOOK_TRIGGER是特定于CODEBUILD的,只有在WEBHOOK调用CODEBUILD时才会设置。

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

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

编辑1:

我错了,列出webhook会给你所需的信息。我做了一些测试,它只提供了为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-editsnnUpdate Code.py",
"revisionUrl": "https://github.com/shariqmus/hello-world/commit/4d3bcb17e4a71e3d4bf15215954172639716c326"
}
]
}
],
"NextToken": "eyJuZXh0VG9rZW4iOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAxfQ=="
}

"修订摘要"包含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'.ppipelineExecutionSummaries[0].sourceRevisions[0].revisionSummary'(
    • echo$COMIT_MSG

我希望这个答案有帮助。

参考:

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

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

相关内容

  • 没有找到相关文章

最新更新