Ejecutar job de Jenkins en un docker al vuelo

  Uncategorized

Ejecutar job de Jenkins en un docker al vuelo

En ocasiones conviene ejecutar ciertos jobs de jenkins en un docker y que ese docker se elimine al terminar dicho job. Por ejemplo, compilamos código y subimos el resultado de la compilación a algún repositorio de binarios.

En ese caso nos puede interesar (compilar y subir) que este proceso se haga en un docker volátil para así evitarnos conflictos entre compilaciones anteriores, versiones anteriores del código etc.
Así tenemos la certeza que siempre que se compile se hará sobre un entorno limpio ya que es un Docker que se levanta limpio, se compila y se sube a algún repositorio de binarios mediante curl o alguna herramienta similar.

Para ello necesitaremos dos máquinas, una con Jenkins corriendo y otra con docker instalado y además exponiendo un puerto para la API de docker.

CONFIGURACION EN LA MÁQUINA DE DOCKERS

Primero debemos instalar docker en la máquina donde queremos que se ejecuten los contenedores que jenkins levantará remotamente. Una vez docker esté instalado tenemos que exponer el puerto del demonio de Docker para que nuestro Jenkins pueda acceder a la API de docker remotamente.

Para exponer el puerto, debemos añadir -H tcp://192.168.59.106 en el parámetro ExecStart de systemd del proceso de docker.
Quedará algo así:
Siendo 192.168.1.70:2376 la dirección IP:PUERTO por donde queremos que escuche el demonio de Docker

ExecStart=/usr/bin/dockerd -H fd:// -H tcp://192.168.1.70:2376

CONFIGURACIÓN EN EL JENKINS

En Jenkins tenemos que instalar el plugin de Docker: https://plugins.jenkins.io/docker-plugin/

Una vez instalado el plugin, en /configure vemos que ha aparecido una nueva sección llamada Nube. Tendremos que crear una nueva nube de Docker

NOTA: También debemos tener en cuenta los campos Remove volumes y Pull strategy. Deberemos poner lo que mas nos interese

CONFIGURACION DE UN JOB DOCKERIZADO

Para indicarle a Jenkins que queremos que un job corra sobre un docker al vuelo, deberemos indicarle la label de la nube en la que queremos que se ejecute, en este caso será sobre la nube docker cuya etiqueta es slave

En la configuración del job le asignamos la label de la nube así:

Ahora cada vez que ejecutemos este job, jenkins arrancará un docker en la máquina remota y ejecutará el job dentro de ese docker

1.103 pensamientos sobre - Ejecutar job de Jenkins en un docker al vuelo