Jenkinsfile内嵌Bash脚本中$class转义失败问题求助
问题解决:Groovy嵌套Bash脚本中
$class的转义处理 错误原因
在Jenkins Pipeline的Groovy脚本里,用三重双引号包裹Bash脚本时,Groovy会自动解析双引号内的$表达式。而class是Groovy的关键字,不能作为变量名,代码中的"${class}"会被Groovy误判为试图解析关键字变量,导致编译报错。
解决方法
要让Groovy把$class当成普通字符串传递给Bash,只需在$前添加反斜杠\进行转义,阻止Groovy的变量插值行为。
修改后的核心代码片段:
sh(script:"""#!/bin/bash curl -X POST https://${JENKINS_USERNAME}:${JENKINS_USER_TOKEN}@${JENKINS_URL}/credentials/store/system/domain/_/createCredentials \ --data-urlencode 'json={ "credentials": { "scope": "GLOBAL", "id": "identification", "username": "manu", "password": "bar", "description": "linda1", "\$class": "com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl" } }' echo "Creds link is ${credsLink}" """)
补充说明
- Groovy的双引号字符串支持变量插值,单引号字符串则不会解析任何
$表达式。如果你的Bash脚本不需要Groovy变量插值,可以直接改用三重单引号(''' ''')包裹整个脚本,这样$class会被原样保留,但这种方式无法使用${JENKINS_USERNAME}这类Groovy变量。 - 转义后的
"\$class"最终会被传递给Bash,生成的JSON中会正确保留"$class"字段,符合Jenkins API的要求。
内容的提问来源于stack exchange,提问作者AhmFM
相关产品推荐
相关产品推荐

