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
Antwort
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
}
Könnten Sie bitte klarstellen, einen Punkt, AFA Ich bin nicht fließend in groovy: Sollte es zusammenbrechen statt sammeln? – yvs
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
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!
- 1. Entfernte Arbeit für Designer
- 2. So übergeben Sie Parameter an entfernte Shell in Jenkins Job
- 3. Cookies für entfernte Webseiten speichern
- 4. dynamische Hosts für NodeJS
- 5. Git Migration funktioniert nicht für entfernte Dateien
- 6. Lokaler Cache für entfernte Bazel-Repos
- 7. Orange 3: entfernte GUI
- 8. Makefile ignoriert entfernte Dateinamen
- 9. Distcc .distcc/zeroconf/Hosts enthalten keine Hosts
- 10. Jenkins Freestyle-Job für Jenkins Backups
- 11. Ausführung der gleichen jenkins.war von verschiedenen Hosts
- 12. entfernte Charakter von Makroparameter
- 13. Angular2 Firebase, entfernte Artikel
- 14. Entfernte Einheit bestand Ausnahme
- 15. Entfernte Artikel mit Microsoft.Build.Evaluation.Project.RemoveItem
- 16. ansible: ansible_ssh_user Überschreibende Werte für Hosts in einer Gruppe
- 17. Separate Hosts-Datei für mehrere ZAP-Daemon
- 18. Maven für Hosts konfiguriert mit noProxyHost
- 19. Ansible: Rolle nur für einige Hosts ausführen
- 20. nginx - Reverseproxy für große Anzahl von Hosts
- 21. Wie für Mac-Hosts in Docker setzen
- 22. Standardwert für ansible Hosts in Playbook?
- 23. Konfiguration Hosts von Ubuntu 14.04 für Puppe
- 24. Batch-Skript für Backup-Hosts-Datei
- 25. ansible Delegierung an andere Hosts
- 26. Hinzufügen von Task-Abschluss-Listener für Service-Task
- 27. Rake-Task NoMethodError: undefinierte Methode `task 'für main: Objekt
- 28. Umleiten von Containern Remoteaufrufen an andere Hosts
- 29. leapyear python task für studenten
- 30. Ant GC Task für mxmlc?
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
@vlp Vielleicht ja, aber wie nur 2 parallel statt alle zu laufen? – yvs
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