如何将Python变量传递至Groovy(Jenkins)脚本?
实现Python变量传递给Jenkins Groovy脚本的几种方法
方法1:通过标准输出(stdout)传递
让Python脚本将变量内容打印到标准输出,Groovy脚本执行Python命令并捕获输出内容,适合传递复杂结构的变量。
Python脚本示例(var_provider.py)
# 定义要传递的变量 my_var = "Jenkins Build v1.0.0" env_config = {"env": "prod", "timeout": 300} # 将变量转为JSON字符串输出,保证结构完整性 import json print(json.dumps({"my_var": my_var, "env_config": env_config}))
Groovy脚本示例(Jenkinsfile)
// 执行Python脚本并捕获标准输出 def pythonOutput = sh(script: "python3 var_provider.py", returnStdout: true).trim() // 解析JSON格式的输出内容 def parsedVars = new groovy.json.JsonSlurper().parseText(pythonOutput) // 使用传递过来的变量 echo "获取到的版本变量: ${parsedVars.my_var}" echo "生产环境超时配置: ${parsedVars.env_config.timeout}"
方法2:通过临时文件传递
Python脚本将变量写入临时文件,Groovy脚本读取该文件内容,适合需要持久化传递的场景。
Python脚本示例
import json vars_to_pass = {"build_number": 123, "artifact_path": "/dist/app.zip"} # 将变量写入临时JSON文件 with open("vars_temp.json", "w") as f: json.dump(vars_to_pass, f)
Groovy脚本示例
// 读取临时文件内容 def tempFile = new File("vars_temp.json") def parsedVars = new groovy.json.JsonSlurper().parse(tempFile) // 使用传递的变量 echo "当前构建编号: ${parsedVars.build_number}" echo "制品存放路径: ${parsedVars.artifact_path}" // 可选:清理临时文件 tempFile.delete()
方法3:通过环境变量传递
Python脚本输出shell可执行的环境变量设置语句,Groovy脚本通过shell执行并读取环境变量,适合简单字符串类型变量。
Python脚本示例(set_env.py)
# 输出shell环境变量设置语句 print(f"export MY_VAR='Hello from Python'") print(f"export BUILD_VERSION='2.3.4'")
Groovy脚本示例
// 执行Python脚本输出的shell命令,将环境变量写入临时文件 sh(script: "eval \$(python3 set_env.py) && echo \$MY_VAR > var_temp.txt") // 读取环境变量内容 def myVar = readFile("var_temp.txt").trim() echo "环境变量传递的内容: ${myVar}"
注意:复杂结构变量不建议用环境变量传递,容易出现格式解析问题,优先选择JSON格式的标准输出或临时文件方式。
内容的提问来源于stack exchange,提问作者LM10
相关产品推荐
相关产品推荐

