Deaktiviere Jenkins Job von einem anderen Job

9

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:

  1. Führen Sie Job A aus, der Job 1 deaktiviert
  2. Mach etwas außerhalb von Jenkins, basierend auf der Ausgabe von Job A
  3. Führen Sie Job B aus, der den Job 1 erneut aktiviert
Matt N 28.12.2011, 21:09
quelle

6 Antworten

5

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.

    
Matt N 29.12.2011, 02:32
quelle
22

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.

    
dunni 29.12.2011 08:24
quelle
4

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.

    
Matthew Gilliard 28.12.2011 21:12
quelle
2

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%     
Emerson Takahashi 08.04.2016 19:27
quelle
0

Sie können das Build-Blocker-Plugin Ссылка

ausprobieren     
Vel Ganesh 25.05.2016 10:00
quelle
0

Dies ist mit dem Job-DSL-Plugin möglich, ohne Anmeldeinformationen anzugeben.

Das zu verwendende DSL-Skript wäre:

%Vor%
  1. Dies ist für Freestyle-Jobs. Wenn Sie beispielsweise einen Pipeline-Job deaktivieren müssen, verwenden Sie pipelineJob anstelle von job .
  2. Normalerweise muss "jobname" Ordner enthalten, die den Jenkins-Stamm als Referenz verwenden.
  3. Um einen Job erneut zu aktivieren, verwenden Sie disabled(false) .
Javier Garcés 06.11.2017 18:42
quelle

Tags und Links