2012-05-27 8 views
9

PROBLEMWie macht man einen Jenkins/Hudson-Job, um andere Jobs zu überwachen und zu entscheiden, ob er bauen soll oder nicht?

darauf, dass alle Arbeitsplätze String LEVEL_X darin Jobname ist, wobei X eine Zahl> 1. ich jeden Job mit X will = n jeden Job mit X = n-1, Überwa und starten Sie den Aufbau, wenn jeder von ihnen ist mit Erfolg beendet. Und ich möchte den Job mit X = n die anderen Jobs im Abstand von 1 Minute überwachen.

Zunächst interessiert mich, was der beste Weg ist, das zu tun, zweitens möchte ich die Lösung, wenn man durch ein kleines Skript, vielleicht ein grooviges Skript, das in system groovy script mit dem GROOVY ausgeführt werden kann, implementiert werden kann PLUGIN.

Antwort

35

Hier sind einige Hinweise und Code-Schnipsel:

  • Es gibt eine Groovy Script-Konsole bei http://<jenkins-server>/script, die Sie mit dem Debuggen Ihrer Skripte helfen.
  • Hier ist ein Link zu Jenkins Java API.
  • -Code-Schnipsel, die alle Jobnamen ausgibt:

    def hi = hudson.model.Hudson.instance 
        hi.getItems(hudson.model.Project).each {project -> 
        println(project.displayName) 
    } 
    
  • -Code-Snippet, das n von LEVEL_n (implementiert als Verschluss) extrahiert:

    def level = { name -> 
        def ret = 0 
        name.eachMatch(~'LEVEL_([1-9]+[0-9*])', {ret = it[1].toInteger()}) 
        return ret 
    } 
    
  • -Code-Schnipsel, die Status für alle aktuellen bekommt baut:

    def hi = hudson.model.Hudson.instance 
    hi.getItems(hudson.model.Project).each {project -> 
        println(project.lastBuild.result) 
    } 
    
  • Link zur Methode starts a build.

Hinweis: Die Dinge werden ein bisschen haariger, wenn Sie Matrix-Builds verwenden. Aber solange du das nicht tust, sollte das ausreichen.

+0

Danke, das ist eine gute Möglichkeit, auf Informationen für Jobs zuzugreifen. – Moni

+2

+1 für die Jenkins-Server-Skript-URL - die Knoten groovy Konsole ist wertlos, da es nicht alle Klassen importiert. – Epu

+0

In der groovy Konsole finde ich das vollständige Skript/Kommando muss alles in einer Zeile sein, sonst diverse Syntaxfehler. z.B. Der Job-Snippet funktioniert für mich so: '' 'def hi = hudson.model.Hudson.instance; hi.getItems (hudson.model.Project) .each {Projekt -> println (project.displayName)} '' ' – gaoithe