it-swarm.com.de

Jenkins-Job gleichzeitig auf allen Knoten ausführen

Ich habe eine große Gruppe von Knoten mit demselben Label. Ich möchte in Jenkins einen Job ausführen können, der auf all der Knoten mit demselben Label ausgeführt wird, und dies gleichzeitig.

Ich habe einen Vorschlag zur Verwendung der Matrixkonfigurationsoption in Jenkins gesehen, aber ich kann mir nur eine Achse vorstellen (die Etikettengruppe). Wenn ich versuche, den Job auszuführen, wird er scheinbar nur einmal statt 300 mal ausgeführt (1 für jeden Knoten in dieser Etikettengruppe). 

Was soll meine andere Achse sein? Oder ... gibt es ein Plugin dafür? Ich hatte das NodeLabel Parameter Plugin ausprobiert und die Option "Auf allen verfügbaren Online-Knoten ausführen" ausgewählt, aber es scheint, dass die Jobs nicht gleichzeitig ausgeführt werden.

22
user2406467
7
Mark O'Connor

Der Matrix-Build wird funktionieren. Verwenden Sie "Slaves" als Achse und erweitern Sie die Liste "Einzelne Knoten", um alle Knoten auszuwählen.

Beachten Sie, dass Sie die Auswahl jedes Mal aktualisieren müssen, wenn Sie einen Slave hinzufügen oder entfernen.

Um eine wartungsfähigere Lösung zu erhalten, können Sie mit dem Job DSL-Plugin einen Seed-Job einrichten, der die Vorlage für den Build enthält. Anschließend wird jeder Slave durchlaufen und ein neuer Job mit dem Build-Label auf den Namen erstellt der Sklave. 

13
gareth_bowles
  1. Installieren
  2. Aktivieren Sie für den Job, den Sie ausführen möchten, Ausführen von gleichzeitigen Builds, falls erforderlich.
  3. Erstellen Sie einen weiteren Job neben dem Job, den Sie auf allen Slaves ausführen möchten, und konfigurieren Sie ihn
    • Erstellen> Buildschritt hinzufügen> Trigger/Call-Build für andere Projekte
      • Fügen Sie ParameterFactories> Alle Knoten für Label Factory hinzu> Label: Das Label der Knoten
12
thSoft

Es gibt zwei Plugins, die Sie benötigen: Paramitrized Trigger Plugin , um andere Jobs als Erstellungsschritt Ihres Hauptjobs auslösen zu können, und NodeLabel Plugin (lesen Sie den Abschnitt BuildParameterFactory, um zu beschreiben, was Sie benötigen) Beschriftung angeben.

11
Sergey Irisov

Der beste und einfachste Weg, dies zu erreichen, ist die Verwendung von Elastic Axis plugin. 
1. Installieren Sie die Pulgin .
2. Erstellen Sie einen Multi-Configuration-Job (Installation, falls nicht vorhanden)
3. In der Auftragskonfiguration können Sie die neue Achse als elastische Achse hinzufügen. Fügen Sie das Etikett wie unten gezeigt hinzu, damit der Job auf mehreren Slaves ausgeführt werden kann .enter image description here

9
Amol Manthalkar

Verstanden - Kein spezielles Plugin nötig!

Ich habe einen übergeordneten Job erstellt, der einen anderen Build auslöst. Wenn ich ihn anrufe, übergebe ich ihm das Label , an dem ich den untergeordneten Job nicht ausführen möchte.

Grundsätzlich löst also der übergeordnete Job Nur den Job aus, den ich brauche.... Und der untergeordnete Job wird so oft ausgeführt wie die Anzahl der Slaves in Label (In meinem Fall 4 Mal).

enter image description here

Nehmen Sie einige der obigen Antworten und passen Sie sie für die 2.0-Serie an.

Sie können jetzt alle Jobs auf allen Knoten starten.

// The script triggers PayloadJob on every node.
// It uses Node and Label Parameter plugin to pass the job name to the payload job.
// The code will require approval of several Jenkins classes in the Script Security mode
def branches = [:]
def names = nodeNames()
for (int i=0; i<names.size(); ++i) {
  def nodeName = names[i];
  // Into each branch we put the pipeline code we want to execute
  branches["node_" + nodeName] = {
    node(nodeName) {
      echo "Triggering on " + nodeName
      build job: 'PayloadJob', parameters: [
              new org.jvnet.jenkins.plugins.nodelabelparameter.NodeParameterValue
                  ("TARGET_NODE", "description", nodeName)
          ]
    }
  }
}

// Now we trigger all branches
parallel branches

// This method collects a list of Node names from the current Jenkins instance
@NonCPS
def nodeNames() {
  return jenkins.model.Jenkins.instance.nodes.collect { node -> node.name }
}

Aus dem Code entnommen https://jenkins.io/doc/pipeline/examples/#trigger-job-on-all-nodes

6
drubin

Aktivieren Sie This project is parameterized, fügen Sie einen Parameter des Typs Label hinzu, geben Sie einen beliebigen Namen für das Label ein und wählen Sie einen Standardwert aus, z. B. ein Label, das eine Anzahl von Knoten enthält, oder eine Verbindung (&&) solcher Labels. Aktivieren Sie Run on all nodes matching the label, behalten Sie Run regardless of result und behalten Sie Node eligibility bei All nodes.

 enter image description here

1
eel ghEEz