我试图使用系统Groovy脚本为构建步骤这样来操纵我们的工作之一,一些变量:总是解析为null
//Current Thread run
def thr = Thread.currentThread()
def current_build = thr?.executable
//Get upstream job
def parent_build = current_build.getCause(hudson.model.Cause.UpstreamCause).getUpstreamRun()
//Upstream job build vars
def parentMap = parent_build.getBuildVariables()
println "ParentbuildMap.get(OSType) = " + parentMap.get("OSType")
println "ParentbuildMap.get(DBType) = " + parentMap.get("DBType")
//TODO insert SQL script here to populate OS_MACHINE and DB_MACHINE
def OS_MACHINE = parentMap.get("OSType") + ": ##Machine_Name##"
def DB_MACHINE = parentMap.get("DBType") + ": **Machine_Name**"
现在,当我尝试打印它们的方式,它输出值正常:
println "OS_MACHINE = " + OS_MACHINE
println "DB_MACHINE = " + DB_MACHINE
但是,当我尝试以下方法,它只是打印空:
println build.buildVariableResolver.resolve(OS_MACHINE)
即使当我尝试这个它打印空:
def thr = Thread.currentThread()
def current_build = thr?.executable
def buildMap = build.getBuildVariables()
println "buildMap.get(OS_MACHINE) = " + buildMap.get("OS_MACHINE")
println "buildMap.get(DB_MACHINE) = " + buildMap.get("DB_MACHINE")
而且还当我试试这个:
def params = [
new StringParameterValue('JOB_OS_MACHINE', OS_MACHINE),
new StringParameterValue('JOB_DB_MACHINE', DB_MACHINE),
]
build.addAction(new ParametersAction(params))
println "buildMap.get(JOB_OS_MACHINE) = " + buildMap.get("JOB_OS_MACHINE")
println "buildMap.get(JOB_DB_MACHINE) = " + buildMap.get("JOB_DB_MACHINE")
在这种情况下,如果我用一个简单的字符串替换OS_MACHINE和DB_MACHINE忽略了最低甚至工作 https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+System+Groovy+script
import hudson.model.*
// get current thread/Executor
def thr = Thread.currentThread()
// get current build
def build = thr?.executable
// ... or if you want the parameter by name ...
def hardcoded_param = "FOOBAR"
def resolver = build.buildVariableResolver
def hardcoded_param_value = resolver.resolve(hardcoded_param)
println "param ${hardcoded_param} value : ${hardcoded_param_value}"
:
现在我已经恢复了运行在一个新的工作很简单的脚本,该脚本是取自
这也打印空。
对于我的生活,我无法理解这里出了什么问题......任何人都可以帮助我吗?
你可以尝试没有'def'关键字,所以变量进入绑定? –
它引发了一个NPE在groovy.lang.Binding.setVariable – danf
我不太了解Groovy,但任何机会这些是环境变量,而不是构建变量,因此无法访问“buildVariableResolver”?我用'高清relnum = manager.build.getEnvVars() “RELNUM”]'和'调用println “$ {} relnum”' – Slav