Jenkins 2 con Docker y GitLab

Anteriormente os hable de Docker, una solución increíble del mundillo de la virtualización, y muchos conoceran al famoso Señor Jenkins, o como yo lo veo de cierta forma la evolucion del siempre fiel CRON de Linux, pues bien! Jenkins cuenta con su imagen oficial basada en Docker que puedes poner en marcha de forma rápida y facilmente, no adentrare demasiado en las funcionalidades de Jenkins y pasare a comentaros como poner en marcha Jenkins desde un contenedor Docker y configurarlo con una cuenta de GitLab para la integración continua durante el proceso de desarrollo de un proyecto, basándonos en que habéis puesto en marcha ya Docker en vuestro servidor u ordenador y en que ya habéis probado un poco el entorno de Docker como os explique en mi post anterior Docker show time!.

1.- Desgarga de la imagen oficial de Jenkins desde los repositorios oficiales de Docker.

El repositorio oficial esta este link https://hub.docker.com/_/jenkins/ en vuestro caso podeis ejecutar simplemente desde la consola de vuestra preferencia el siguiente comando para la descarga de la imagen a vuestro repositorio local:

>_ docker pull jenkins

Luego pueden comprobar que la imagen ha quedado correctamente descargada verificando las imagenes que se encuentran descargadas en vuestro server Docker:

>_ docker images

Para desplegar la imagen de Jenkins asignando un nombre especifico y evitar que se le asigne de forma random ejecutar:

>_  docker run -p 8080:8080 -p 50000:50000 --name jenkins jenkins

Esto os creara el contenedor de Docker con el nombre jenkins en minusculas (importante!) y continuara monstrando el progreso durante la carga de Jenkins inicial, es importante que no salgais de la consola ni la canceleis o cerreis en ningun momento ya que esta primera fase genera un codigo de Unlock que luego necesitareis en el momento en que vayais a acceder a la administracion o gestion de Jenkins, una ves que os aparezca este codigo copiarlo en alguna parte segura para el paso que viene.

Sabiendo que el contenedor esta en marcha podemos acceder con nuestro navegador favorito a la dirección http://localhost:8080 donde lo primero que nos aparecerá sera una pantalla como esta:

Es en Administrator password donde tendreis que colocar el codigo que habeis copiado anteriormente y hacer click a siguiente!

En la proxima ventana se os pregunta si quereis seleccionar de la lista de Plugins disponibles para Jenkins o instalar los predeterminados, partiendo de la idea de que es primera ves que poneis en marcha Jenkins seleccionar los predeterminados.

Veran como comienzan a instalarse de forma automatica un listado de plugins preseleccionados.

Finalizada la instalacion de los plugins por defecto os dara la opcion de crear el usuario administrador, os recomiendo hacerlo de una ves estableciendo el nombre de usuario, contraseña e email que les venga bien, si se saltan este paso y reinician la instancia luego sera complicado recuperar la consola de administracion.

Y listo!, instalacion completada con exito, ahora pasaremos a la configuracion de las credenciales para que nuestro servidor Jenkins este vinculado a nuestra cuenta de GitLab.

Para trabajar con nuestro proyecto alojado en GitLab podemos hacerlo de varias formas, una de ellas seria acceder a nuestro proyecto de GitLab y en Settings / Integrations seleccionar la opción de Jenkins CI (An extendable open source continuous integration server) en este caso lo que haremos sera generar un Token desde nuestro GitLab profile que podremos usar para que Jenkins pueda acceder y comprobar el repositorio, con lo que accedemos a Profile / Settings / Access Tokens, aquí deberemos asignar un nombre al Token que queremos generar, pongamos por ejemplo Jenkins y en el campo Expires at lo dejamos en blanco para que dicho Token no tenga fecha de vencimiento por ahora, ya si deseamos revocarlo en algún momento podremos hacerlo sin problemas desde el botón rojo “Revoke“.

Teniendo esto hecho, ahora podemos volver a la consola de administración de nuestro Jenkins, y lo primero que haremos sera ir a la sección Administrar Jenkins, en el Filtro colocaremos la palabra clave git y buscaremos los plugins de GitLab y GitHub que no tengamos instalados y los seleccionaremos haciendo click al finalizar en Instalar sin reiniciar, después de esto podéis reiniciar el server de Jenkins desde el panel de administración.

Una ves finalizado podemos ir a la sección de configuración de las credenciales para añadir en las credenciales Globales el Token que hemos generado en GitLab que debemos haber apuntado previamente.

Haciendo click en Global nos pasara a la siguiente ventana en la que haciendo click en Add Credentials podremos añadir el Token.

Haciendo click en OK ya tendríamos creada nuestra credencial asociada a nuestro GitLab Token, ahora vamos a crear la tarea de Build automatico, lo haremos sobre un proyecto cualquiera que tengamos en GitLab y en el que cada ves que reciba un commit con un cambio aplicado al proyecto, Jenkins se percate de ello y realice la Build.

Hacemos click en Nueva Tarea añadimos un nombre al proyecto, en mi caso usare un repositorio de un blog hecho en Symfony 2.5.10, así que le pondré de nombre a la tarea symfony, en la sección Configurar el origen del código fuente selecciono la opción Git, añado el link del repositorio en cuestión en formato HTTP (https://jonas.marquez@gitlab.com/jonas.marquez/blog.git), en el campo Navegador del repositorio selecciono de la lista la opción de gitlab y añado la URL del proyecto (git@gitlab.com:jonas.marquez/blog.git), en Versión añado 1.0 ya que es la versión que de momento estoy probando.

Ahora en la sección Disparadores de ejecuciones seleccionamos la opción Build when a change is pushed to GitLab, con esto cada ves que se haga un push al repositorio Jenkins se encargara de descargarlo y hacer la respectiva Build del proyecto o lo que sea que definamos mas adelante.

Luego hacemos click en Apply y luego en Guardar, en principio con esto tendremos la tarea hecha y puesta en marcha, a partir de aquí solo tendremos que ir a nuestro proyecto en local y realizar alguna modificación en el README.md o a cualquier archivo en cuestión, hacer el respectivo commit y push del cambio e irnos a nuestro proyecto recientemente creado activando en la esquina superior derecha el “ACTIVAR AUTO REFRESCO“, a partir de aquí comenzaremos a ver como cada cierto tiempo pasados unos segundos luego de hacer un commit/push nuevo hacia GitLab se van generando Builds nuevas en nuestro proyecto en Jenkins de forma automática, si desean paralizar las Builds del proyecto en determinado momento lo pueden hacer sin problemas haciendo click en Desactivar el Proyecto (Botón Azul/Gris de la derecha).

Y eso es todo! ahora solo queda escribir código y hacer commits/push desde Git y Jenkins ira realizando las Builds y Pruebas por nosotros!

Espero que os sea de ayuda, hasta otra!