Gibt es einen Weg in Jenkins (Hudson), einen Job von einem anderen Job zu deaktivieren?
Grundsätzlich haben wir eine Build-Umgebung, die das Standard-Build / Testing durchführt. Wir verwenden auch dieselbe Jenkins-Instanz, um andere Dinge zu tun, z. B. neue Versionen unseres Produkts automatisch zu installieren (was für einige der automatisierten Tests benötigt wird). Wenn wir einige der "Extra" -Aufträge ausführen, möchten wir die "Standard" -Aufträge vorübergehend deaktivieren (und sie dann später automatisch aktivieren).
Idealerweise würde es bei einem Job einen zusätzlichen Build-Schritt geben, um "XYZ-Job deaktivieren" zu sagen. Oder wenn es einen Weg durch ANT oder etwas gibt, um Jenkins mitzuteilen, einen Job zu deaktivieren, würde das auch funktionieren.
Aktualisierung: Es sieht so aus, als gäbe es ein paar Plugins, die verhindern, dass zwei Jobs gleichzeitig laufen, aber ich muss wirklich:
Ich habe einen möglichen Ansatz gefunden, der die jenkins-cli (Befehlszeilenschnittstelle) verwendet. Ich habe diesen Build-Schritt hinzugefügt (für mich war es ein Windows-Batch-Befehl, obwohl ich vielleicht ein Skript oder etwas eleganteres daraus mache):
%Vor%Ich habe nicht untersucht, wie ich den Weg zu Jenkins finden kann, aber das sollte nicht zu schwer sein.
Hier finden Sie einige Informationen zum CLI . Sie können auch zu Ссылка für einige der verfügbaren Befehle gehen.
Sie können ein Groovy-Skript als Vorbereitungsschritt ausführen. Ich habe das ein paar Mal in meiner Firma gemacht. Sie müssen das Groovy-Plugin installieren. Dann können Sie einen Pre-Build-Schritt "Execute system groovy script" hinzufügen und dort können Sie so etwas ausführen:
%Vor%Um Jobs nach dem Build zu aktivieren, fügen Sie einen Post-Build-Schritt hinzu und führen Sie
aus %Vor%Wenn Sie einen Job wünschen, der nur andere Build-Jobs aktiviert oder deaktiviert, dann wählen Sie keine Pre- oder Post-Build-Schritte, sondern einen normalen Build-Schritt mit einem System-Groovy-Skript.
Mit Groovy-Skripten können Sie viel mehr denken. Es lohnt sich, mehr darüber zu lesen.
Wir haben dazu das Port Allocator Plugin verwendet. Dadurch können Ihre Jobs für die Dauer ihres Laufs einen TCP-Port "greifen", was bedeutet, dass kein anderer Job diesen Port für die Dauer übernehmen kann. Dadurch wird die parallele Ausführung von zwei Jobs blockiert, die versuchen, den gleichen Port zu erhalten.
Es gibt auch das Locks and Latches Plugin , das perfekt klingt, aber wir fand es schwierig zu bedienen, und es scheint nicht mehr gepflegt werden.
Aktualisierung nach der Klärung der Frage:
Sie können einen Job remote aktivieren / deaktivieren, indem Sie Jenkins HTTP API verwenden. Wenn Sie zu einem beliebigen Job navigieren und dann api
am Ende der URL setzen, sehen Sie Anweisungen zu den HTTP-Anforderungen, die Sie dazu machen müssen. Zum Beispiel: Ссылка (schau auf das Ende dieser Seite - im Grunde POST to <job_url>/disable
) .
Es sollte einfach sein, einen Build-Schritt in einem Job zu verwenden, um curl oder ähnliches mit den entsprechenden Anforderungsdaten aufzurufen.
Ich hatte das gleiche Problem und löste es mit dunnis Antwort, ich muss darauf hinweisen, dass es nur funktionierte, wenn ich Wählen Sie "Groove-Skript ausführen" als meinen Build-Schritt. Wenn ich "Groovy-Skript ausführen" wähle, wird der Fehler von Arun gemeldet Sangal : "Gefangen: groovy.lang.MissingPropertyException: Keine solche Eigenschaft: Jenkins für Klasse: hudson8158411085491171644".
Mein Groovy-Code sieht so aus:
%Vor%Dies ist mit dem Job-DSL-Plugin möglich, ohne Anmeldeinformationen anzugeben.
Das zu verwendende DSL-Skript wäre:
%Vor%pipelineJob
anstelle von job
. "jobname"
Ordner enthalten, die den Jenkins-Stamm als Referenz verwenden. disabled(false)
. Tags und Links jenkins