Jenkins: revisa Git antes de cada compilation

Actualmente estoy configurando un sistema de continuous integration con Jenkins, y me encontré con un problema:

Casi todos los proyectos dependen de otros proyectos. Entonces, para realizar comstackciones diarias, uso el plugin Build Flow de CloudBees . De hecho, hace su trabajo muy bien, pero no de manera óptima: construye TODOS los trabajos que le digo, sin siquiera consultar a Git si hay algún cambio. Así que me gustaría saber si hay alguna forma de forzar a Jenkins a verificar si hay algún cambio antes de build realmente el proyecto.

PD: Perdón por mi inglés, no soy un hablante nativo

No estoy seguro, si ha mirado las configuraciones en la configuration del trabajo. Hay un lugar para forzar una salida nueva. Tengo svn vinculado, algo similar será con git

enter image description here

Si no, puede search agregar commands manuales como se muestra a continuación. Comtesting si puedes organizar el order de esto para ejecutar primero y luego crea tu tarea

enter image description here

Al final, elegí adherirme a BuildFlow y al lenguaje Groovy, en lugar de usar scripts, pero es solo por conveniencia, y esta solución funcionaría totalmente con el lenguaje shell. Además, usar BuildFlow le permite usar Parallel (), para iniciar múltiples trabajos al mismo time.

Aquí está mi solución:

Encontré el plugin Jenkins Poll SCM , que sondea el SCM antes de intentar comstackrlo (solo si es necesario).

El único problema con el plugin Build Flow de CloudBees es que no espera a que se completen los trabajos anteriores, ya que no estoy usando el método build (). Para superar este problema, hice mi propio método buildWithPolling (), que espera a que se realice el trabajo antes de continuar. El único inconveniente de mi método es que no espera a que finalicen los trabajos (pero no sé si lo hace con el método build () …). Aquí está el código de mi método:

def buildWithPolling(project) { //Connection to the URL starting the polling, and starting the building if needed def address = "http://localhost:8080/jenkins/job/" + project + "/poll" println "Connexion à " + address + " pour scrutation du Git et build si besoin est." def poll = new URL(address) poll.openStream() //Declaration of variables used to know if the build is still running, or if it is finished boolean inProgress = true def parser = new XmlParser() def rootNode = null; address = "http://localhost:8080/jenkins/job/" + project + "/lastBuild/api/xml?depth=1&tree=building&xpath=*/building" while(inProgress) { //A 5 seconds pause, because we don't need to overload the server sleep(5000) //Request sent to the server, to know if the job is finished. def baos =new ByteArrayOutputStream() baos << new URL(address).openStream() rootNode = parser.parseText(new String(baos.toByteArray())) inProgress = rootNode.text().toBoolean() } } 

¡Probablemente no es la mejor solución, pero está funcionando para mí!