You need to enable JavaScript to run this app. 旧版Jenkins流水线中如何用Python解析JSON并解决引号转义和变量赋值问题
优惠活动
大模型
产品
解决方案
定价
更多

旧版Jenkins流水线中如何用Python解析JSON并解决引号转义和变量赋值问题

报错原因
  1. 引号嵌套冲突:外层使用单引号包裹sh执行的命令内容,内部os.environ['REPOSITORY']处的单引号会被Shell识别为外层单引号的闭合标记,导致命令提前截断,触发匹配失败的EOF报错。
  2. 隐藏语法问题:原命令中echo metadataJson输出的是固定字符串metadataJson,而非你存储JSON数据的变量值,即使引号问题解决也无法得到正确解析结果。
正确执行语句

你可以使用以下两种不易出错的写法:

  • 外层用双引号包裹sh命令,内部双引号用反斜杠转义:
sh "echo \"${metadataJson}\" | python -c 'import sys,os,json; print(json.load(sys.stdin)[os.environ[\"REPOSITORY\"]])'"
  • 外层保留单引号,内部单引号使用'\''做Shell转义:
sh 'echo "${metadataJson}" | python -c "import sys,os,json; print(json.load(sys.stdin)[os.environ'\''REPOSITORY'\''])"'
将输出存入Jenkins变量

使用sh步骤的returnStdout: true参数即可捕获命令输出,配合trim()方法去掉末尾自动生成的换行符:

def parsedResult = sh(
  script: "echo \"${metadataJson}\" | python -c 'import sys,os,json; print(json.load(sys.stdin)[os.environ[\"REPOSITORY\"]])'",
  returnStdout: true
).trim()
额外注意事项

如果你的JSON内容包含换行、双引号等特殊字符,直接用echo传递可能会导致JSON格式损坏,建议先写入临时文件再解析:

// 写入临时文件避免特殊字符转义问题
writeFile file: 'metadata.json', text: metadataJson
def parsedResult = sh(
  script: 'python -c "import sys,os,json; print(json.load(open(\'metadata.json\'))[os.environ[\'REPOSITORY\']])"',
  returnStdout: true
).trim()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 19:15:00