CI/CD — Integración y Despliegue Continuo
Pipelines de integración continua, testing automatizado y estrategias de despliegue: blue-green, canary y rolling updates.
¿Qué es CI/CD?
CI/CD (Continuous Integration / Continuous Delivery o Deployment) es un conjunto de prácticas que automatizan el proceso de llevar código desde el repositorio hasta producción.
- CI (Integración Continua): cada cambio de código se integra frecuentemente, se compila y se testea automáticamente
- CD (Entrega Continua): el código que pasa CI está siempre listo para desplegarse en producción
- CD (Despliegue Continuo): el código se despliega automáticamente a producción sin intervención manual
Pipeline de CI/CD
Un pipeline es una secuencia de etapas automatizadas que el código atraviesa desde el commit hasta producción.
Etapas típicas
Commit → Build → Test → Análisis → Artefacto → Deploy Staging → Deploy Producción
- Build: compilar el código, generar artefactos
- Test unitarios: ejecutar tests rápidos que validan la lógica
- Test de integración: verificar que los componentes funcionan juntos
- Análisis estático: linting, type checking, análisis de seguridad
- Construcción de artefacto: crear imagen Docker, paquete, etc.
- Deploy a staging: desplegar automáticamente para pruebas finales
- Deploy a producción: desplegar con la estrategia elegida
Ejemplo con GitHub Actions
name: CI/CD Pipeline
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm run lint
- run: npm run test
- run: npm run build
deploy-staging:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build Docker image
run: docker build -t my-app:${{ github.sha }} .
- name: Push to registry
run: docker push my-app:${{ github.sha }}
- name: Deploy to staging
run: kubectl set image deployment/my-app my-app=my-app:${{ github.sha }} -n staging
Testing automatizado en CI
El testing es la columna vertebral de CI. Sin tests confiables, la automatización no tiene sentido.
Pirámide de tests en CI
- Tests unitarios (muchos, rápidos): validan funciones y módulos individuales
- Tests de integración (moderados): validan la comunicación entre componentes
- Tests end-to-end (pocos, lentos): validan flujos completos del usuario
Buenas prácticas
- Los tests deben ser deterministas: el mismo código siempre produce el mismo resultado
- Los tests deben ser rápidos: un pipeline lento desincentiva la integración frecuente
- Los tests deben ser independientes: no depender del orden de ejecución ni de estado compartido
- Usar paralelización para reducir el tiempo total del pipeline
Estrategias de despliegue
Rolling update
La estrategia por defecto en Kubernetes. Reemplaza gradualmente las instancias antiguas con las nuevas.
- Ventaja: no requiere infraestructura adicional
- Desventaja: durante el update, coexisten dos versiones
- Rollback: automático si los health checks fallan
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
Blue-Green deployment
Mantiene dos entornos idénticos: Blue (actual) y Green (nuevo). El tráfico se redirige de Blue a Green cuando Green está listo.
- Ventaja: rollback instantáneo (volver a Blue)
- Desventaja: requiere el doble de infraestructura durante el despliegue
- Ideal para: cambios grandes o migraciones de base de datos
Canary deployment
Despliega la nueva versión a un pequeño porcentaje de usuarios primero. Si todo va bien, se incrementa gradualmente hasta el 100%.
- Ventaja: riesgo mínimo, detección temprana de problemas
- Desventaja: más complejo de implementar y monitorear
- Ideal para: cambios con riesgo o features experimentales
Fase 1: 5% del tráfico → nueva versión
Fase 2: 25% del tráfico → nueva versión
Fase 3: 50% del tráfico → nueva versión
Fase 4: 100% del tráfico → nueva versión
Feature flags
No es una estrategia de despliegue per se, pero complementa a las anteriores. Permite activar o desactivar features sin redesplegar.
- El código nuevo se despliega pero está desactivado por defecto
- Se activa gradualmente para usuarios específicos
- Si hay problemas, se desactiva sin rollback
Buenas prácticas de CI/CD
- Hacer commits pequeños y frecuentes: facilita la detección de errores
- El pipeline debe ser rápido: idealmente menos de 10 minutos para CI
- Nunca saltarse el pipeline: todo cambio pasa por CI, sin excepciones
- Artefactos inmutables: el mismo artefacto se promueve entre entornos
- Monitorear los despliegues: alertas automáticas si algo falla post-deploy
- Automatizar rollbacks: si las métricas se degradan, revertir automáticamente
Resumen
CI/CD automatiza el camino del código a producción. La integración continua garantiza que cada cambio se valida automáticamente, mientras que las estrategias de despliegue (rolling, blue-green, canary) permiten llevar cambios a producción con confianza y mínimo riesgo.