Flujo de Integración Continua
A continuación se describe el flujo de integración continua que se ha implementado en el equipo de Proyectos de GM Transport para automatizar el proceso de construcción, pruebas y despliegue de las aplicaciones.
Introducción
Anteriormente, el equipo trabajaba con la integracion de Gitea Actions + Jenkins con este duo de plataformas se lograba realizar la integracion continua de las aplicaciones, pero dada la reciente demanda de aplicacion, donde se requiere rapidez, robustez y consistencia, este flujo esta presentando ser obsoleto.
Para ello, se ha propuesto ahora el trio de plataformas de Gitea + Jenkins Pipeline + Portainer donde se busca realizar la integracion continua de las aplicaciones de forma mas rapida, robusta y consistente. Este trio de plataformas es ideal debido a que se busca mantener un registro de versiones de cada aplicacion, seguridad en el despliegue, minorizar los errores en produccion y garantizar la calidad del producto.
Jenkins Pipeline
No se hablara de su implementacion en codigo, pero si se mencionara que se ha decidido utilizar Jenkins Pipeline para automatizar el proceso de construcción, pruebas y despliegue de las aplicaciones. Tomese esta seccion como referencia y estandar a seguir en la implementacion de los pipelines a futuro en el equipo.
Que es un Pipeline?
Un pipeline es un conjunto de pasos que se ejecutan de forma secuencial para construir, probar y desplegar una aplicación. En este caso, el pipeline se encarga de realizar las siguientes tareas:
- Construcción de la aplicación: Se descarga el código fuente del repositorio de
Gitea, se construye la aplicación y se genera un contenedor de Docker con la aplicación. - Pruebas de la aplicación: Se ejecutan las pruebas de la aplicación para garantizar su calidad.
- Despliegue de la aplicación: Se despliega la aplicación en un contenedor de Docker en
Portainer. - Notificación de resultados: Se envía una notificación por correo electrónico con los resultados del proceso de construcción, pruebas y despliegue.
- Registro de versiones: Se registra la versión de la aplicación en el repositorio de
Gitea. - Notificación de errores: Se envía una notificación por correo electrónico en caso de que se produzca un error en el proceso.
- Notificación de éxito: Se envía una notificación por correo electrónico en caso de que el proceso se haya completado con éxito.
Arquitectura del Pipeline
El pipeline se compone de los siguientes pasos:
- Descarga del código fuente: Se descarga el código fuente del repositorio de
Gitea. - Construcción de la aplicación: Se construye la aplicación y se genera un contenedor de Docker con la aplicación.
- Pruebas de la aplicación: Se ejecutan las pruebas de la aplicación para garantizar su calidad.
- Analisis de rama: Se analiza la rama en la que se encuentra el código fuente.
- (Opcional) Algoritmo de puerto dinamico: Se genera un puerto dinamico para el contenedor de la aplicacion.
- Despliegue de la aplicación: Se despliega la aplicación en un contenedor de Docker en
Portainer. - Analisis de despliegue: Se analiza el despliegue de la aplicacion en
Portainer. - Notificación de resultados: Se envía una notificación por correo electrónico con los resultados del proceso de construcción, pruebas y despliegue.
- Registro de versiones: Se registra la versión de la aplicación en el repositorio de
Gitea. - Notificación de errores: Se envía una notificación por correo electrónico en caso de que se produzca un error en el proceso.
- Notificación de éxito: Se envía una notificación por correo electrónico en caso de que el proceso se haya completado con éxito.
Cada paso del pipeline se ejecuta de forma secuencial, de modo que si un paso falla, el proceso se detiene y se envía una notificación por via Microsoft Teams al grupo correspondiente.
Es importante mencionar que el pipeline se ejecuta de forma automática cada vez que se realiza un cambio en el repositorio de Gitea, de modo que se garantiza la integración continua de las aplicaciones, solo que debe establecerse un claro flujo acorde a las ramas que se hablo anteriormente dada la estructura de las ramas del repositorio.
Portainer
Se ha decidido utilizar Portainer para desplegar las aplicaciones en contenedores de Docker. Portainer es una plataforma de gestión de contenedores que permite desplegar, administrar y monitorizar contenedores de Docker de forma sencilla y eficiente.
El uso de Portainer idealmente estara disponible para cualquier desarrollador, donde podra visualizar el despliegue de su aplicacion en un contenedor de Docker, ademas de poder visualizar las estadisticas de uso de la aplicacion, logs de la aplicacion y realizar pruebas de integracion de la aplicacion, con acceso a la consola del contenedor.
Portainer + Jenkins
El equipo ha establecido ya la conexion de APIs entre Portainer y Jenkins para que el despliegue de la aplicacion sea de forma automatica, donde el desarrollador no tenga que realizar ninguna accion adicional para desplegar su aplicacion, solo realizar un cambio en el repositorio de Gitea y esperar a que el proceso de integracion continua se realice.
Aunque en muchas guias se solicita el PORTAINER_TOKEN este token no sera necesario, ya que se ha establecido una conexion de APIs entre Portainer y Jenkins para que el despliegue de la aplicacion sea de forma automatica, solo se solicita extrema precaucion al realizar cambios en el repositorio de Gitea ya que cualquier cambio puede desencadenar el proceso de integracion continua.
Dado que ademas, en un flujo de pipeline se ejecuta varios pasos, debe tenerse suma precaucion al momento de crear un pipeline ya que cualquier error en el pipeline puede desencadenar un error en el despliegue de la aplicacion.
Es importante mencionar, que todas las pruebas de integracion y despliegue se realizaran en un contenedor TEMPORAL de
Portainer, donde se realizara la prueba de integracion y despliegue de la aplicacion, una vez que se haya realizado la prueba de integracion y despliegue de la aplicacion, se procedera a realizar el despliegue de la aplicacion en un contenedor PERMANENTE dePortainer.
Gitea
Se ha removido la funcionalidad total de Gitea Actions debido al alto coste de mantenimiento y la baja eficiencia en la integracion continua, por lo que se ha decidido utilizar Gitea como repositorio de código fuente de las aplicaciones. Gitea es una plataforma de control de versiones de código fuente que permite a los equipos de desarrollo colaborar en el desarrollo de aplicaciones de forma eficiente.
Gitea + Jenkins
La integracion de Gitea + Jenkins es la base de la integracion continua, para habilitar este proceso, no es necesario realizar ninguna accion adicional, ya que se ha establecido una conexion de APIs entre Gitea y Jenkins para que el proceso de integracion continua se realice de forma automatica. Lo unico que se solicita es que el desarrollador es que cuando vaya crear un pipeline en Jenkins debe elegir la tarea a crear de modalidad MultiBranch Pipeline y seleccionar el repositorio de Gitea donde se encuentra el codigo fuente de la aplicacion, todo lo demas ya viene preconfigurado.
Diagrama de Flujo de Integración Continua
