【问题标题】:groovy.lang.MissingPropertyException: No such property: manager for class: Script1groovy.lang.MissingPropertyException:没有这样的属性:类管理器:Script1
【发布时间】:2013-04-11 15:06:22
【问题描述】:

我正在尝试在 Hudson 中调用 Groovy(使用 groovy 插件)来为我们的构建获取一些属性。但我得到了这个例外:

groovy.lang.MissingPropertyException:没有这样的属性:类管理器:Script1

我通过以下行得到这个:

def buildNUmber = manager.build.number

当我在 Jenkins 中作为内联命令运行以及使用脚本时会发生这种情况:

我尝试了下面的解决方案,但在声明过程中失败了(第二行):

Binding binding = new Binding();
binding.setVariable("manager", manager);
GroovyShell shell = new GroovyShell(binding);
shell.evaluate(new File("d:/dev/others/hudson/userContent/ScriptStuff.groovy").text);

以上运行使用:Groovy 命令。当我运行构建时,它会出错并抱怨该行 - binding.setVariable("manager", manager);

当我使用 Groovy 脚本文件时,它会抱怨:

 def buildNumber = manager.build.number

两个错误都是:

groovy.lang.MissingPropertyException:没有这样的属性:类管理器:Script1

也尝试了thread 中提到的所有内容:

我正在使用 Hudson 2.2.1 和 Groovy 2.1.3。有什么问题?

【问题讨论】:

  • 我厌倦了脚本控制台,它在那里失败了同样的异常。

标签: maven groovy jenkins hudson hudson-plugins


【解决方案1】:

groovy.lang.MissingPropertyException: 的原因之一是在您使用超出其范围的变量或未定义该变量时引发。

【讨论】:

    【解决方案2】:

    也许我遗漏了您的代码的某些部分,但是您在哪里定义管理器?如果这是完整的 Groovy 脚本,那么您正在尝试绑定一个未声明任何内容的变量,因此它失败也就不足为奇了。

    只需定义一个你想要的经理,例如:

    def manager = "my manager" // probably not what you want
    

    这应该可以解决您当前的错误。

    【讨论】:

    • 对不起,我不能那样做,因为 manager 是我们应该从 Hudson 实例中获取的值。
    • 我明白,但您似乎是在尝试自己执行 Groovy 脚本,而不是使用基于 GroovyShell.execute() 命令的wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin
    • 确保您执行的是“构建后操作”而不是“后步骤”
    【解决方案3】:

    以防万一,如果您使用“执行系统 ​​Groovy 脚本”,则不需要使用“管理器”变量。这对我有用 -

    def workspace = build.getEnvVars()["WORKSPACE"]
    

    【讨论】:

    • 它有帮助。谢谢。 '''def JOB_NAME = build.getEnvVars()["JOB_NAME"]''' 然后在 html 中使用 $JOB_NAME。
    • 谢谢你,它帮助了我!
    • 很难找到这个有用的答案,所以谢谢!
    【解决方案4】:

    manager 由某些 Groovy 脚本插件提供,但不是全部。要使您的脚本通用,请改用 Jenkins/Hudson API:

    import hudson.model.*
    
    def build = Thread.currentThread().executable
    def buildNumber = build.number
    ...
    

    【讨论】:

    • 太棒了!您如何从构建变量中获取作业名称?我可以看到 build 包含作业名称和内部版本号,但不知道如何打印它。尝试了各种组合
    • 一旦你有构建对象,你可以做。 . . 'jobname = build.getEnvVars()["JOB_NAME"]' 'workspace = build.getEnvVars()["WORKSPACE"]'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多