Wie können mehrere Stufen auf demselben Knoten mit deklarativer Jenkins-Pipeline ausgeführt werden?

9

Ziel
Führen Sie mehrere Stufen einer deklarativen Jenkins-Pipeline auf demselben Knoten aus.

Einrichtung
Dies ist nur ein minimales Beispiel, um das Problem zu zeigen. Es gibt zwei Windows-Knoten "windows-slave1" und "windows-slave2", die beide mit dem Label "windows" gekennzeichnet sind.

HINWEIS: Meine echte Jenkins-Datei kann keinen globalen Agenten verwenden, da es Gruppen von Stufen gibt, die auf verschiedenen Knoten ausgeführt werden müssen (z. B. Windows vs. Linux).

Erwartetes Verhalten
Jenkins wählt einen der Knoten in "Stage 1" basierend auf dem Label aus und verwendet den gleichen Knoten in "Stage 2", da die Variable windowsNode auf den in "Stage 1" ausgewählten Knoten aktualisiert wurde. p>

Tatsächliches Verhalten
"Stage 2" läuft manchmal auf demselben und manchmal auf einem anderen Knoten als "Stage 1". Siehe die Ausgabe unten.

Jenkinsfile

%Vor%

Ausgabe

%Vor%

Irgendwelche Ideen, was mit dem Setup nicht stimmt? Ich denke, so wird die Jenkins-Datei analysiert und ausgeführt.

Andere Vorschläge? Vielleicht gibt es eine Jenkins-API, um einen Knoten basierend auf der Bezeichnung "windows" auszuwählen, wenn Sie windowsNode zu Beginn festlegen.

    
René Scheibe 02.07.2017, 12:46
quelle

3 Antworten

3

Sie könnten Stufen innerhalb eines Skriptblocks definieren. Diese Stufen sind eine Art von Unterstufen einer Elternstufe, die in einem gegebenen Agenten läuft. Das war der Ansatz, den ich in einem ähnlichen Anwendungsfall verwenden musste.

%Vor%     
Camilo Silva 30.11.2017 20:47
quelle
1

Ich habe festgestellt, dass dies so funktioniert, wie Sie es erwarten würden

%Vor%     
Warren Scott 04.01.2018 01:47
quelle
-1

Ersetze agent none durch agent any

    
Fabri 20.11.2017 11:05
quelle

Tags und Links