Subversión y Jenkins: cómo comunicarse entre ellos

publicado a la‎(s)‎ 17 sept 2012, 10:34 por Eliu Montoya   [ actualizado el 20 sept 2012, 21:40 ]
Tema: Como poder indicarle a Jenkins iniciar una actividad cuando Subversion ha sido actualizado
Categoria: Tip // Integración Continua
Tecnologías / Componentes: Subversion, Jenkins.


Siguiendo con el tema de integración continua en este tip explicaré como poder hacer la comunicación entre Subversion y Jenkins.

Principalmente existen dos maneras para que al momento de hacer un" commit" a subversion Jenkins pueda iniciar un JOB (actividad) que esté ligado a ese repositorio:

Jenkins como inicializador

El primero es el más nativo y es por medio de que Jenkins escaneará cada determinado tiempo si hubo algún cambio en el repositorio. Esto lo hacemos indicándole a Jenkins cuál es el repositorio donde obtendrá el código fuente y el tiempo que realizará cada inspección de cambio.

Una de las desventajas de este método es la carga constante que se está realizando, tanto del lado de Jenkins como de Subversion. Además, existe una latencia entre el momento que se subieron los cambios y el que le toma a Jenkins realizar la inspección.  

Subversion como inicializador

El otro método es mucho más dinámico en tiempo real y eliminando la carga constante. Esto se logra mediante la instrucción que Subversion le da a Jenkins en el momento que algún repositorio sufrió una actualización.
Por lo tanto, en lugar que la comunicación sea desde Jenkins hacia Subversion preguntando si hubo modificación por cada repositorio configurado, en este método es desde Subversion hacia Jenkins dando la instrucción de que cierto repositorio sufrió una actualización para que Jenkins busque los JOBS que estén asociados para ejecutarlos. De esta manera se logra la sincronización en tiempo real.

Para lograr ésto, hay que configurar un POST-HOOK en cada repositorio de subversion, ademas de la configuración básica en jenkins donde se indica el repositorio y habilitando la casilla de "Poll SCM" para habilitar que Subversion sea el inicializador de ese JOB.

El hook lo que hace a grandes rasgos es explotar la funcionalidad que ofrece jenkins de buscar jobs asignados a cierto repositorio asi como su ejecución remota. Esta funcionalidad es mediante peticiones POST que ya Jenkins expone de fábrica.  Asi que el hook es un llamado de CURL o WGET a esta funcionalidad. 

De esta manera podemos eficientar la comunicación entre Subversion y Jenkins para la ejecución de trabajos al momento de actualizar un repositorio.

Este HOOK es el siguiente:


----- Inicia código

#!/bin/sh
JENKINS_SERVER={URL_SERVIDOR_JENKINS}
REPOS="$1"
REV="$2"
UUID=`svnlook uuid $REPOS`
/usr/bin/wget --header "Content-Type:text/plain;charset=UTF-8" --post-data "`svn
look changed --revision $REV $REPOS`" --output-document "-" --timeout=2 $JENKINS
_SERVER/subversion/${UUID}/notifyCommit?rev=$REV

----- Fin de código

Se deberá cambiar {URL_SERVIDOR_JENKINS} por la dirección real del servido rde Jenkins. Ejemplo: http://servidorjenkins.com/

Este código deberá salvarse en un archivo llamado post-commit
y guardarse dentro la carpeta hooks/ que se encuentra en la carpeta del proyecto en los repositorios de Subversion.
Ejemplo:
/var/svn/MiProyecto/hooks/post-commit

Al ejecutar este script, Jenkins buscará JOBS que estén asociados a este proyecto (Mediante el Repository URL en la configuración del proyecto) y comenzará su ejecución (hay que seleccionar la casilla "Poll SCM" dentro de la configuración del proyecto en Jenkins)


Post Recientes

TituloDescripciónCategoriaTecnologíasTipoFecha de publicación
Subversión y Jenkins: cómo comunicarse entre ellos Como poder indicarle a Jenkins iniciar una actividad cuando Subversion ha sido actualizado Integración continua Subversion, Jenkins Tip 17 de septiembre de 2012 
Jenkins & Sonar: Status en jenkins refleje alertas de sonar Cómo poder mostrar en Jenkins el status real dependiendo de las alertas de Sonar Integración continua Subversion, Jenkins Tip 29 de agosto de 2012 
Web Tiers: Explicación Explicación sobre el concepto "tiers" en proyectos web. Diseño Servlets Explicación 1 de septiembre de 2009 
Tipo de Pruebas para Desarrollo de Software Explicación sobre los diferentes tipos de pruebas que se pueden hacer en el desarrollo de software Calidad XUnit, Sonar, PMD, Findbugs, Thucydides, Checkstyle, Cobertura Explicación 11 de septiembre de 2012 
Integración Continua: Promociones y Líneas de Producción  Explicación del concepto de promociones y pipelines en Integración Continua Integración continua Jenkins y plugins Explicación 27 de septiembre de 2012 
Mostrando 5 elementos de la página Indice de posts ordenados por hora de edición. Ver más »

Comments