Como se menciona en "Las encuestas deben morir: desencadenar compilaciones de Jenkins desde un gancho de git ", puede notificar a Jenkins sobre una nueva confirmación:
Con el último complemento de Git 1.1.14 (que acabo de lanzar ahora), ahora puede hacerlo más fácilmente con solo ejecutar el siguiente comando:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>
Esto escaneará todos los trabajos configurados para verificar la URL especificada, y si también están configurados con sondeo, activará inmediatamente el sondeo (y si eso encuentra un cambio que vale la pena construir, se activará una compilación a su vez. )
Esto permite que un script permanezca igual cuando los trabajos van y vienen en Jenkins.
O si tiene múltiples repositorios en una sola aplicación de host de repositorio (como Gitosis), puede compartir un solo script de enlace posterior a la recepción con todos los repositorios. Finalmente, esta URL no requiere autenticación incluso para Jenkins seguro, porque el servidor no usa directamente nada que el cliente esté enviando. Ejecuta un sondeo para verificar que haya un cambio, antes de que realmente comience una compilación.
Como se mencionó aquí , asegúrese de usar la dirección correcta para su servidor Jenkins:
dado que estamos ejecutando Jenkins como servidor web independiente en el puerto 8080, la URL debería haber estado sin la /jenkins
siguiente:
http://jenkins:8080/git/notifyCommit?url=git@gitserver:tools/common.git
Para reforzar ese último punto, ptha agrega en los comentarios :
Puede ser obvio, pero tuve problemas con:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>.
El parámetro url debe coincidir exactamente con lo que tiene en la URL del repositorio de su trabajo de Jenkins.
Al copiar ejemplos, omití el protocolo, en nuestro caso ssh://
, y no funcionó.
También puede usar un gancho simple posterior a la recepción, como en " Compilaciones basadas en inserción usando Jenkins y GIT "
#!/bin/bash
/usr/bin/curl --user USERNAME:PASS -s \
http://jenkinsci/job/PROJECTNAME/build?token=1qaz2wsx
Configure su trabajo de Jenkins para poder "Activar compilaciones de forma remota" y usar un token de autenticación ( 1qaz2wsx
en este ejemplo).
Sin embargo, este es un script específico del proyecto, y el autor menciona una forma de generalizarlo.
La primera solución es más fácil ya que no depende de la autenticación o de un proyecto específico.
Quiero verificar en el conjunto de cambios si al menos un archivo java está allí, la compilación debería comenzar.
Supongamos que los desarrolladores cambian solo archivos XML o archivos de propiedades, entonces la compilación no debería comenzar.
Básicamente, su script de compilación puede:
- poner notas de "compilación" (ver
git notes
) en la primera llamada
- en las llamadas posteriores, agarra la lista de confirmaciones entre
HEAD
de su candidato para la rama de construcción y la confirmación hace referencia el git notes
'construir' ( git show refs/notes/build
): git diff --name-only SHA_build HEAD
.
- su script puede analizar esa lista y decidir si necesita continuar con la compilación.
- en cualquier caso, crea / mueve tu
git notes
' build
' a HEAD
.
Mayo de 2016: cwhsu señala en los comentarios la siguiente URL posible:
simplemente podría usar curl --user USER:PWD http://JENKINS_SERVER/job/JOB_NAME/build?token=YOUR_TOKEN
si configura la configuración del disparador en su elemento
Junio de 2016, polaretto señala en los comentarios :
Quería agregar que con solo un poco de script de shell puede evitar la configuración manual de URL, especialmente si tiene muchos repositorios en un directorio común.
Por ejemplo, usé estas expansiones de parámetros para obtener el nombre del repositorio
repository=${PWD%/hooks};
repository=${repository##*/}
y luego úsalo como:
curl $JENKINS_URL/git/notifyCommit?url=$GIT_URL/$repository