2013-08-01 24 views
5

C'è un modo per ripetere una compilazione N volte? (non importa lo stato dell'ultima build). La build è parametrizzata e per il momento sto usando il plugin Jenkins Parameterized Trigger che è impostato per attivare la stessa build, ma questo è ovviamente un ciclo infinito.Ripetere la creazione n volte in Jenkins

Mi piacerebbe essere in grado di specificare quante volte ripetere la compilazione con gli stessi parametri.

risposta

2

Bene, non esiste una soluzione facile per questo problema, ma può essere facilmente programmato. E ci sono un paio di modi per farlo:

  1. Utilizzando un Build Flow Plugin

    Questo plugin vi permetterà di sceneggiatura il modo in cui il flusso di compilazione del progetto è in esecuzione. Puoi creare script per creare build da eseguire in parallelo, riprovare i build falliti per tutte le volte che desideri e molto altro ancora. Vorrei fare un tentativo e creare uno script con il numero desiderato di tentativi. Penso che sarà la tua migliore opzione da provare.

  2. Puoi provare a utilizzare Fail the Build Plugin eo Retry Failed Builds o Periodic Reincarnation Plugin

    Essa vi permetterà di rompere la build di proposito e poi l'altro plugin provare a costruire ancora e ancora. Qui non sarà facile controllare il numero di tentativi qui - dovresti cambiare lo stato della build in base a una variabile da script nel tuo processo di compilazione o qualcosa del genere. Ma hey, forse è anche una soluzione.

  3. Soluzioni più complesse su cui è possibile basarsi RabbitMQ - è possibile inserire più di un messaggio in una coda per creare il progetto numerose volte e quindi creare il progetto in base a tali messaggi.

  4. È possibile basare la vostra generazione su BPM: JBPM Plugin con JBPM Workflow Plugin o Jenkow

probabilmente posso venire con più soluzioni, ma il primo di cui sopra è probabilmente un buon punto di partenza ...

7

È possibile creare un ciclo ripetuto (non infinito) di un lavoro Jenkins, aggiungendo un passaggio condizionale che valuta un parametro $ JOB_COUNTER, che viene semplicemente diminuito a ogni iterazione.

Per fare ciò, prima creare un nuovo parametro String "JOB_COUNTER" con valore predefinito = 1.

Quindi utilizzare EnvInject plugin, e selezionare "Preparare un ambiente per la corsa" + "Override Costruire Parametri", e aggiungere in "Valutata sceneggiatura Groovy":

def map = [:] 
int newJobCounter = JOB_COUNTER.toInteger() - 1 
println "Decreasing JOB_COUNTER from " + JOB_COUNTER + " to " + newJobCounter 
map.put("JOB_COUNTER", newJobCounter) 
return map 

Infine, con Conditional BuildStep plugin + Parameterized Trigger plugin (e facoltativamente con PostBuildScript plugin, se si desidera avviare l'iterazione successiva solo al termine della compilazione), impostare quanto segue: enter image description here

UPDATE:

Un altro modo per ciclo, è quello di diminuire JOB_COUNTER nei parametri predefiniti (invece che all'interno EnvInject):

JOB_COUNTER=${JOB_COUNTER}-1 

Poi, per aggiornare correttamente JOB_COUNTER ad ogni iterazione, uso valutare metodo() al posto di toInteger(), in Groovy EnvInject:

int newJobCounter = evaluate(JOB_COUNTER) 
println "Evaluating JOB_COUNTER: " + JOB_COUNTER + " => " + newJobCounter 
map.put("JOB_COUNTER", newJobCounter) 

E, infine, l'azione condizionale dovrebbe essere:

$JOB_COUNTER > Greater than 1 
Problemi correlati