在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似乎忽略了一个用例,因此可能是一个错误。不幸的是,仅使用基本访问帐户就很难提交错误报告。
答案 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
我错了,列表网络钩子会为您提供所需的信息。我做了一些测试,它只为您提供为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]过滤此值,因此您的构建规范中的命令应类似于:
我希望这个答案会有所帮助。
参考:
[2] https://docs.aws.amazon.com/cli/latest/reference/codepipeline/list-pipeline-executions.html