Jenkins Pipeline: Agent gegen Knoten?

133

Was ist der Unterschied zwischen einem Agenten und einem Knoten in einer Jenkins-Pipeline?

Ich habe diese Definitionen gefunden:

  • Knoten : Die meisten Arbeiten, die eine Pipeline ausführt, werden im Kontext eines oder mehrerer deklarierter Knotenschritte ausgeführt.
  • agent : Die Agentenanweisung gibt an, wo die gesamte Pipeline oder eine bestimmte Stufe in der Jenkins-Umgebung ausgeführt wird, je nachdem, wo die Agentenanweisung platziert ist.

Beide werden also zum Ausführen von Pipeline-Schritten verwendet. Aber wann welches verwenden?

Matthias M.
quelle

Antworten:

144

Die einfache Antwort lautet: Agent ist für deklarative Pipelines und Node für Skript- Pipelines.

In deklarativen Pipelines wird die Agentenanweisung verwendet, um anzugeben, auf welchem ​​Agenten / Slave der Job / die Aufgabe ausgeführt werden soll. Mit dieser Anweisung können Sie nur angeben, wo die Aufgabe ausgeführt werden soll, welcher Agent, Slave, Label oder Docker-Image.

Andererseits kann in Skript-Pipelines der Knotenschritt zum Ausführen eines Skripts / Schritts auf einem bestimmten Agenten, Label oder Slave verwendet werden. Der Knotenschritt nimmt optional den Agenten- oder Labelnamen und dann einen Abschluss mit Code, der auf diesem Knoten ausgeführt werden soll.

deklarative und geskriptete Pipelines (Bearbeitung basierend auf dem Kommentar):

  • Deklarative Pipelines sind eine neue Erweiterung des Pipeline-DSL (es handelt sich im Grunde genommen um ein Pipeline-Skript mit nur einem Schritt, einem Pipeline-Schritt mit Argumenten (als Direktiven bezeichnet). Diese Direktiven sollten einer bestimmten Syntax folgen. Der Sinn dieses neuen Formats ist, dass dies der Fall ist strenger und sollte daher für Pipelines-Neulinge einfacher sein, grafische Bearbeitung ermöglichen und vieles mehr.
  • Skript-Pipelines sind der Fallback für erweiterte Anforderungen.
Jon S.
quelle
5
Ja und nein deklarative Pipelines sind eine neue Erweiterung des Pipeline-DSL (es handelt sich im Grunde genommen um ein Pipeline-Skript mit nur einem Schritt, einem Pipeline-Schritt mit Argumenten (als Direktiven bezeichnet). Diese Direktiven sollten einer bestimmten Syntax folgen. Der Sinn dieses neuen Formats ist Dass es strenger ist und daher für diejenigen, die neu in Pipelines sind, einfacher sein sollte, die grafische Bearbeitung ermöglichen und vieles mehr, siehe die Funktionsliste unter Ihrem Link oben. Für einfache Aufgaben würde ich sagen, dass dies der empfohlene Ansatz ist, aber für fortgeschrittenere Fälle, Skript ist der Fallback.
Jon S
6
Nun gibt es drei Namen mit node, agentund slave!
mkobit
2
@mkobit Ja, die Namen sind ziemlich verwirrend. Ich habe irgendwo gelesen (ich kann die Referenz momentan nicht finden, entweder im Jenkins-Blog oder in Jenkins JIRA), dass sie versuchen, Agent anstelle von Slave umzubenennen und zu verwenden, da dies der Fall ist nicht als "negatives" Wort. Dann haben deklarative Pipelines das angenommen und es Agent genannt. Ich denke, der Knoten stammt aus geskripteten Pipelines.
Jon S
1
@DenCowboy Aha, ja, ich würde sagen, dass die vierte bewährte Methode dort nur für Skript-Pipelines gilt, da deklarativ immer einen Knoten zuweist. Die Agentenanweisung beschränkt nur, welcher Knoten zugewiesen wird.
Jon S
1
@DenCowboy Nein, es sollte dasselbe verwenden, es wird nur die Agentenanweisung verwendet, um zunächst zu bestimmen, welcher Agent / Slave verwendet werden soll.
Jon S