2013-04-18 91 views
12

我想調用Groovy裏面的哈德森(使用groovy插件)來獲得我們的構建一些屬性。但我得到這個異常:groovy.lang.MissingPropertyException:沒有這樣的屬性:類的經理:Script1

groovy.lang.MissingPropertyException:沒有這樣的屬性:經理級:SCRIPT1

我得到這個與以下行:

def buildNUmber = manager.build.number 

這當我運行情況作爲內詹金斯內嵌命令以及使用的腳本:

我嘗試下面的解決方案,但它聲明本身(2線)期間發生故障時:

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也提到嘗試一切:

我使用哈德森2.2.1和Groovy 2.1.3。什麼可能是錯的?

+0

我厭倦了腳本控制檯,它在那裏出現同樣的異常。 – avijendr

回答

1

也許我錯過了代碼的一部分,但是你在哪裏定義了管理器?如果這是完整的Groovy腳本,你試圖綁定一個沒有聲明的變量,所以它不會奇怪,它會失敗,對吧?

只要定義一個經理這就是你想要的東西,如:

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

而且應該要擺脫當前的錯誤。

+0

對不起,我不能這樣做,因爲經理是我們應該從哈德森實例中獲得的價值。 – avijendr

+1

我明白了,但您似乎正在嘗試自己執行Groovy腳本,而不是使用基於GroovyShell.execute的https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin( )命令。 –

19

manager由某些Groovy腳本插件提供,但不是全部。爲了使你的腳本通用,使用詹金斯/哈德森API來代替:

import hudson.model.* 

def build = Thread.currentThread().executable 
def buildNumber = build.number 
... 
+1

太棒了!你如何從構建變量中獲取作業名稱?我可以看到build包含作業名稱和內部版本號,但不知道如何打印。嘗試各種組合 – webDeveloper

+0

一旦你有建立對象,你可以做。 。 。 'jobname = build.getEnvVars()[「JOB_NAME」]''workspace = build.getEnvVars()[「WORKSPACE」]' – gaoithe

3

萬一有幫助,如果您使用的是「執行系統Groovy腳本」,你不需要使用到「經理」變量。這爲我工作 -

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

它有幫助。謝謝。 '''定義JOB_NAME = build.getEnvVars()[「JOB_NAME」]'',然後在html中使用$ JOB_NAME。 – gaoithe

+0

謝謝你,它幫助我! – dams

0

一個groovy.lang.MissingPropertyException的原因:當你使用它的範圍以外的變量或拋出你還沒有定義的變量。

相關問題