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

Azure DevOps Pipeline:JSON字符串变量丢失双引号问题排查

通过Azure DevOps Runs API启动流水线时,JSON变量双引号丢失导致jq解析失败的问题

问题确认

确实存在这个问题。不少开发者通过Runs API触发流水线并传递JSON格式的变量时,都会遇到双引号丢失的情况,最终导致jq解析时报出"Invalid numeric literal"这类错误。

原因分析

核心原因在于Azure DevOps对流水线变量的解析和传递机制:

  • 当通过Runs API的请求体传递变量时,API的变量参数是键值对结构,若直接传入未转义的原始JSON字符串,其中的双引号会被Azure DevOps的参数解析器误判为变量值的边界符号,从而被自动剥离。
  • 此外,当流水线将变量注入到Bash任务的运行环境时,Bash本身会对未加引号的变量值进行分词和特殊字符处理,进一步破坏JSON的结构。

解决方法

1. 传递变量前对JSON字符串做转义处理

在调用Runs API构造请求体时,需要对JSON字符串中的双引号进行转义,同时将整个转义后的字符串作为变量值传入。例如:
原始JSON:

{"eventType":"push","repoName":"my-repo"}

转义后作为API变量值的内容:

"{\"eventType\":\"push\",\"repoName\":\"my-repo\"}"

这样Azure DevOps就能正确识别并保留所有双引号。

2. 在Bash任务中正确引用变量

在Bash@3任务里,必须用双引号包裹变量名,避免Bash解析时破坏字符串结构。示例代码:

# 正确的用法:用双引号包裹变量
echo "$WEBHOOK_JSON" | jq '.eventType'

# 错误的用法:直接引用变量会丢失双引号和结构
# echo $WEBHOOK_JSON | jq '.eventType'

3. 敏感JSON内容用安全变量存储

如果传递的JSON包含敏感信息,建议将转义后的JSON字符串存入Azure DevOps的安全变量(或变量组中的安全变量),再通过API引用该变量。安全变量的处理机制会更严谨,能避免转义丢失和数据泄露风险。

内容的提问来源于stack exchange,提问作者Marco Faustinelli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:45:57