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

Jenkinsfile中如何将Groovy变量传递给Python程序

Groovy变量传递给Python的正确实现方案

问题根因

你的代码核心问题是混淆了Groovy变量和Shell变量的作用域:

你在Shell脚本内定义的test="a,b,c"是Shell层的变量,Groovy解析三重双引号"""时会优先执行${test}插值,而Groovy上下文没有定义该变量,因此会替换为空值传入Python,最终Python拿到的就是空值。

推荐实现方式(最优)

优先把需要传递的变量放在Groovy侧定义,彻底避免跨层转义问题:

stage('Run python code') {
    steps {
        script {
            // 提前在Groovy层定义所有需要传入Python的变量
            def test = "a,b,c"
            // 构造Python代码,Groovy变量直接插值,字符串类型需要额外包引号供Python识别
            def pythonScript = """
import json
test_val = "${test}"
split_pub = ${data}
json_split_pub = json.dumps(split_pub)
json_split_pub = json_split_pub.replace("rename_value", test_val)
json_split_pub = json_split_pub.replace("name", "${params.app}")
// 最后输出结果供sh捕获
print(json_split_pub)
            """.stripIndent()
            // 执行Python命令
            ACTIVE_CONNECTORS = sh(
                script: "python -c '${pythonScript}'",
                returnStdout: true
            ).trim()
        }
    }
}

特殊场景:变量必须在Shell层生成

如果你的变量只能在Shell脚本内生成,需要转义$符号,禁止Groovy提前插值,让Shell层完成变量解析:

stage('Run python code') {
    steps {
        script {
            ACTIVE_CONNECTORS = sh(script: """
                # Shell层生成变量
                test="a,b,c"
                echo "**********test value*********"
                echo \$test
                # Python代码用双引号包裹,Shell层的\$test加转义,同时给Python侧包单引号
                python -c "
import json
test_val = '\$test'
split_pub = ${data}
json_split_pub = json.dumps(split_pub)
json_split_pub = json_split_pub.replace('rename_value', test_val)
json_split_pub = json_split_pub.replace('name', '${params.app}')
print(json_split_pub)
                "
            """.stripIndent(), returnStdout: true).trim()
        }
    }
}

关键注意事项

  • Groovy三重双引号"""内的${var}默认触发Groovy层插值,要留给Shell解析的变量必须写成\${var}转义$符号
  • 字符串类型变量传给Python时必须额外包引号,否则Python会将字符串内容识别为变量名抛出未定义错误
  • 变量包含引号、换行等特殊字符时,建议先在Groovy侧做Base64编码后再传递,Python侧解码即可完全避免转义冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:27:00