3

Ist es möglich, Jenkins Jobs simultan auf solche Weise zu starten, dass im Falle, wenn einige der Konfigurationen nicht gestartet werden konnte "Parent" Job wartet, bis alle von ihnen initiiert werden konnten synchronisieren?Starten Sie Jenkins Jobs gleichzeitig synchron

Ich habe bereits die Plugins Matrix Project und Pipeline überprüft, um Jobs parallel zu starten, aber es scheint, dass beide keine Möglichkeit haben, die Ausführung einzufrieren, bis alle Konfigurationen gleichzeitig gestartet werden konnten.

+0

Können Sie genauer erklären, was Sie mit _freeze Ausführung meinen, bis alle Konfigurationen gleichzeitig gestartet werden können_? Sie meinen, Sie möchten, dass alle Zweige gleichzeitig starten und darauf warten, dass alle Executor-Slots gleichzeitig verfügbar sind? Warum? –

+0

@JesseGlick Ich möchte ein verteiltes System testen, das entweder über mehrere Knoten oder Executoren läuft. Um dies zu tun, möchte ich, dass Jenkins die Builds kontrolliert und im Falle eines Deadlocks den Timeout-Schwellenwert durchsetzt. – luka5z

Antwort

1

In Pipeline könnten Sie so etwas wie (ungetestet)

tun
def count = 0 
parallel a: { 
    node { 
    count++ 
    waitUntil {count == 3} 
    sh 'make CONFIG=a' 
    } 
}, b: { 
    node { 
    count++ 
    waitUntil {count == 3} 
    sh 'make CONFIG=b' 
    } 
}, c: { 
    node { 
    count++ 
    waitUntil {count == 3} 
    sh 'make CONFIG=c' 
    } 
} 

Es ist nicht generell eine gute Idee, da Sie effektiv warten können Deadlock für alle drei Knoten gleichzeitig gesperrt werden.

+1

Danke. Basierend auf Ihrem Vorschlag habe ich eine einfache Pipeline [Skript] geschrieben (https://github.com/luka5z/jenkinsci-workflow-plugin-examples/blob/master/jobs/parallel-waituntil.groovy). Es wartet nicht nur, bis alle Knoten verfügbar sind, sondern wickelt es auch um den Zeitüberschreitungsabschnitt herum. – luka5z

+0

Schön. Tips: Es ist nicht nötig, 'FlowInterruptedException' zu importieren, wenn 'catch'ing plain Java' InterruptedException' wahrscheinlich ausreichen würde; und kann 'manager.build.doStop()' (dh 'currentBuild.rawBuild.doStop()') mit dem sandbox-freundlichen 'throw e' ersetzen, besonders wenn Sie' failFast: true' zum 'parallel'-Schritt hinzufügen . –

0

Ich denke, this könnte Ihnen helfen.

Verwandte Themen