我正在尝试使用系统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)
即使我尝试这个,它也会打印空值:
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/ParameterizedSystem Groovy脚本
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。
对我来说,我无法理解这里出了什么问题...有人能帮我吗?
很抱歉现在才添加答案,但我也有同样的问题,阅读这篇文章给我一个解决方案:
因此,解析器将在env参数中找到作为jenkins构建变量的值。
这样做解决了我的问题。
可以在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)
}
问题内容: 我想将“ $ WORSKPACE”变量用于jenkins脚本调用的常规文件。但是在SO上找到的所有解决方案都失败了: 我得到的消息:脚本不允许使用groovy.lang.GroovyObject方法setProperty java.lang.String java.lang.Object(JenkinsHelper.name)。管理员可以决定是批准还是拒绝此签名。 对设置为允许Jenk
拉斯宾(杰西)-root@RaspberryPi-腻子 在我输入的终端中 现在我得到了一个包含此代码的脚本 有一个cronjob每小时启动一次这个脚本 苏。一定有什么地方出错了。因为他将变量$finalanswer解读为nothing。 这意味着在此脚本之外定义的变量将不起作用? 我该如何解决这个问题?
我必须从我的 Groovy 脚本访问一个环境变量。我没有使用詹金斯。如何获取变量?
问题内容: 我刚开始学习groovy,我想将svnSourcePath和svnDestPath传递给svn copy命令中的shell脚本。但是网址未呈现。 输出量 问题答案: 在变量周围添加了单引号和加operator(’+ variable +’)。现在正在工作
我正在使用gradle和bash脚本在docker图像中构建几个android应用程序。该脚本由运行docker映像的jenkins触发。在bash脚本中,我收集有关构建成功的信息。我想将该信息传递给jenkinsfile的groovy脚本。我试图在docker容器中创建一个txt文件,但jenkinsfile中的groovy脚本找不到该文件。这是我的jenkinsfile的groovy脚本: 在
我可以将类实例声明为全局实例,如下所示: 但是如果管道调用“vars”目录中定义为groovy脚本的函数,不再可见 我也尝试使用@Field,但它并没有改变什么。请注意,所有管道都是在共享库中定义的(jenkinsfile项目只调用此共享库中的一个函数)。 在本例中,如何从/vars中的groovy脚本访问gitUtils? 我知道我们可以将该实例作为/vars中声明的函数的参数传递,但使用实用类