El desarrollo de microservicios se ha vuelto una estrategia clave para muchas organizaciones, permitiendo mayor flexibilidad y escalabilidad. Sin embargo, con el crecimiento de estos servicios surge un desafío recurrente: la proliferación de procesos de despliegue similares pero dispersos. Esto puede generar una complejidad innecesaria, dificultando la gestión y actualización de los pipelines CI/CD.
Dentro de los principales desafíos en cuanto a complejidad que surgen al abordar este particular tenemos:
Elemento de Complejidad | Descripción |
Duplicación de archivo de pipelines de CI/CD | Se replican procesos de integración y despliegue en múltiples microservicios, lo que incrementa el mantenimiento manual. |
Actualización fragmentada | Las mejoras deben aplicarse individualmente en cada microservicio, aumentando el riesgo de omisiones. |
Escalabilidad limitada | La falta de centralización hace que la gestión de despliegue sea lenta y difícil de escalar a medida que crecen los servicios. |
Mayor carga operativa | Mantener múltiples archivos y pipelines separados, aumentan la complejidad operativa. |
Falta de visibilidad global | Los procesos separados dificultan una visión clara y unificada del estado de los despliegues en toda la organización. |
Para abordar este reto, es crucial centralizar toda la estructura de despliegue en un solo proyecto, utilizando un archivo .gitlab-ci.yml
compartido. Esta solución no solo simplifica la administración, sino que también garantiza que cualquier mejora o actualización en los procesos de integración y despliegue continuo afecte a todos los microservicios, en lugar de requerir cambios individuales en cada uno.
Esto se logra a través una estructura modular similar a lo indicado en la siguiente figura que permite una mayor flexibilidad, escalabilidad y una mejor gestión de los recursos dentro de un proyecto CI/CD.
Por lo general la estructura modular esta constituida por los siguientes elementos
Elemento | Descripción |
resources | Contiene recursos específicos a ser utilizados por los repositorios que llaman a este proyecto (puede ser scripts comunes que consumen apis de servicios externos). |
snippets | Almacena fragmentos reutilizables de código CI/CD. |
stages | Define las etapas del pipeline, como build, test, y deploy. |
variables | Contiene variables globales para configuraciones comunes. |
Security-Quality-Mandatory.yml | Contiene plantillas para analisis de seguridad y calidad de código |
template-principal.yml | Orquesta y llama todos los recursos del proyecto |
¿Cómo se implementa? La funcionalidad clave de GitLab para alcanzar esta centralización es la directiva include
. Esta directiva permite incluir archivos .gitlab-ci.yml
de otros repositorios en el pipeline actual, permitiendo reutilizar configuraciones comunes sin duplicar código.
Para incluir un archivo ci-templates.yml
desde otro repositorio, la configuración podría verse así:
include:
- project: 'grupo/ci-templates'
ref: 'main'
file: 'template-principal.yml'
En este caso, el archivo template-principal.yml
, almacenado en el repositorio grupo/ci-templates
, se incluye en el pipeline del proyecto actual. De esta manera, cualquier cambio realizado en el archivo incluido automáticamente afectará a todos los proyectos que lo utilicen, asegurando una gestión centralizada y eficiente de los pipelines.
Este enfoque no solo facilita la vida de los equipos de desarrollo, sino que también impulsa una cultura de automatización y mejora continua, aspectos vitales para la competitividad en entornos tecnológicos dinámicos.