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

Azure Pipeline运行时变量生成JSON Patch值为空的问题排查

解决Azure Pipeline中生成Ingress Patch JSON时变量为空的问题

问题根源

你当前脚本里的echo命令用单引号包裹了整个JSON字符串,在Bash环境中,单引号内的变量不会被Shell解析替换,所以$sanitized_namespace直接被当作纯字符串输出,导致生成的JSON里value字段为空。

修正后的脚本

下面是两种可行的修正方案,任选其一即可:

- script: |
    sanitized_namespace="$(echo "$(Build.SourceBranchName)" | sed -r 's/[^a-z0-9-]//g')"
    echo "##vso[task.setvariable variable=sanitized_namespace]$sanitized_namespace"   
    # 方案1:双引号包裹整体,转义内部JSON双引号
    echo "[{\"op\": \"replace\", \"path\": \"/spec/rules/0/host\", \"value\": \"$sanitized_namespace.somedomain.com\"}]" > host-patch.json
    # 方案2:单引号+变量拼接,确保变量在单引号外被解析
    # echo '[{\"op\": \"replace\", \"path\": \"/spec/rules/0/host\", \"value\": "'"$sanitized_namespace.somedomain.com"'"}]' > host-patch.json
    cat ./host-patch.json   
  name: namespace   
  displayName: 'Remove invalid characters for test namespace'

方案说明

  • 方案1:用双引号包裹整个JSON字符串,同时对JSON内部的双引号添加反斜杠\转义。这种方式下Shell会解析双引号内的$sanitized_namespace变量,同时保证最终生成的JSON格式合法。
  • 方案2:将字符串拆分为多段,用单引号包裹静态JSON内容,变量部分放在单引号外部,通过引号拼接实现变量替换。这种方式避免了大量转义,可读性更强。

预期输出

执行脚本后,host-patch.json会生成符合要求的内容:

[{"op": "replace", "path": "/spec/rules/0/host", "value": "your-sanitized-namespace.somedomain.com"}]

内容的提问来源于stack exchange,提问作者Trevor Automation

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:16:03