gpt4 book ai didi

groovy - groovy 脚本中定义的变量始终解析为 null

转载 作者:行者123 更新时间:2023-12-02 04:45:02 26 4
gpt4 key购买 nike

我正在尝试使用系统 groovy 脚本作为构建步骤来操作我们的一项作业中的一些变量:

//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

但是当我尝试以下操作时,它只打印 null:

println build.buildVariableResolver.resolve(OS_MACHINE)

即使我尝试这样做,它也会打印 null:

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}"

这也打印 null。

对于我的生活,我无法理解这里出了什么问题......有人可以帮助我吗?

最佳答案

一个solution可以在 Jenkins 用户列表存档中找到。创建新的 StringParameterValue 对象并将它们添加到构建的ParametersAction 中,您的方向是正确的。

上面链接的解决方案并不完全按照为我编写的方式工作(可能是因为我使用的是旧版本的 Jenkins 1.466.2)。 createUpdated 方法无法识别,因此我将其复制到我的代码中,我将在下面发布该代码。

// sets build parameters based on the given map
// only supports StringParameterValue
def setBuildParameters(parmMap) {
def npl = new ArrayList<StringParameterValue>()
for (k in parmMap.keySet()) {
npl.add(new StringParameterValue(k, parmMap.get(k)))
}
def newPa = null
def oldPa = build.getAction(ParametersAction.class)

if (oldPa != null) {
for (oldp in oldPa) {
if (! parmMap.containsKey(oldp.name)) { //oldp was not overridden by the new list
npl.add(oldp)
}
}
build.actions.remove(oldPa)
}
newPa = new ParametersAction(npl)
build.actions.add(newPa)
}

关于groovy - groovy 脚本中定义的变量始终解析为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22381893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com