0

Ich habe eine CD-Pipeline, die Benutzerbestätigung in einigen Phasen benötigt, also möchte ich Serverressourcen freigeben, während die Pipeline auf die Benutzereingabe wartet.Jenkins 2 Deklarative Pipelines - Ist es möglich, alle Stufen innerhalb eines Knotens (Agent any) auszuführen, aber einige davon laufen ohne?

pipeline { 
    agent any 
    stages { 
    stage ('Build Stage') { 
     steps { 
     ... 
     } 
    } 
    stage ('User validation stage') { 
     agent none 
     steps { 
     input message: 'Are you sure you want to deploy?' 
     } 
    } 
    stage ('Deploy Stage') { 
     steps { 
     ... 
     } 
    } 
    } 
} 

Sie oben sehen, dass kann ich eine globale agent any aber in der Benutzervalidierung Stufe I hinzugefügt agent none.

Kann jemand bestätigen, dass dies das tut, was ich will (kein Agent/Knoten wartet auf die Benutzereingabe)? Ich sehe nicht, wie man es verifiziert, nichts anderes im Ausführungsprotokoll ...

Wenn nicht, wie könnte ich es tun?

+0

Sie haben die Antwort hier https://stackoverflow.com/questions/42159221/use-a-lightweight-executor-for-a-declarative-pipeline-stage-agent-none –

+0

Es sieht gut aus, aber wirft immer noch einige Fragen auf , Mit dem gleichen Label könnten Sie verschiedene Knoten (Arbeitsbereiche) in verschiedenen Phasen bekommen? Wie können wir damit umgehen? – codependent

Antwort

0

Dies wird nicht wie erwartet funktionieren. Sie können agent any für die gesamte Pipeline nicht angeben und erwarten, dass agent none den Executor nicht belegt.

Um dies zu beweisen, können Sie diesen Code ausführen, wie Sie es haben, und während es auf der Bühne input wartet, gehen Sie zu Ihrem Haupt jenkins Seite und sehen Sie die Build-Executor-Status. Sie werden sehen, dass ein Executor Ihren Job noch ausführt.

Als nächstes wechseln Sie Ihre Pipeline zu agent none und fügen Sie agent any zu allen anderen Schritten (neben Ihrem Eingabeschritt) und den gleichen Test. Sie können sehen, dass während des Wartens auf die Eingangsstufe keiner der Executoren besetzt ist.

Was Ihre Frage zu verschiedenen Arbeitsbereichen auf verschiedenen Knoten anbelangt ... Angenommen, Sie verwenden Code von einem SCM, wird es auf jedem neuen Knoten ausgecheckt, so dass dies kein Problem darstellt. Sie müssen sich nur um Artefakte kümmern, die Sie in jeder Phase erstellt haben.

Es ist nicht sicher zu "hoffen", dass Sie auf dem gleichen Knoten bleiben, obwohl Jenkins versuchen wird, Sie dort zu halten. Aber selbst dann gibt es keine Garantie, dass Sie das gleiche Arbeitsbereichsverzeichnis erhalten.

Die korrekte Methode, um dies zu behandeln, ist stash alle Dateien, die Sie möglicherweise erstellt oder geändert haben, die Sie in späteren Phasen benötigen. Dann in den folgenden Phasen, unstash die erforderlichen Dateien. Gehen Sie niemals davon aus, dass Dateien zwischen Stufen mit eigener Knotendeklaration gelangen.

+0

Danke für die Information. Nur ein paar Zweifel: Muss ich beim Verstecken eindeutige Namen verwenden? Zum Beispiel Verketten von "stashedArtifact" + BuildNumber. Gibt es ein Problem beim Speichern von Artefakten wie War- oder JAR-Dateien bis zu 80 MB? – codependent

+0

Sie können es nennen, was Sie wollen, und verwenden Sie das, um zu stürzen. Aber ich weiß nicht, was die Auswirkungen davon sind, denselben Namen mehrfach zu verwenden. Wird es klirren oder kombinieren? Nicht sicher. Die Fragen zur Größe werden in der Dokumentation hier beantwortet: https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-stash-code-stash-some-files-to-be- verwendet-später-in-dem-bauen –

Verwandte Themen