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

Jenkins Pipeline执行报错WorkflowScript:37 expecting '}'问题求助

错误原因
  • Jenkins Pipeline基于Groovy语法,你报错的代码行使用单引号包裹字符串,Groovy的单引号字符串不支持${变量名}插值语法,解析器无法识别变量边界,把后续的JSON内容当成了非法字符,所以抛出了期望}却找到其他字符的语法错误。
  • 手动拼接字符串生成JSON结构非常容易出现转义问题,一旦变量中包含双引号、特殊符号,会直接破坏JSON格式,就算语法不报错后续调用接口也会失败。
修复方案

推荐使用Jenkins内置的writeJSON步骤构造JSON文件,完全避免手动拼接的语法和转义问题,修改后的代码如下:

script {
    attachments="<a href='https://xxxxx.xxxxx.net/wiki/pages/viewpageattachments.action?pageId=${idValue}'>ATTACHMENTS</a>"

    echo '=========================URL===================' + attachments
    // 构造Groovy Map对应JSON结构
    def reqBody = [
        id: idValue,
        type: "page",
        title: releaseVersion,
        space: [key: "~xxxxxx"],
        body: [
            storage: [
                value: attachments,
                representation: "storage"
            ]
        ],
        version: [number: 2]
    ]
    // 内置方法直接把Map转成合法JSON写入文件
    writeJSON file: 'update1.json', json: reqBody
    
    // 后续curl逻辑正常使用即可
    content = sh(script: "curl -u 'xxxxxxx@xxxxxx.xxx:xxxxxxxx' -X PUT -H 'Content-Type: application/json' -d '@update1.json' https://xxxxxx.xxxxxx.xxxxx/wiki/rest/api/content/${idValue}", returnStdout: true)
    sh "rm update1.json"
}

如果不想用writeJSON,临时修复可以把外层字符串改为支持插值的双引号,内部的双引号全部加反斜杠转义:

// 临时修复写法,仅作语法兼容,仍存在JSON转义风险
echo "{\"id\":\"${idValue}\",\"type\":\"page\",\"title\":\"${releaseVersion}\",\"space\":{\"key\":\"~xxxxxx\"},\"body\":{\"storage\":{\"value\":\"${attachments}\",\"representation\":\"storage\"}},\"version\":{\"number\":\"2\"}}" > update1.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:15:06