2013-04-18 15 views
12

Próbuję wywołać Groovy wewnątrz Hudson (używając groovy plugin), aby uzyskać pewne właściwości dla naszej kompilacji. Ale otrzymuję ten wyjątek:groovy.lang.MissingPropertyException: Brak takiej właściwości: menedżer klasy: Script1

groovy.lang.MissingPropertyException: Nie ma takiego właściwość: kierownika klasy: Script1

uzyskać to z następującą linię:

def buildNUmber = manager.build.number 

Dzieje się tak, gdy uruchomię jako inline polecenia w Jenkins, jak również przy użyciu skryptu:

próbowałem poniżej rozwiązanie, ale nie podczas samego zgłoszenia (druga linia):

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); 

Powyższe jest uruchamiane za pomocą: Groovy command. A kiedy biegnę błędów budować i skarży się na linii - binding.setVariable("manager", manager);

Kiedy używać Groovy skrypt, to narzeka:

def buildNumber = manager.build.number 

Oba błędy: groovy.lang.MissingPropertyException: Nie takich nieruchomości: kierownik klasy: Script1

próbowałem wszystkiego wymienione w tym thread oraz:

Używam Hudson 2.2.1 i 2.1.3 Groovy. Co może być nie tak?

+0

Jestem zmęczony w konsoli skryptów i nie działa tam z tym samym wyjątkiem. – avijendr

Odpowiedz

1

Może brakuje mi jakiejś części kodu, ale gdzie definiujesz menedżera? Jeśli jest to kompletny skrypt Groovy, próbujesz powiązać zmienną, która nie jest zadeklarowana, więc nie jest dziwne, że się nie powiedzie, prawda?

Wystarczy zdefiniować menedżera to, że to, co chcesz, jak:

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

I powinny należy usunąć z bieżącego błędu.

+0

Niestety nie mogę tego zrobić, ponieważ menedżer jest wartością, którą powinniśmy uzyskać z instancji Hudson. – avijendr

+1

Rozumiem, ale wygląda na to, że próbujesz wykonać skrypt Groovy samemu, zamiast używać https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin, opartego na GroovyShell.execute () dowództwo. –

19

manager jest dostarczany przez niektóre wtyczki skryptów Groovy, ale nie wszystkie. Aby skrypt rodzajowy, należy użyć API Jenkins/Hudson Zamiast:

import hudson.model.* 

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

Świetnie! Jak uzyskać nazwę stanowiska ze zmiennej kompilacji? Widzę, że kompilacja zawiera nazwę zadania i numer kompilacji, ale nie wiem, jak to wydrukować.Próbowałem wszystkich kombinacji – webDeveloper

+0

Po zbudowaniu obiektu możesz zrobić. . . 'jobname = build.getEnvVars() ["JOB_NAME"]' 'workspace = build.getEnvVars() ["WORKSPACE"]' – gaoithe

3

Tylko w przypadku, to pomaga, jeśli używasz systemu Groovy „Execute Script”, nie trzeba używać „Menedżer” zmienna. Ten pracował dla mnie -

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

To pomaga. Dzięki. '' 'def JOB_NAME = build.getEnvVars() ["JOB_NAME"]' '', a następnie w html użyj $ JOB_NAME. – gaoithe

+0

Dzięki, pomogłeś mi! – dams

0

Jednym z powodów groovy.lang.MissingPropertyException: jest generowany, gdy używasz zmiennej poza jego zakres lub nie zdefiniowano, że zmiennej.