2012-10-16 17 views
5

ho 4 posti di lavoro che deve essere eseguita nel seguente sequenzaJenkins trigger parallelo e Wait

JOB A 
|------> JOB B 
|------> JOB C 
      |------> JOB D 

Nella suddetta

  1. A dovrebbe innescare B & C parallelamente e C innesca inturn D.
  2. A dovrebbe trattenere il lavoro come in esecuzione fino al completamento di tutti e 3.

Ho provato le seguenti plugin e non poteva ottenere ciò che sto cercando

  • Registrati Plugin
  • Multijob Plugin
  • Multi-configurazione Progetto
  • Paramterized trigger Plugin

C'è qualche plugin che io non ho provato mi avrebbe aiutato a risolvere questo. O questo può essere raggiunto in un modo diverso. Si prega di avvisare.

risposta

1
+0

[La sua prossima deprecato] (https://wiki.jenkins-ci.org/display/JENKINS/Proposed+Plugin+Deprecation). Comunque anche io non sono riuscito a trovare alcuna documentazione su come farlo funzionare? Hai qualche? – raksja

+0

Visto [questo] (http://stackoverflow.com/a/6279210/150371), ma anche non riuscivo a capire come rilasciare il blocco, ecc. – raksja

1

Questo potrebbe non essere il modo ottimale, ma dovrebbe funzionare. Utilizzare il plug-in di trigger parametrizzato. Per il lavoro A, aggiungi un passo di costruzione (NON un'azione Post Build) per avviare entrambi i lavori B e C nello stesso passo di costruzione E bloccare fino al termine. In Job C, aggiungi un passaggio di build (NON un'azione Post Build) che avvia i blocchi di lavoro D AND fino al completamento. Ciò dovrebbe mantenere il lavoro A in esecuzione per tutta la durata.

Questo non è davvero ottimale: il lavoro A viene tenuto aperto in attesa che B e C finiscano. Quindi C viene tenuto aperto fino al termine di D.

C'è qualche motivo per cui Job A deve rimanere in esecuzione per la durata? Un'altra possibilità è quella di terminare Job A dopo che B e C sono iniziati, ma hanno una promozione su Job A che eseguirà le azioni finali dopo che i lavori B, C e D hanno avuto successo.

+0

Grazie per il tuo suggerimento @ Jason. Suppongo di aver già provato questo approccio. Ma il problema qui è che ho bisogno di passare 2 diversi set di parametri a B & C. Per B è su quale Node eseguire (usando il plugin NodeLabel) e per C set di proprietà. _Non vi è alcuna opzione in Parameterized Trigger Plugin per attivare 2 lavori contemporaneamente con 2 diversi set di parametri._ :( – raksja

1

Sto provando a creare uno stesso sistema. Sto costruendo una pipeline di certificazione in cui ho bisogno di eseguire i lavori di packager/build/deploy e i corrispondenti lavori di test. Quando tutti hanno successo, voglio aggregare i risultati del test e avviare il lavoro di rilascio che può fare una versione di prova automatizzata.

Ho selezionato Crea plug-in pipeline per la visualizzazione del sistema. Inizialmente provato con Plugin trigger parametrico con build di blocco. Non è stato possibile impostare l'archiviazione delle risorse utente/impronte digitali e della relazione di generazione downstream in questo modo poiché l'archiviazione funziona solo con Postbuild. Quindi inserisco il trigger parametrizzato nell'attività di post-build.In questo modo sono stato in grado di impostare valle build, impronte digitali, i risultati dei test aggregati ma i fallimenti di generazione non erano bollendo a monte catena lavori ei lavori monte erano non bloccante

ero finalmente in grado di ottenere ciò utilizzando questi Plugins-

  • Corporatura Pipeline
  • Multijob Plugin
  • Plugin FingerPrint
  • Artefatti Copia Plugin
  • Registrati Plugin

sto usando Jenkins 1.514

sistema assomiglia a questo

trigger lavoro -> costruire (e distribuire) Professione (1..n) ---> Prova Job (1 .. n)

trigger lavoro -

  • creare Multijob e creare un file di impronte digitali in guscio exec

    echo date +%s> fingerprint.txt

trucco è che file deve essere archiviata durante la compilazione, per farlo eseguire questo Script-

ARCHIVEDIR=$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_ID/archive 
mkdir $ARCHIVEDIR 
cp fingerprint.txt $ARCHIVEDIR 
  • Creare Multijob fase che consiste di creare/distribuire lavoro.
  • Costruire/deploy lavoro è di per sé un Multijob
  • seguire la stessa procedura per la creazione di costruire/distribuire lavoro come sopra rispetto per impronte digitali.
  • Copiare il manufatto fingerprint.txt da lavoro a monte
  • Setup fase Multijob nel lavoro deploy che fa scattare il lavoro di prova
  • creare un nuovo file di impronte digitali e la forza archiviarla simile al precedente punto
  • risultati JUnit raccogliersi nel lavoro di test finale.


nel trigger di lavoro, utilizzare Collega Plugin per eseguire il lavoro di uscita scegliendo 'familiare Post Costruire Azioni a unirsi' ed eseguire il progetto di rilascio solo sulla build stabile di trigger lavoro. In questo modo tutti i passaggi vengono visualizzati nella vista Genera pipeline e il processo Trigger viene bloccato per tutte le build downstream e viene impostato come peggiore build downstream per fornire un punto di decisione per il processo di rilascio.

+0

Sembra una soluzione interessante per una pipeline di Continuous Delivery.Spiace se non c'è un modo semplice. – vezenkov

1

Multijob Plugin

Se vuoi per fermare il pasticcio con downstream/upstream lavori catene definizioni. O quando si desidera aggiungere una gerarchia completa di lavori Jenkins che verranno eseguiti in sequenza o in parallelo. Aggiungi contesto al tuo buildflow implementando l'ereditarietà dei parametri da MultiJob a tutte le sue fasi e lavori. Le fasi sono sequenziali mentre i lavori all'interno di ciascuna fase sono paralleli.

https://wiki.jenkins-ci.org/display/JENKINS/Multijob+Plugin

+0

Questo plugin può anche essere utile per la gestione di attività parallele/seriali: [https://wiki.jenkins-ci.org/display/JENKINS/Dependency+Graph+View+Plugin] –

+0

Questo può anche dare qualche idea: [http: // stackoverflow .com/domande/4510640/riga di comando-what-is-the-purpose-of] –

2

Usa DSL Script con Costruire flusso plugin.

provare questo esempio per la vostra esecuzione:

build("job A") 

    parallel 
    (
     {build("job B")} 
     {build("job C")} 
    ) 

    build("job D")