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

如何在Azure DevOps流水线中向Ruby脚本传递JSON字符串参数?

解决Ruby Rake任务接收JSON参数的引号转义问题

问题根源

你遇到的JSON::ParserError是因为命令行中引号转义错误,导致传递给Ruby的JSON字符串被截断或格式损坏。bash会优先解析外层引号和转义字符,使得实际传入Rake任务的JSON不完整。

解决方案

1. 本地终端调用(推荐用环境变量避免转义)

方法一:通过环境变量传递JSON(最可靠)

先将JSON赋值给环境变量,再执行Rake任务:

export JSON_DATA='{"name": "John", "age": 10, "city": "New York"}'
rake test:getConfigs

修改Ruby脚本,从环境变量读取JSON:

require 'json'

namespace :test do
  task :getConfigs do
    json_string = ENV['JSON_DATA']
    configs = JSON.parse(json_string)
    val1 = configs['name']
    val2 = configs['age']
    puts "#{val1} is #{val2} years old."
  end
end

方法二:正确转义引号的命令行调用

如果坚持用参数传递,需要用单引号包裹整个Rake任务参数,避免bash解析内部双引号:

rake 'test:getConfigs["{\"name\": \"John\", \"age\": 10, \"city\": \"New York\"}"]'

或者用单引号包裹JSON字符串,外层用双引号:

rake "test:getConfigs['{\"name\": \"John\", \"age\": 10, \"city\": \"New York\"}']"

2. Azure DevOps YAML配置(推荐环境变量方案)

方法一:环境变量传递(最稳定)

修改YAML,将流水线变量注入环境变量后执行Rake:

- script: |
    export JSON_DATA='$(json_data)'
    rake test:getConfigs

Ruby脚本同样使用环境变量读取(同本地方法一的脚本)。

方法二:参数传递的正确写法

如果必须用参数,需要确保YAML中的引号嵌套正确,让Azure DevOps和bash都能正确解析变量和JSON:

- script: rake "test:getConfigs['$(json_data)']"

注意:如果你的JSON字符串包含单引号,需要额外转义,但示例JSON中没有,此写法可用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:42:36