La integración continua y el despliegue continuo CI/CD son fundamentales para que los equipos modernos mantengan el desarrollo rápido, seguro y consistente. En este artículo describimos, paso a paso y en lenguaje práctico, una canalización real de GitLab CI/CD diseñada para una aplicación Node.js llamada Solar System, mostrando cómo encajan pruebas unitarias, análisis de cobertura, construcción de contenedores, servicios de dependencia y publicación de imágenes en un flujo confiable y listo para producción.
Descripción del proyecto Solar System: se trata de un servicio sencillo Node.js con Express y MongoDB. Componentes clave: app.js servidor Express y endpoints, app-test.js pruebas con Mocha, Dockerfile para construir la imagen, deployment.yaml y service.yaml para Kubernetes, y scripts en package.json para start test coverage que permiten ejecutar npm install npm test npm run coverage y npm start localmente.
Al llevar el proyecto a GitLab CI se buscó inicialmente un flujo simple: ejecutar tests en merge requests y pushes, generar reportes de cobertura y construir y escanear contenedores. Sin embargo la primera ejecución produjo alertas en la base de datos de producción porque los jobs usaban credenciales reales y conectaban al clúster productivo. Ejecutar pruebas contra la base de datos de producción puede causar lentitud, errores intermitentes y afectar a usuarios reales.
Lecciones aprendidas: aislar siempre las dependencias de CI. Tratar el entorno de producción como una bóveda cerrada. La solución fue usar servicios de GitLab CI para arrancar un contenedor MongoDB por job y apuntar las variables de entorno a mongodb://mongo:27017/testdb en lugar de las credenciales productivas. Con este patrón las pruebas se ejecutan contra una instancia efímera y aislada y los jobs son repetibles y seguros.
Ejemplo de patrón reutilizable: definir una plantilla de job que use la imagen node, incluya el servicio mongo:4.4 con alias mongo, haga npm install en before_script y espere a que la base de datos responda antes de lanzar las pruebas. Asignar variables como MONGO_URI con el host mongodb://mongo:27017/testdb permite que tanto pruebas unitarias como cobertura compartan la misma base aislada.
Agregar reportes de cobertura y junit mejora la visibilidad dentro de los merge requests. GitLab muestra cuántas pruebas pasan, cuáles fallaron y el porcentaje de cobertura mediante artifacts reports junit y cobertura con formato cobertura. Además se puede resaltar cobertura a nivel de línea para que los desarrolladores tengan feedback inmediato en el MR.
Para acelerar la canalización se añadió cache de node_modules basado en package-lock.json con política pull-push. Resultado: una instalación de dependencias que en frío tardaba varios segundos se reduce drásticamente cuando la cache está disponible, mejorando la experiencia de los desarrolladores y multiplicando la velocidad de iteración.
Construcción y pruebas de imágenes en CI: el pipeline construye la imagen con docker build usando docker:dind y guarda la imagen como un artifact solar-system-image.tar. Antes de publicar se hace un docker load y se arranca el contenedor comprobando el endpoint /live para verificar que la imagen funciona correctamente. Este paso de validación evita publicar imágenes defectuosas.
Publicación en registros: una vez validadas las imágenes se realiza push a Docker Hub y al GitLab Container Registry con el tag adecuado por versión. Mantener imágenes versionadas en el registry facilita despliegues controlados y rollback cuando sea necesario.
Impacto del pipeline refactorizado: tras aislar dependencias y optimizar cache y artefactos, los jobs de build y test fueron un 25 por ciento más rápidos, la carga sobre la base de datos productiva se redujo alrededor de 40 por ciento y las fallas intermitentes de CI disminuyeron significativamente. El pipeline quedó preparado para integrar despliegue continuo a Kubernetes, con ideas en marcha como automatización de despliegues, templating con Helm y estrategias de despliegue canary o blue green con rollback automático.
Resumen de buenas prácticas aprendidas: empezar con un pipeline simple, detectar y resolver cuellos de botella, aislar recursos externos, añadir observabilidad con reportes y artefactos, construir y probar contenedores antes de publicar y finalmente automatizar despliegues a entornos orquestados.
En Q2BSTUDIO acompañamos a equipos y empresas en todo el ciclo de desarrollo y operaciones. Si necesitas diseñar e implantar pipelines CI/CD robustos y seguros, optimizar aplicaciones a escala o desarrollar software a medida no dudes en contactarnos. Somos una empresa de desarrollo de software especializada en aplicaciones a medida y software a medida que además ofrece inteligencia artificial, servicios de ciberseguridad y pentesting, servicios cloud aws y azure, servicios inteligencia de negocio y soluciones con power bi. Podemos ayudarte a integrar IA para empresas, agentes IA y automatización para que tus despliegues sean rápidos y seguros. Conoce nuestros servicios de aplicaciones a medida en aplicaciones a medida y nuestras soluciones de infraestructura en servicios cloud aws y azure.
Si quieres que transformemos tu pipeline, mejoremos la seguridad de tus despliegues o acompañemos en la adopción de inteligencia artificial y business intelligence con Power BI, en Q2BSTUDIO ofrecemos consultoría, desarrollo y soporte completo para llevar tu proyecto a producción con calidad y resiliencia.