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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 19:44:57