GitHub触发Azure DevOps Pipeline时Webhook JSON负载为空问题
问题描述
问题简介
尝试配置GitHub Webhook触发Azure DevOps(ADO)Pipeline,目标是从Webhook请求正文中读取参数传入流水线,但ADO流水线始终无法获取请求正文携带的参数信息,已参照官方文档完成ADO侧传入Webhook配置。
现象说明
- GitHub侧出站Webhook配置完成,所有投递到ADO的请求均返回成功状态,投递负载可见对应截图:

- ADO侧使用最简YAML配置测试,配置如下:
resources: webhooks: - webhook: CleanUpPREnv # Webhook别名 connection: CleanUpPREnvWebhookConnection # 传入Webhook服务连接 steps: - task: PowerShell@2 inputs: targetType: 'inline' # JSON负载数据通过 ${{ parameters.<Webhook别名>.<JSON路径> }} 格式读取 script: | Write-Host ${{ parameters.CleanUpPREnv.before}} Write-Host ${{ parameters.CleanUpPREnv.repository.full_name}} Write-Host ${{ parameters.CleanUpPREnv.repository}}
- 流水线触发后,上述脚本输出的三个参数值均为空字符串,运行结果截图:

- 对照测试:使用Postman发送相同结构的JSON请求可以正常触发流水线并读取到负载数据,基础配置逻辑验证生效,仅GitHub与ADO对接时无法传递参数,问题无法定位。
解决方案
根因是GitHub Webhook默认请求Content-Type与Azure DevOps传入Webhook的解析规则不匹配,按以下步骤修复即可:
- 打开GitHub仓库对应Webhook的编辑页面
- 找到
Content type配置项,将默认选中的application/x-www-form-urlencoded切换为application/json - 保存配置后重新触发事件,即可正常读取请求体中的所有参数
原理与排障补充:
- GitHub使用
application/x-www-form-urlencoded格式提交时,会将完整JSON负载嵌套在表单字段payload中,ADO的Webhook资源不会主动解析该字段下的嵌套JSON,因此所有通过模板表达式读取的参数都会返回空值;同时请求本身会被ADO正常接收返回200状态码,因此GitHub侧会显示投递成功,造成“配置正常但无数据”的假象- Postman测试时默认以
application/json格式提交原始JSON结构,完全符合ADO的解析要求,因此对照测试可以正常读取参数- 若修改Content-Type后问题仍存在,逐一检查以下配置:
- GitHub Webhook中配置的Secret值,必须与ADO侧传入Webhook服务连接内配置的Verification Key完全一致
- Webhook资源上未配置错误的过滤规则,规则匹配失败时也会出现流水线触发但参数为空的问题
- 确认GitHub投递的请求体未被中间网关、WAF篡改结构
内容的提问来源于stack exchange,提问作者spencerstewart
相关产品推荐
相关产品推荐

