You need to enable JavaScript to run this app. Jenkins中对JSON执行Base64编码出现双引号报错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins中对JSON执行Base64编码出现双引号报错如何解决

报错原因

直接把带双引号的JSON变量插值到sh步骤的脚本中时,Shell会把JSON内的双引号识别为自身的语法符号,最终触发语法解析错误。

更优实现方案

方案1:使用Jenkins内置Base64编码方法(推荐)

不需要调用系统Shell,跨平台兼容性更好,也完全避免引号冲突问题,代码如下:

stages {
    stage('Debug') {
        steps {
            script {
                outgoing_json = '''{
                    "spec": "1.0.0"
                }'''
                // 直接调用Groovy内置Base64编码能力,指定UTF-8字符集
                outgoing_encoded = outgoing_json.getBytes("UTF-8").encodeBase64().toString()
            }
            echo "outgoing_encoded: ${outgoing_encoded}"
        }
    }
}

这个方案的优势:

  • 无Shell调用开销,执行速度更快
  • 不受节点操作系统、Shell环境差异影响,Windows、Linux节点都能正常运行
  • 完全规避特殊字符、引号的转义问题

方案2:如果必须调用Shell实现

可以把Groovy变量作为环境变量传递给Shell,避免直接插值产生的语法冲突,修改后代码如下:

stages {
    stage('Debug') {
        steps {
            script {
                outgoing_json = '''{
                    "spec": "1.0.0"
                }'''
                // 先将Groovy变量注入Shell环境
                withEnv(["OUTGOING_JSON=${outgoing_json}"]) {
                    outgoing_encoded = sh(
                        returnStdout: true, 
                        script: 'echo "$OUTGOING_JSON" | base64'
                    ).trim() // trim去掉echo默认追加的换行符
                }
            }
            echo "outgoing_encoded: ${outgoing_encoded}"
        }
    }
}

注意这里sh的script参数用单引号包裹,避免Groovy提前对变量做插值,直接让Shell读取环境变量即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 09:36:09