Implementación y gestión del proceso de Continuos Integretation / Continuos Deployment en imágenes dockerizadas utilizando pipelines de GitLab
Resumen
En la actualidad contamos con diferentes aplicaciones desarrolladas in-house y proveídas
por terceros, los diferentes cambios que se piden por usuarios continuamente hacen que
los pases a producción sean continuos, por ende, se hizo necesario buscar una manera de
realizar los despliegues automáticos para las imágenes o aplicaciones desarrolladas.
Entre las muchas aplicaciones que contamos tenemos aplicaciones web desarrolladas en
java 11 con angular js, java 6, nest y uso de node como empaquetado, para el despliegue
usamos servidor Wildfly, Nginx y Jboss para la aplicación con el JDK más antiguo.
A continuación, explicare el proceso actual de desarrollo y despliegue:
1.- Comienza con la generación de un issue que es un requerimiento nuevo de algún
aplicativo.
2.- Se le asigna a un desarrollador el cual genera un feature, eje. feature/issue_001
3.- Se realizan los cambios y ajustes necesarios por el desarrollador asignado y se genera
el merge al repositorio Gitlab para ser revisado por el Líder Técnico (actualmente realizo
esta tarea).
4.- Genero el empaquetado (WAR) o imagen dockerizada, para luego realizar el pase
directamente en el servidor de producción que lo requiera.
Este flujo, aunque se ordene y mantiene un control del código, se pierde tiempo porque
ingresar al servidor, verificar versiones de las librerías, detener el servicio y volver a
levantarlo genera pérdida de tiempo y el error humano siempre se mantiene activo,
adicional a ello que algunas aplicaciones por recursos y uso de estos contamos con dos o
más nodos.
Lo cual nos llevó a investigar el flujo DevOps el mismo que fusiona dos conceptos
Development y Operations, realizando una comparación del proceso DevOps con nuestro
proceso podemos verificar que los pasos 1,2 y parte del 3 están dentro del proceso
Development y el paso 4 es lo de Operations sin la parte de la automatización es ahí donde
empezó mi investigación para luego su implementación. Currently, we have various applications developed in-house and provided by third parties.
The continuous changes requested by users have made production deployments frequent.
Therefore, it became necessary to find a way to automate deployments for both Docker
images and developed applications.
Among the many applications we have, there are web applications developed in Java 11
with AngularJS, Java 6, and Nest, using Node.js for packaging. For deployment, we use
Wildfly, Nginx, and JBoss for the application with the older JDK. Below, I will explain
the current development and deployment process:
1.- It begins with the creation of an issue, which is a new requirement for an application.
2.- The issue is assigned to a developer, who creates a feature branch, e.g.,
feature/issue_001.
3.- The assigned developer makes the necessary changes and adjustments, then merges
them into the GitLab repository for review by the Technical Lead (I currently handle this
task).
4.- I generate the WAR package or Docker image and then deploy it directly to the
required production server.
Although this workflow organizes and maintains code control, it wastes time because
logging into the server, verifying library versions, stopping the service, and restarting it
all lead to time loss. Additionally, human error remains a risk. Moreover, some
applications, due to resource usage, require two or more nodes.
This situation led us to investigate the DevOps workflow, which merges two concepts:
Development and Operations. Comparing the DevOps process with our process, we can
see that steps 1, 2, and part of 3 fall under Development, while step 4 falls under
Operations, but without automation. This is where our research and subsequent
implementation began