You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub触发Azure DevOps Pipeline时Webhook JSON负载为空问题

问题描述

问题简介

尝试配置GitHub Webhook触发Azure DevOps(ADO)Pipeline,目标是从Webhook请求正文中读取参数传入流水线,但ADO流水线始终无法获取请求正文携带的参数信息,已参照官方文档完成ADO侧传入Webhook配置。

现象说明

  • GitHub侧出站Webhook配置完成,所有投递到ADO的请求均返回成功状态,投递负载可见对应截图:
    GitHub Webhook投递记录截图
  • 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的解析规则不匹配,按以下步骤修复即可:

  1. 打开GitHub仓库对应Webhook的编辑页面
  2. 找到Content type配置项,将默认选中的application/x-www-form-urlencoded切换为application/json
  3. 保存配置后重新触发事件,即可正常读取请求体中的所有参数

原理与排障补充:

  • 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:39:10