在AWS CodeBuild中,传递环境变量非常容易,如文档所示。如果我想获得事件触发器引用,我可以使用上下文相关的变量CODEBUILD_WEBHOOK_TRIGGER
:对于GitHubPUSH
事件,这将是分支名称,但对于PULL_REQUEST_CREATED
或PULL_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]筛选此值,因此构建规范中的命令将类似于:
- 确保CodeBuild项目的服务角色有权在管道上执行"ListPipelineExecutions">
- 在Buildspec"安装"阶段添加以下内容:
- apt-get-install-jq
- 在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/