2016-04-12 14 views
6

Ho creato uno script Groovy che viene utilizzato in un passaggio System Groovy Script in un lavoro Jenkins che deve accedere alla generazione corrente del lavoro corrente.Accesso al build corrente di Jenkins nello script Groovy

La build corrente è necessaria quando si utilizza un Hudson.model Cause.UpstreamCause per collegare la build corrente del lavoro corrente a un lavoro dipendente che sto pianificando.

Poiché il codice è più conciso:

my-job-step.groovy:

def scheduleDependentJob(jobName) { 
    def fooParam = new StringParameterValue('foo', 'bar'); 
    def paramsAction = new ParametersAction(fooParam) 

    println "Scheduling dependent job" 
    def currentJob = ??? 
    def cause = new Cause.UpstreamCause(currentBuild) 
    def causeAction = new hudson.model.CauseAction(cause) 
    instance.queue.schedule(job, 0, causeAction, paramsAction) 
} 

Il CauseAction costruttore (Visto su http://javadoc.jenkins-ci.org/hudson/model/Cause.UpstreamCause.html) richiede un oggetto Run che l'animazione oggetto corrente deve essere un'istanza di. Non riesco proprio a trovare un buon modo per ottenere la build corrente del lavoro in esecuzione all'interno di uno script Groovy.

risposta

4

Questo è il frammento che stavo cercando!

import hudson.model.* 
def currentBuild = Thread.currentThread().executable 

Questo in sintonia con il mio script precedente in questo modo:

import hudson.model.* 


def scheduleDependentJob(jobName) { 
    def fooParam = new StringParameterValue('foo', 'bar'); 
    def paramsAction = new ParametersAction(fooParam) 

    println "Scheduling dependent job" 
    def currentBuild = Thread.currentThread().executable 
    def cause = new Cause.UpstreamCause(currentBuild) 
    def causeAction = new hudson.model.CauseAction(cause) 
    instance.queue.schedule(job, 0, causeAction, paramsAction) 
} 
+1

ho trovato YMMV un po 'a seconda di ciò chiama lo script Groovy (per esempio email-ext-plug-in, azioni post-compilazione). Con i lavori in esecuzione 'activeBuild = Thread.currentThread(). Executable' funziona. Con vecchi lavori che non funzionano. L'utilizzo della build var predefinita è probabilmente la migliore se è lì. Per ottenere l'oggetto di build in entrambi i casi puoi fare qualcosa del tipo 'try {c = build.getClass()} catch (Exception ex) {try {build = Thread.currentThread(). Executable} catch (Exception ex2) {println ("oh caro, nessun oggetto di costruzione.")}} '. – gaoithe

8

Se nel vostro lavoro Jenkins si utilizza Groovy plug-in, poi dentro Execute system Groovy script passo il plug-in fornisce già di accedere a alcune variabili predefinite :

build 
    The current AbstractBuild. 
launcher 
    A Launcher. 
listener 
    A BuildListener. 
out 
    A PrintStream (listener.logger). 

Ad esempio:

println build.getClass() 

Uscite:

class hudson.model.FreeStyleBuild