CI/CD
Continuous Integration y Continuous Delivery/Deployment — prácticas que automatizan la integración de código, testing y entrega a producción. Fundamento de la ingeniería de software moderna.
CI/CD son dos prácticas complementarias que automatizan el camino del código desde el commit hasta producción. Juntas eliminan el «integration hell» y permiten releases frecuentes con confianza.
Continuous Integration (CI)
Integrar código frecuentemente (mínimo diario) a una rama compartida, con verificación automática.
Principios
- Un solo repositorio — todo el código en un lugar
- Commits frecuentes — integrar cambios pequeños, no acumular
- Build automatizado — cada commit dispara build + tests
- Tests rápidos — feedback en minutos, no horas
- Arreglar builds rotos inmediatamente — prioridad máxima
Pipeline típico de CI
commit → build → lint → unit tests → integration tests → artifact
# Ejemplo GitHub Actions
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- run: pnpm install --frozen-lockfile
- run: pnpm lint
- run: pnpm test
- run: pnpm buildContinuous Delivery vs Continuous Deployment
Dos conceptos distintos que a menudo se confunden:
Continuous Delivery
El código puede ir a producción en cualquier momento — el deploy es manual pero el proceso está automatizado.
CI → staging auto → aprobación manual → producción
Continuous Deployment
El código va a producción automáticamente si pasa todos los checks — sin intervención humana.
CI → staging auto → producción auto
| Aspecto | Delivery | Deployment |
|---|---|---|
| Deploy a producción | Manual (botón) | Automático |
| Frecuencia típica | Diaria/semanal | Múltiples veces al día |
| Requiere | Tests confiables | Tests + feature flags + monitoring |
| Riesgo | Menor | Requiere madurez |
Pipeline completo
┌─────────────────────────────────────────────────────────────────┐
│ CI/CD Pipeline │
├─────────┬─────────┬─────────┬─────────┬─────────┬──────────────┤
│ Build │ Test │ Scan │ Package │ Deploy │ Monitor │
├─────────┼─────────┼─────────┼─────────┼─────────┼──────────────┤
│ compile │ unit │ SAST │ docker │ staging │ logs │
│ lint │ integ │ DAST │ helm │ canary │ metrics │
│ deps │ e2e │ secrets │ artifact│ prod │ alerts │
└─────────┴─────────┴─────────┴─────────┴─────────┴──────────────┘
Stages explicados
- Build — compilar, verificar sintaxis, resolver dependencias
- Test — unit, integration, e2e (pirámide de testing)
- Scan — seguridad estática (SAST), dinámica (DAST), secretos
- Package — crear artefacto deployable (Docker image, binary, bundle)
- Deploy — staging → canary → producción
- Monitor — observabilidad post-deploy
Estrategias de deployment
Blue-Green
Dos entornos idénticos. Cambiar tráfico instantáneamente.
┌─────────┐
Users ───┤ Router ├──► Blue (v1) ← activo
└────┬────┘
└──────► Green (v2) ← standby/nuevo
Rollback: cambiar router de vuelta a Blue.
Canary
Enviar porcentaje pequeño de tráfico a la nueva versión.
Users ──┬── 95% ──► v1 (estable)
└── 5% ──► v2 (canary)
Incrementar gradualmente si métricas son buenas.
Rolling
Actualizar instancias una por una.
[v1] [v1] [v1] [v1] → [v2] [v1] [v1] [v1] → [v2] [v2] [v2] [v2]
Métricas clave (DORA)
Las cuatro métricas de DevOps Research and Assessment:
| Métrica | Elite | High | Medium | Low |
|---|---|---|---|---|
| Deployment frequency | On-demand (múltiples/día) | Diario-semanal | Semanal-mensual | Mensual+ |
| Lead time for changes | < 1 hora | 1 día - 1 semana | 1 semana - 1 mes | 1 mes+ |
| Change failure rate | 0-15% | 16-30% | 31-45% | 46%+ |
| Time to restore | < 1 hora | < 1 día | < 1 semana | 1 semana+ |
Herramientas por categoría
| Categoría | Herramientas |
|---|---|
| CI/CD Platforms | GitHub Actions, GitLab CI, Jenkins, CircleCI, Travis CI |
| Artifact Registry | Docker Hub, GitHub Packages, AWS ECR, Google Artifact Registry |
| Infrastructure | Terraform, Pulumi, AWS CDK, CloudFormation |
| Kubernetes | ArgoCD, Flux, Helm, Kustomize |
| Testing | Jest, Playwright, Cypress, k6 |
| Security | Snyk, Trivy, SonarQube, OWASP ZAP |
| Monitoring | Datadog, Grafana, Prometheus, New Relic |
Anti-patrones
- Tests lentos — si CI tarda 30+ minutos, los desarrolladores evitan integrar
- Flaky tests — tests que fallan aleatoriamente destruyen la confianza
- Deploy manual — si requiere pasos manuales, se acumula trabajo
- Sin rollback — cada deploy debe poder revertirse en minutos
- Secrets en código — usar secret managers, nunca hardcodear
- Ignorar alertas — alert fatigue lleva a ignorar problemas reales
¿Por qué importa?
CI/CD es el multiplicador de velocidad más importante en ingeniería de software. Sin CI, los bugs se acumulan y los merges son dolorosos. Sin CD, el código aprobado espera días o semanas para llegar a producción. Las métricas DORA demuestran consistentemente que los equipos con CI/CD maduro entregan más rápido y con mayor estabilidad.
Referencias
- Continuous Delivery — Jez Humble & David Farley, 2010. El libro que definió la práctica.
- Accelerate — Nicole Forsgren, Jez Humble & Gene Kim, 2018. Investigación científica sobre métricas DORA y alto rendimiento.
- The DevOps Handbook — Gene Kim et al., 2021. Guía práctica de implementación.
- Google SRE Book — Google, 2016. Prácticas de Site Reliability Engineering incluyendo CI/CD.
- Martin Fowler on CI — Martin Fowler, 2006. Artículo seminal que popularizó CI.