Jenkins es un servidor de automatización escrito en java. Con el increíble soporte de la comunidad y una gran cantidad de plugins, se ha convertido en la herramienta mas popular para implementar la fase de integración continua en el proceso de entrega continua. Anteriormente conocido como Hudson, fue renombrado después de ser adquirido por oracle y estos decidieran desarrollarlo como software propietario. Jenkins se mantiene bajo la licencia MIT y es altamente valorado gracias a su simplicidad, flexibilidad y versatilidad.

El proceso de instalación es simple y rápido y existen diferentes métodos para hacerlo, pero siguiendo la linea de posts anteriores voy a explicar como hacerlo con docker ya que es la forma mas fácil, rápida y confiable que tenemos de instalarlo. Adicionalmente después también se explica como instalarlo en un sistema operativo sin docker.

Requerimientos

  • Java 8
  • 256MB de memoria RAM
  • 1GB+ de espacio en disco duro

Cabe mencionar que estos requerimientos dependen mucho de lo que planeamos hacer con Jenkins. Estos requerimientos son los mínimos y es recomendable ajustarlos conforme el equipo y el numero de usuarios que envían hacen uso del mismo crece. Adicionalmente es requerido que Jenkins tenga suficiente ancho de banda para funcionar ya que estará descargando toneladas de código.

Instalación En Docker

Primero necesitamos preparar los directorios en el sistema operativo anfitrión que serán utilizados para la gestión de los volúmenes del contenedor, asumiendo que estamos en un sistema basado en debian ocupamos los siguientes comandos:

$ mkdir $HOME/jenkins_home
$ chown 1000 $HOME/jenkins_home

Jenkins esta disponible de inmediato en DockerHub por lo que instalarlo se hace cuestión de un solo comando en la terminal.

docker run -p 8080:8080 -p 50000:50000 -v /tu_home/jenkins_home:/var/jenkins jenkins

Necesitamos especificar los puertos de jenkins (como lo hemos visto en posts previos) El primero (8080) es para visibilidad de Jenkins fuera del contenedor y el segundo es para comunicarse con otros servidores de Jenkins que sirven como “slave” a este servidor, es decir, como un servidor de builds auxiliar cuando este tenga mucho trabajo. Finalmente especificamos el volumen sobre el cual deseamos persistir los datos que Jenkins genera para su utilización, tales como: configuración, procesos de compilación y logs.

Para revisar que todo ha ido bien, podemos acceder a los logs de inicialización de Jenkins

$ docker logs jenkins

> Running from: /usr/share/jenkins/jenkins.war
> ...

y ademas podremos acceder a la interfaz de Jenkins en nuestro navegador a través del puerto 8080.

Las ventajas de tener una instalación de Jenkins usando docker son varias pero podemos destacar que nos facilita recuperarnos de fallos rápidamente. Si por alguna razón nuestra instalación de Jenkins falla no hay porque perder tanto tiempo reparandola, si no mas bien destruir la imagen y volverla a crear (recuerden que los datos persisten en el volumen y no dependen directamente de la imagen).

Ademas podemos configurar imágenes docker a gusto y hacer la gestión de la configuración parte de nuestro proceso de integración continua también.

Instalación sin usar docker

Así que no planeas usar docker para instalar Jenkins?

Bueno, supongo que tienes una muy buena (o mala) razón para hacerlo, pero con el siguiente hechizo en una terminal lo puedes conseguir igualito como si fuera docker, excepto que sin las ventajas del aislamiento.

$ wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
$ sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
$ sudo apt-get update
$ sudo apt-get install jenkins

Estos comandos efectuaran las siguientes acciones en su sistema operativo:

  • Instalar jenkins como un daemon lanzado al iniciar el sistema operativo. /etc/init.d/jenkins
  • Crea un usuario jenkins para correr este servicio
  • Envía todos los logs al archivo /var/log/jenkins/jenkins.log
  • Crea una configuración dogmática en /etc/default/jenkins
  • Configura el puerto 8080 para la interfaz de jenkins

Por lo que al terminar, ya pueden usar jenkins con normalidad.