En esta serie de artículos quiero construir una pipeline de integración continua basada en Jenkins sobre Docker.
El objetivo es desplegar el máximo número de aplicaciones sobre Docker relacionadas con un proceso de integración continua para tener un pipeline funcional. Durante el proceso surgirán problemas de integración entre las diferentes aplicaciones que será interesante resolver y que me ayudarán a conocer mejor las aplicaciones y su uso sobre Docker.
He elegido construir una aplicación en Java usando Maven por ser uno de los escenarios más representativos.
En cuanto a las herramientas, a continuación explico porqué las he seleccionado.
Algunos de los factores que tenido en cuenta a la hora de seleccionarlas:
- Gratuita (preferiblemente, de código abierto)
- Desplegable usando Docker
- Representativa (uso generalizado y no específico)
Gogs
Gogs es un sistema de control de versiones basado en Git de código abierto. Está escrito en Go y es muy ligero (puedes ejecutarlo en una Rapsberry Pi).
A nivel de funcionalidades, Gogs es prácticamente equivalente a GitHub, que se ha convertido en el estándar para almacenar código.
Otra opción interesante es BitBucket que permite repositorios privados en la versión gratuita (a diferencia de GitHub).
Sin embargo, es probable que tu organización quiera tener el código fuente de las aplicaciones desarrolladas bajo su control, por lo que he preferido una opción que instalable on premises.
Otra alternativa todo en uno es GitLab, pero creo que lo más habitual es que en la organización es trabajar con varias herramientas independientes orquestadas por Jenkins.
SonarQube
SonarQube es una herramienta de inspección contínua de la calidad del código. Aunque recientemente ha cambiado el modelo de licenciamiento, sigue ofreciendo una versión free limitando el número de analizadores de código soportados.
Jenkins
Jenkins es el orquestador que se encarga de gestionar el resto de herramientas, el anillo único que los domina a todos ;)
Aunque existen otras herramientas de integración contínua Jenkins es sin duda la estándar, tanto por veteranía, documentación y cantidad de plugins.
Nexus
Nexus Repository OSS es un repositorio de los artefactos generados por el pipeline. Nexus proporciona otras funcionalidades, pero en este estenario será el punto final del _pipeli
Otras herramientas
Aunque no son esenciales para el pipeline, usaremos MailDev como sustituto del servidor de correo y Portainer, para simplificar en la gestión de los contenedores.
MailDev simula un servidor de correo, por lo que podemos configurarlo en todas las herramientas que necesiten enviar notificaciones durante la fase de desarrollo. MailDev también proporciona un acceso web con diferentes herramientas para poder visualizar los mails recibidos de diferentes formas (HTML, sólo texto, simulando un dispositivo móvil con diferentes tamaños de pantalla, etc).
Portainer permite gestionar Docker de manera gráfica a través del navegador. Aunque en el tutorial siempre usaremos la línea de comandos, Portainer ofrece una alternativa sencilla y cómoda para conectar con un contenedor, borrar volúmenes no usados por ningún contenedor, etc…
Contenedores
Todas las herramientas se pueden desplegar como contenedores, por lo que usaremos Docker como gestor de contenedores.
Resumen
En lo siguientes artículos de esta serie, nos adentraremos en los diferentes aspectos de despliegue y configuración de las herramientas del pipeline.