2009-08-19 5 views
3

Wir haben einen großen Hudson eingerichtet mit vielen geplanten Builds die ganze Zeit laufen. Momentan versuche ich, einen Build zu bekommen, um richtig zu funktionieren, aber ich muss gelegentlich warten, wenn ein geplanter Build in die Warteschlange kommt. Gibt es eine Möglichkeit, alle geplanten Builds zu deaktivieren, sodass ich mich auf meinen mühseligen Build konzentrieren kann, ohne die "cron" -Einstellungen jedes einzelnen Builds anzupassen?Kann ich Hudsons geplante automatische Builds auf einmal deaktivieren?

+0

Ich fügte groovy Antwort hinzu. Ich hoffe, Sie finden es nützlich. – Jayan

Antwort

4

Sagen Sie es zum Herunterfahren vorzubereiten.


Bearbeiten von OP (banjollity)
Es ist nicht perfekt, aber ich denke, das ist eine vernünftige „wenige Mausklicks Lösung mit einer Standard-Installation“ Art von Lösung, damit die akzeptierten Antwort.

  1. Queue bis ein Job
  2. Hudson Sagen herunterzufahren vorzubereiten. Dies verhindert, dass andere Jobs in der Zwischenzeit ausgeführt werden.
  3. Diagnose Fehler mit meinem Job, neuen Code, der könnte beheben Sie es beheben. (Ich liebe meine Arbeit).
  4. Abbrechen Hudson herunterfahren.
  5. Goto Schritt 1.
+0

So weit so gut mit diesem. Es hat die anderen Jobs gestoppt, aber ich habe immer noch die Schlange stehen lassen, die ich will. – banjollity

+0

Schön - ich wusste nicht, dass du das kannst. +1 –

0

Ich sehe keinen direkten Weg, aber Sie könnten etwas schreiben, das die config.xml für alle Jobs aktualisiert.

In jedem Job-Verzeichnis in Hudson gibt es eine config.xml. Das <Projekt> hat ein Element namens disabled, das Sie auf True aktualisieren können, wodurch das Build deaktiviert wird.

Nicht ideal, aber sobald Sie das Skript haben, um ein Verzeichnis zu gehen und den Wert von deaktiviert ändern, können Sie es immer verwenden.

4

Das 'configuration slicing' Plugin Ich trug können Sie die cron-Einstellungen vieler Arbeitsplätze gleichzeitig ändern. Dies sollte Ihnen ermöglichen, die Bulk-Änderungen vorzunehmen, die Sie möchten.

2

Mikezx6r Vorschlag Erweiterung auf, kam ich nur mit einem schnellen Verfahren auf alle baut eine bestimmte Zeichenfolge passend zu deaktivieren:

[[email protected] jobs] $ for i in *build_name*; do sed -i s/"disabled>false"/"disabled>true/" $i/config.xml; done

Sie auch durch spezifische Build-Namen in die „für“ Schleife durchlaufen könnte:

[[email protected] jobs] $ for i in build1 build2 build3; do sed -i s/"disabled>false"/"disabled>true/" $i/config.xml; done

Sie können es zuerst testen, um zu sehen, was es, indem sie ein „Echo“ vor sed tun:

[[email protected] jobs] $ for i in build1 build2 build3; do echo sed -i s/"disabled>false"/"disabled>true/" $i/config.xml; done

Umgekehrt können Sie alle vergleichbaren Jobs durch den Wechsel rund um die sed-Skript erneut aktivieren:

[[email protected] jobs] $ for i in build1 build2 build3; do sed -i s/"disabled>true"/"disabled>false/" $i/config.xml; done

0

Eine Suche nach etwas ähnliches brachte mich auf diese Frage, und ich erkannte es ein weiterer Vorteil ist von Michael Donohues Antwort (und dem Plugin, das er beigesteuert hat).

Mit "Konfiguration Slicing" ist es einfach, eine Teilmenge Ihrer Jobs auf einmal zu deaktivieren. Genau das brauchte ich, um 7 von 8 Jobs zu deaktivieren, damit ich am 8. arbeiten konnte. Danke Michael!

0

Dies kann mit der Konsole von jenkins erfolgen. Es läuft groovy Script und macht fast alles.

Das folgende Skript durchläuft alle Projekte. Überprüfen Sie, ob es TimerTrigger hat. (Man kann diese Prüfung anderer Trigger auch erweitern)

import hudson.model.Hudson 
import hudson.model.Project 
import hudson.triggers.TimerTrigger 
import hudson.triggers.Trigger 
import hudson.triggers.TriggerDescriptor 

//All the projects on which we can apply the getBuilders method 
def allProjects = Hudson.instance.items.findAll { it instanceof Project } 
def projectsToWorkOn = []; 
allProjects.each { Project project -> 
    Map<TriggerDescriptor, Trigger> triggers = 
      project.getTriggers(); 
    triggers.each { trigger -> 

     if (trigger.value instanceof TimerTrigger) { 
      projectsToWorkOn.push(project) 


     } 

    } 
} 


projectsToWorkOn 
     .each { Project project -> 

    project.disable(); 
    project.save() 
}