2012-04-12 6 views
20

Ho due progetti Jenkins che condividono un database. Non devono essere eseguiti contemporaneamente. A rigor di termini, non esiste una particolare dipendenza tra loro oltre la concorrenza, ma al momento gestisco parzialmente questo vincolo eseguendo un "downstream" dell'altro. Questo funziona la maggior parte del tempo, ma non sempre. Se si verifica un cambio di controllo sorgente mentre il secondo è in esecuzione, il primo verrà riavviato e verranno eseguiti contemporaneamente e probabilmente entrambi falliranno miseramente.Come posso impedire l'esecuzione simultanea di due progetti/build di Jenkins?

Questo è simile, ma non identico, a How to prevent certain Jenkins jobs from running simultaneously? La differenza è che non ho un problema "numero di thread" - sto già solo eseguendo al massimo un thread di un determinato progetto in qualsiasi momento , anche nel caso in cui due build (di diverso progetto) si calpestano a vicenda. Questo sembra escludere tutti i numerosi suggerimenti in quella discussione.

+0

Le serrature e chiavistelli plug menzionato nella risposta alla domanda che hai citato dovrebbe funzionare anche qui. –

+1

Locks & Latches funziona per il mio caso, ma è in [la lista "potenziale deprecazione"] (https://wiki.jenkins-ci.org/display/JENKINS/Proposed+Plugin+Deprecation). Se viene deprecato, sembra che il più recente [Exclusion-Plugin] (https://wiki.jenkins-ci.org/display/JENKINS/Exclusion-Plugin) farà il lavoro per me (e [Throttle Concurrent builds] (https://wiki.jenkins-ci.org/display/JENKINS/Throttle+Concurrent+Builds+Plugin) per l'altro, contato, caso). – jackr

risposta

21

Il Locks and Latches plugin dovrebbe risolvere il tuo problema. Crea un blocco e fai in modo che entrambi i lavori utilizzino lo stesso blocco. Ciò impedirà l'esecuzione contemporanea dei lavori.

  1. Installare il plug-in in "Gestisci Jenkins: Gestisci plug-in".
  2. Definire (fornire un nome per) il proprio blocco (i) in "Gestisci Jenkins: Configura sistema".
  3. Per ogni lavoro che si desidera partecipare alla esclusione,
    1. in ": Configurazione: Build Environment," controllare "Blocchi",
    2. e scegli il tuo nome blocco dall'elenco a discesa.
+0

Ecco la soluzione completa, dal momento che mi ci è voluto un po 'di ricerca e flagellazione: – jackr

+2

Installa il plugin in "Gestisci Jenkins: Gestisci i plugin". Definisci (fornisci un nome) il tuo blocco (i) in "Gestisci Jenkins: Configura Sistema". Per ogni lavoro che si desidera partecipare all'esclusione, in ": Configura: Ambiente di creazione", selezionare "Blocchi" e selezionare il nome del blocco dall'elenco a discesa. – jackr

+1

@jackr Dovresti modificare il tuo commento in questa risposta per completarla! – chown

4

EDIT: Di seguito le informazioni è in vigore dal 04/10/2014

plug Esclusione, https://wiki.jenkins-ci.org/display/JENKINS/Exclusion-Plugin Molto utile se alcune build usi la stessa risorsa - ad esempio un database di test. Tutto ciò che devi fare è aggiornare la configurazione di tutti i lavori usando questa risorsa e di conseguenza non funzioneranno mai in parallelo, ma attendi che altri si completino.

Tratto da: http://www.kaczanowscy.pl/tomek/2012-07/jenkins-plugins-part-iii-towards-continuous-delivery

Questo plugin fa bloccare due o più lavori l'esecuzione in parallelo.
Per verificare, fare questo per job1

  1. Configura
  2. Sotto Build Environment controllare "Aggiungi risorse per gestire l'esclusione".
  3. Poi Aggiungi -> Nuova risorsa -> Nome -> Blocco
  4. Sotto Build -> Aggiungi passaggio di generazione
  5. Critical Block Start
  6. Aggiungere passaggio di generazione -> Aggiungi quello che vuoi aggiungere. (aggiungi il sonno 15 per assicurarsi che dura più a lungo per controllare la concorrenza.)
  7. Add costruire passo -> blocco finale Critical
  8. Ripetere i passaggi precedenti per job2, assicurarsi di utilizzare lo stesso nome di blocco 'lock'.
  9. crea manualmente entrambi i lavori contemporaneamente.
  10. Monitorare l'avanzamento della corsa sotto jenkins -> Amministrazione esclusione.
4

Il Lockable Resources Plugin. Semplice e funzionante per me maggio 2016.

Installare il plug-in. In Gestisci Jenkins> Configura sistema vai a Gestione risorse bloccabili.
Selezionare Aggiungi risorsa bloccabile. Immettere i valori per il campo: Nome e premere Salva. Attenzione: non inserire spazi nel campo Nome.

In Jenkins>job_name> Configura> Generale, Seleziona casella di controllo: Questa build richiede risorse con serratura. Inserire il nome o i nomi nel valore per il campo: Risorse.

Inizia una costruzione. Sotto la build n. numero selezionare Risorse bloccate. Dovresti vedere qualcosa del tipo: Questa build ha bloccato le seguenti risorse: nome_risorsa - resource_description.

Avviare una build diversa che utilizza la stessa risorsa. Verrà visualizzato Build Queue nello stato/menu di Jenkins che mostra il nome del lavoro. Spettacoli di testo al volo Avviato da, in attesa di risorse resources_list, in attesa di tempo.

(anche tag di risorse/etichette possono essere utilizzate)

+0

Buon plugin ma non vedo In Jenkins> nome_lavoro> Configura> Generale, seleziona la casella di controllo: questa build richiede risorse bloccabili. Inserisci il nome oi nomi nel valore per il campo: Risorse. per lavori in condotte. C'è qualche problema? –

+0

Puoi descrivere qual è il tuo problema in maggiore dettaglio? Vedi "Questa build richiede risorse bloccabili"? Hai installato il plugin? – gaoithe

Problemi correlati