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
相关产品推荐
相关产品推荐

