2011-06-19 12 views

risposta

1

Dai un'occhiata alla seguente risposta: Fail hudson build with groovy script. Puoi avere accesso al lavoro upstream e fallire nella sua build BUT ... stai attento al fatto che le azioni post-compilazione di Hudson/Jenkins al momento non consentono di specificare alcun ordine: se il tuo script groovy è specificato oltre ad altri post-build azioni, e quelle azioni influenzano il risultato della compilazione (es: analisi dei risultati del test), quindi non sarà possibile aggiornare lo stato del lavoro upstream se Jenkins decide di eseguirle dopo il tuo script groovy.

14

Assicurarsi di utilizzare il passaggio corretto per eseguire i processi a valle; Ho scoperto che dal momento che stavo eseguendo il mio come "post post step", non avevo l'opzione "Blocca fino a quando i progetti non hanno finito le loro build". Cambiarlo in "build task" anziché in "post build task", mi ha permesso di trovare le opzioni che stai cercando all'interno del plugin di trigger parametrizzato.

enter image description here

+0

L'unica cosa che aggiungerei è che un processo bloccato occupa ancora un esecutore di build, quindi per le lunghe condotte è necessario tenerlo a mente. Grazie molte per questa risposta - ho provato a fare lo stesso da solo e non ho nemmeno pensato di usare Build Step. – Jason

+0

utilizza quindi il plugin "postbuild-task"? –

+0

trovato grazie (si prega di ignorare la mia ultima domanda) –

4

questo codice segnerà l'accumulo a monte instabile/fallito in base allo stato del lavoro a valle.

/************************************************* 
Description: This script needs to put in Groovy 
Postbuild plugin of Jenkins as a Post Build task. 
*************************************************/ 

import hudson.model.* 

void log(msg) { 
    manager.listener.logger.println(msg) 
} 

def failRecursivelyUsingCauses(cause) { 
    if (cause.class.toString().contains("UpstreamCause")) { 
     def projectName = cause.upstreamProject 
     def number = cause.upstreamBuild 
     upstreamJob = hudson.model.Hudson.instance.getItem(projectName) 
     if(upstreamJob) { 
      upbuild = upstreamJob.getBuildByNumber(number) 
      if(upbuild) { 
       log("Setting to '" + manager.build.result + "' for Project: " + projectName + " | Build # " + number) 
       //upbuild.setResult(hudson.model.Result.UNSTABLE) 
       upbuild.setResult(manager.build.result); 
       upbuild.save() 

       // fail other builds 
       for (upCause in cause.upstreamCauses) { 
        failRecursivelyUsingCauses(upCause) 
       } 
      } 
     } else { 
      log("No Upstream job found for " + projectName); 
     } 
    } 
} 


if(manager.build.result.isWorseOrEqualTo(hudson.model.Result.UNSTABLE)) { 
    log("****************************************"); 
    log("Must mark upstream builds fail/unstable"); 
    def thr = Thread.currentThread() 
    def build = thr.executable 
    def c = build.getAction(CauseAction.class).getCauses() 

    log("Current Build Status: " + manager.build.result); 
    for (cause in c) { 
     failRecursivelyUsingCauses(cause) 
    } 
    log("****************************************"); 
} 
else { 
    log("Current build status is: Success - Not changing Upstream build status"); 
} 
+0

E 'possibile farlo contrassegnare i lavori upstream come SUCCESS in caso di una ricostruzione del lavoro downstream fallito? – yair