2015-08-11 11 views
6

Znalazłem ten przykładowy skrypt (od https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+System+Groovy+script) i chciałem przetestować sparametryzowaną wtyczkę budującą Jenkinsa, ale ten skrypt zgłasza błąd. Spodziewałem się, że to zadziała, jakieś pomysły, dlaczego tak nie jest?Dlaczego ten skrypt Groovy kończy się niepowodzeniem w Jenkins, aby uzyskać parametry zadania?

Tutaj jest błąd pojawia się:

/app/jenkins/workspace/Example-Parameterized-Trigger1/hudson2425966133354362461.groovy: 10: 
    unable to resolve class ParametersAction 
@ line 10, column 53. 
    ?.actions.find{ it instanceof Parameters     ^
1 error 
Build step 'Execute Groovy script' marked build as failure 

Oto scenariusz:

import hudson.model.* 

// get current thread/Executor 
def thr = Thread.currentThread() 
// get current build 
def build = thr?.executable 

// get parameters 
def parameters = build?.actions.find{ it instanceof ParametersAction }?.parameters 
parameters.each { 
    println "parameter ${it.name}:" 
    println it.dump() 
    println "-" * 80 
} 

// ... 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}" 

Odpowiedz

12

Od Groovy plugin dokumentacja:

Równina "Groovy Script" prowadzony jest w sposób rozwidlona JVM, na slave'u, w którym uruchamiana jest kompilacja. Jest to zasadniczo to samo, co uruchomienie "groovy" polecenia i przekazanie w skrypcie.

System groovy, OTOH, działa wewnątrz maszyny JVM mistrza Jenkinsa. W ten sposób będzie miał dostęp do wszystkich wewnętrznych obiektów Jenkinsa, więc możesz użyć tego do zmiany stanu Jenkinsa. Jest podobny do funkcjonalności konsoli Jenkins Script Console.

Oczywiście, należy użyć złego gromadzeniu etap (Execute Groovy script zamiast Execute system Groovy script), a zatem nie mają dostępu do wewnętrznych obiektów Jenkinsa.

+0

Rozumiem. To ma sens. Pozwól mi to zbadać. Dzięki. – djangofan

+0

Użyłem 'Execute system Groovy script' zamiast' Execute Groovy script', ale wciąż dostaję ten sam błąd. Czy potrzebny jest dodatkowy krok podczas korzystania z 'Execute system Groovy script'? – octavian

+1

@octavian Zwykle - nie. Jaki masz błąd? –