12

Im deploy-Szenario muss ich jenkins Task auf der Liste der Hosts erstellen und ausführen, dh etwas wie parametrisierte Task erstellen (wo IP-Adresse ist ein Parameter) oder eine Aufgabe auf Multijob Plugin mit HOST-Achse, aber von laufen nur 2 parallel über mehrere Hosts.
Eine der Optionen könnte sein, ansible mit der Liste der Hosts zu betreiben, aber ich würde gerne einen Status für jeden Host separat sehen und einen jenkins-Job neu starten, falls nötig.

Die Hauptoption ist Job DSL Plugin oder Pipeline Plugin, aber hier brauche ich Hilfe, um zu verstehen, welche Klassen/Methoden von dsl groovy Code verwendet werden sollte, um dies zu erreichen.
Kann mir jemand helfen?Jenkins Task für entfernte Hosts

+0

Können Sie das [Matrix-Projekt] (https://wiki.jenkins-ci.org/display/JENKINS/Building+a+matrix+project) nicht mit einer Achse für die IP-Adressen verwenden? – vlp

+0

@vlp Vielleicht ja, aber wie nur 2 parallel statt alle zu laufen? – yvs

+0

Ich habe es nie benutzt, aber [Throttle Concurrent Builds Plugin] (https://wiki.jenkins-ci.org/display/JENKINS/Throttle+Concurrent+Builds+Plugin) könnte funktionieren. Es sollte Throttling-Matrix-Builds unterstützen (es wird im Changelog erwähnt). Viel Glück! – vlp

Antwort

2

Angenommen, die Hosts wurden bereits als Jenkins-Slaves konfiguriert. Angenommen, Hosts werden im Pipeline-Jobparameter HOSTS als durch Leerzeichen getrennte Liste bereitgestellt. Folgendes Beispiel soll Ihnen den Einstieg:

def hosts_pairs = HOSTS.split().collate(2) 

for (pair in host_pairs) { 
    def branches = [:] 
    for (h in pair) { 
    def host = h // fresh variable per iteration; it will be mutated 
    branches[host] = { 
     stage(host) { 
     node(host) { 
      // do the actual job here, e.g. 
      // execute a shell script 
      sh "echo hello world" 
     } 
     } 
    } 
    } 
    parallel branches 
} 
+0

Könnten Sie bitte klarstellen, einen Punkt, AFA Ich bin nicht fließend in groovy: Sollte es zusammenbrechen statt sammeln? – yvs

+1

Nein, Sortieren ist korrekt. Es teilt die Liste in Unterlisten gegebener Größe auf. Z.B. Hier haben Sie die Zeichenfolge 'HOSTS =" foo bar baz qux "', nach 'split()' haben Sie eine flache Liste '[" foo "," bar "," baz "," qux "]' und nach ' collate (2) 'Sie haben eine Liste von Listen' [["foo", "bar"], ["baz", "quz"]] ''. – jil

2

Eine Kombination aus Matrix project und Throttle Concurrent Builds Plugin möglich ist.

Sie müssen nur eine benutzerdefinierte Achse (z. B. "targetHost") mit allen IP-Adressen als Werte einrichten und unter "Throttle Concurrent Builds" die gewünschte Drosselung einstellen (beachten Sie, dass Sie "Execute Concurrent Build falls nötig "Option, jenkins die gleichzeitige Ausführung zu erlauben.

Die Achsenwerte sind während jedes untergeordneten Builds in der entsprechenden Umgebungsvariablen verfügbar (z. B. targetHost).

Unten ist ein Beispiel config.xml mit einfachen Ping & Warte Build-Schritt:

<?xml version='1.0' encoding='UTF-8'?> 
<matrix-project plugin="[email protected]"> 
    <actions/> 
    <description></description> 
    <keepDependencies>false</keepDependencies> 
    <properties> 
    <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="[email protected]"> 
     <maxConcurrentPerNode>2</maxConcurrentPerNode> 
     <maxConcurrentTotal>2</maxConcurrentTotal> 
     <categories class="java.util.concurrent.CopyOnWriteArrayList"/> 
     <throttleEnabled>true</throttleEnabled> 
     <throttleOption>project</throttleOption> 
     <limitOneJobWithMatchingParams>false</limitOneJobWithMatchingParams> 
     <matrixOptions> 
     <throttleMatrixBuilds>true</throttleMatrixBuilds> 
     <throttleMatrixConfigurations>true</throttleMatrixConfigurations> 
     </matrixOptions> 
     <paramsToUseForLimit></paramsToUseForLimit> 
    </hudson.plugins.throttleconcurrents.ThrottleJobProperty> 
    </properties> 
    <scm class="hudson.scm.NullSCM"/> 
    <canRoam>true</canRoam> 
    <disabled>false</disabled> 
    <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding> 
    <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding> 
    <triggers/> 
    <concurrentBuild>true</concurrentBuild> 
    <axes> 
    <hudson.matrix.TextAxis> 
     <name>targetHost</name> 
     <values> 
     <string>127.0.0.1</string> 
     <string>127.0.0.2</string> 
     <string>127.0.0.3</string> 
     <string>127.0.0.4</string> 
     <string>127.0.0.5</string> 
     </values> 
    </hudson.matrix.TextAxis> 
    </axes> 
    <builders> 
    <hudson.tasks.Shell> 
     <command>sleep 7 
ping -c 7 $targetHost 
sleep 7</command> 
    </hudson.tasks.Shell> 
    </builders> 
    <publishers/> 
    <buildWrappers/> 
    <executionStrategy class="hudson.matrix.DefaultMatrixExecutionStrategyImpl"> 
    <runSequentially>false</runSequentially> 
    </executionStrategy> 
</matrix-project> 

Viel Glück!

Verwandte Themen