Gitlab, Web Hooks y Jenkins

Desde hace un largo tiempo venimos usando en 42mate Gitlab como nuestra herramienta de control de versiones y Jenkins como servidor de integración continua. La selección de las mismas fue principalmente por que son Open Source y por que están mas que aceptadas por la comunidad, nunca nos arrepentimos de la elección que tomamos.

Hoy me puse a ver alternativas para disparar un deploy en jenkins desde Gitlab después de cada commit y me encontré con que Gitlab implementa web hooks.

La idea es que Gitlab, después de cada push al repositorio, envíe una petición POST a un server remoto, en este caso Jenkins, con la información del push que disparó el evento, el servidor remoto recibe dicha información y toma alguna acción al respecto, en este caso dispara un deploy.

Para que jenkins sea capaz de manejar la request enviada por Gitlab debemos tener instalados el Plugin de Git y el Plugin para Gitlab Hooks, el segundo es el encargado de hacer la magia y manejar la request.

Manos a la Obra

Para poner en marcha esto necesitamos obviamente un server Gitlab con nuestro repositorio y un Job un Jenkis ya totalmente armado para deployear desde el repositorio en Gitlab. Tambien vamos a tener que instalar y configurar el plugin para los hooks “Gitlab Hook Plugin”

Cabe aclarar que el Job en Jenkins debe estar conectado directamente al repositorio en gitlab dado que la información de conexión es utilizada por el plugin de jenkins para gitlab. Para esto deberán tener instalado el plugin de Git, así tienen disponibles las opciones para conectar el Job con Gitlab. Del lado de gitlab van a necesitar un usuario Jenkins configurado para que el usuario con el que se corren los Jobs en Jenkins pueda clonar y pullear cambios del repo.

Para instalar los plugins en jenkins deben ir a Manage Jenkins, Plugins, Buscar el plugin en Available, seleccionarlos, instalar y reiniciar jenkins.

install

Después de instalarlos

installed

Una vez reiniciado jenkins deberían listarse en installed.

Screen Shot 2013-09-08 at 8.48.08 PM

Una vez que tengan el Job listo y los plugins instalados el siguiente paso será ir a Gitlab, entrar a su repositorio > settings > web hooks.

webhook1

Aquí deberán ingresar la url de su jenkins para que se ejecute el plugin de web hooks, por ejemplo :

http://[dominio]/gitlab/build_now

Poner en dominio la dirección a su Jenkins.

Una vez que esta guardado pueden proceder a testear el web hook con el boton que se provee en dicha pantalla o probar pushear algo al repositorio y ver como en pocos segundos se dispará el proceso de build en Jenkins.

Cerrando

Como ven es muy muy sencillo, mucho mas que enganchar un hook post commit en SVN, y muy eficiente, mucho mas eficiente que verificar si hay cambios cada x segundos.

Tengan en cuenta que esto va a buildear siempre siempre después de cada push al branch que usen para que sea deployeado, consideren los riesgos que pude traer esto.

Para entornos de integración del trabajo de los developers usenlo sin miedos.

Para entornos de QA, recomendaría que usen un branch aparte en el cual se pushen los cambios listos para ser promovidos a QA, previa verificación del equipo.

Para producción no lo recomiendo por mas que tengan una mega batería de tests, usen un branch separado para producción o cualquier otra cosa que les haga pensar que lo pueden hacer, si lo hacen felicito por los cojones bien grande que deben tener :).

Share

Leave a Reply

Your email address will not be published. Required fields are marked *