Conceptos

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.

evergreen#devops#automation#testing#dx

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

  1. Un solo repositorio — todo el código en un lugar
  2. Commits frecuentes — integrar cambios pequeños, no acumular
  3. Build automatizado — cada commit dispara build + tests
  4. Tests rápidos — feedback en minutos, no horas
  5. 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 build

Continuous 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
AspectoDeliveryDeployment
Deploy a producciónManual (botón)Automático
Frecuencia típicaDiaria/semanalMúltiples veces al día
RequiereTests confiablesTests + feature flags + monitoring
RiesgoMenorRequiere 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

  1. Build — compilar, verificar sintaxis, resolver dependencias
  2. Test — unit, integration, e2e (pirámide de testing)
  3. Scan — seguridad estática (SAST), dinámica (DAST), secretos
  4. Package — crear artefacto deployable (Docker image, binary, bundle)
  5. Deploy — staging → canary → producción
  6. 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étricaEliteHighMediumLow
Deployment frequencyOn-demand (múltiples/día)Diario-semanalSemanal-mensualMensual+
Lead time for changes< 1 hora1 día - 1 semana1 semana - 1 mes1 mes+
Change failure rate0-15%16-30%31-45%46%+
Time to restore< 1 hora< 1 día< 1 semana1 semana+

Herramientas por categoría

CategoríaHerramientas
CI/CD PlatformsGitHub Actions, GitLab CI, Jenkins, CircleCI, Travis CI
Artifact RegistryDocker Hub, GitHub Packages, AWS ECR, Google Artifact Registry
InfrastructureTerraform, Pulumi, AWS CDK, CloudFormation
KubernetesArgoCD, Flux, Helm, Kustomize
TestingJest, Playwright, Cypress, k6
SecuritySnyk, Trivy, SonarQube, OWASP ZAP
MonitoringDatadog, 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.
Conceptos