groovy.lang.MissingPropertyException:没有这样的属性:类的jenkins:groovy.lang.Binding

时间:2017-11-01 21:41:43

标签: jenkins groovy

我们正在升级到更新版本的Jenkins(2.60.1),并且在之前的Jenkins版本(1.596 / 2)中运行的groovy脚本不再有效。

这是一个Jenkins构建项目,它是参数化的,我们使用Groovy脚本为Choice Provider提供选择(Choice Provider设置为System Groovy Choice Parameter)。

我们试图访问Jenkins环境变量,并且这样做(这是Groovy脚本的一部分):

import hudson.slaves.EnvironmentVariablesNodeProperty
import hudson.EnvVars

EnvironmentVariablesNodeProperty prop = jenkins.getGlobalNodeProperties().get(EnvironmentVariablesNodeProperty.class)
EnvVars env = prop.getEnvVars()

def MY_VAR = env['MY_JENKINS_VAR']

但是,运行脚本时出现以下错误:

Failed to execute script

groovy.lang.MissingPropertyException: No such property: jenkins for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:63)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:224)

在我看来,“jenkins”引用应该是由Jenkins或者Groovy提供的内置属性,但是我找不到任何关于我需要做什么的信息才能从Groovy脚本中访问它

感谢您的帮助。

4 个答案:

答案 0 :(得分:5)

正如@Jayan在另一篇文章中指出的那样,解决方案是执行以下操作

import jenkins.model.*
jenkins = Jenkins.instance

然后我就能够按原样完成剩余的脚本编写。

答案 1 :(得分:1)

请仔细检查jenkins是否阻止此导入。转到脚本批准并检查它是否阻止它。如果是点击允许。

https://jenkins.io/doc/book/managing/script-approval/

答案 2 :(得分:1)

对我来说,发生此问题是因为我的Groovy脚本中有一个无效字符。在我们的例子中,这是脚本结尾括号后面的空白行。

答案 3 :(得分:0)

在我的情况下,如果是Jenkinsfile库,我在脚本名称中使用了-(连字符)。 用下划线(_)

替换连字符(-)后得到解决