2012-05-27 8 views
9

PROBLEMA¿Cómo hacer un trabajo en Jenkins/Hudson para supervisar otros trabajos y decidir si se construye o no?

Teniendo en cuenta que todos los trabajos tienen cuerdas LEVEL_X en que es el nombre del trabajo, donde X es un número> 1. Quiero cada trabajo con X = n para vigilar cada trabajo con X = n-1, y empezar a construir si cada de ellos está terminado con éxito. Y quiero que el trabajo con X = n supervise los otros trabajos con un intervalo de 1 minuto.

En primer lugar, estoy interesado en saber cuál es la mejor manera de hacerlo, en segundo lugar quiero la solución si se puede implementar mediante un pequeño script, tal vez un script maravilloso que se puede ejecutar en system groovy script usando el MARAVILLOSO ENCHUFAR.

Respuesta

35

Éstos son algunos consejos y fragmentos de código:

  • Hay una consola maravillosa Guión en http://<jenkins-server>/script que le ayudará con la depuración de secuencias de comandos.
  • Aquí hay un enlace a Jenkins Java API.
  • Código fragmento que da salida a todos los nombres de los trabajos:

    def hi = hudson.model.Hudson.instance 
        hi.getItems(hudson.model.Project).each {project -> 
        println(project.displayName) 
    } 
    
  • Fragmento de código que extrae n de LEVEL_n (implementado como cierre):

    def level = { name -> 
        def ret = 0 
        name.eachMatch(~'LEVEL_([1-9]+[0-9*])', {ret = it[1].toInteger()}) 
        return ret 
    } 
    
  • Fragmento de código que obtiene los estados para todas las últimas construcciones:

    def hi = hudson.model.Hudson.instance 
    hi.getItems(hudson.model.Project).each {project -> 
        println(project.lastBuild.result) 
    } 
    
  • Enlace al método que starts a build.

Nota: las cosas se ponen un poco más peludas si está utilizando Matrix compilaciones. Pero mientras no lo haga, esto debería ser suficiente.

+0

Gracias, esa es una buena forma de acceder a la información para trabajos. – Moni

+2

+1 para la url del script del servidor jenkins: la consola del nodo groovy no tiene ningún valor, ya que no importa todas las clases. – Epu

+0

En la consola groovy encuentro que el script/comando completo debe estar todo en una línea, de lo contrario, varios errores de sintaxis. p.ej. el fragmento del nombre del trabajo me funciona así: '' 'def hi = hudson.model.Hudson.instance; hi.getItems (hudson.model.Project) .each {project -> println (project.displayName)} '' ' – gaoithe

Cuestiones relacionadas