Módulo 9 · Despliegue y operaciones

Lección 41 — CI/CD

Pipelines con pruebas, análisis y despliegue automático al merge.

Publicada
En esta lección
  1. Ejercicio 1 — El pipeline del PR
  2. Ejercicio 2 — El build con digest
  3. Ejercicio 3 — El despliegue
  4. Ejercicio 4 — Las migraciones en el release
  5. Ejercicio 5 — El círculo
  6. Entrega

El pipeline de TicketFlow. Sin solutions.md hasta entregar.

Ejercicio 1 — El pipeline del PR

  1. Escribe el ci.yml con los 6 jobs del gate (lint, unit, integration, e2e, build+scan, check-deploy) con su paralelismo: ¿cuáles corren en paralelo y cuáles en secuencia? ¿Cuál es la ruta crítica del pipeline (el job que determina la duración total)?
  2. El cache: añade el cache de pip (el hash de requirements.lock como key) y el cache de imagen Docker por registry. Mide: primera corrida vs segunda — pega los tiempos por job.
  3. El test flaky en el gate: inyecta un test que falla 1 de cada 5 veces (random) y observa el efecto en 5 PRs simulados. ¿Cuántos re-runs necesitaron? Documenta la política del proyecto: re-run manual + issue obligatorio (la 35).

Ejercicio 2 — El build con digest

  1. Configura el push con tag :git-<sha> y guarda el digest del push en el output del job. Verifica: docker pull del digest funciona y el docker inspect del digest coincide con el local.
  2. El scan gate: trivy con --exit-code 1 --severity CRITICAL sobre una imagen con una CVE crítica simulada (una base vieja pinneada a propósito): ¿el pipeline rojo? ¿Y el job no bloquea para las MEDIUM del reporte?
  3. La cadena auditable: escribe el comando que, dado un entorno de prod, devuelve el commit exacto que corre (digest → tag git-sha → commit). ¿Cuántos comandos te costó? (la respuesta ideal: 1).

Ejercicio 3 — El despliegue

  1. Implementa los 5 scripts del deploy (deploy.sh, wait_healthy.sh, switch_traffic.sh, smoke.sh, rollback.sh) para un despliegue local simulado (dos compose "blue" y "green" con nginx delante). Pega el log del switch en caliente sin 500s.
  2. El rollback probado: haz el smoke fallar a propósito (el healthcheck verde pero el smoke del listado rojo): ¿el rollback automático disparó y el tráfico volvió a blue? Mide el tiempo total de rollback (objetivo: <15 s).
  3. La decisión de estrategia: con tus métricas del 36 (p95, errores) y tu costo de infra, escribe el párrafo de decisión: ¿blue-green o canary para TicketFlow y qué métrica del 46 dispararía el rollback automático si mañana pasas a canary?

Ejercicio 4 — Las migraciones en el release

  1. Escribe el job release-migrate que corre manage.py migrate desde la imagen del release contra la BD de staging, y el guard: el job falla si la migración pendiente NO es expand (el linter de migraciones del 11 en el pipeline).
  2. Simula el release completo en staging: migrate expand → deploy green → smoke → switch → (contract pendiente). Documenta el estado intermedio: ¿la app vieja (blue) funciona con el esquema expandido? (el test del 11 que lo demuestra).
  3. Los dos JAMÁS: (a) intenta desplegar la app nueva con el esquema sin migrar: ¿qué error y cuántos 500 hasta el rollback? (b) haz un deploy con migrate && runserver en el contenedor: ¿qué complica el rollback? Documenta ambas experiencias como advertencias del runbook.

Ejercicio 5 — El círculo

  1. Añade las anotaciones de deploy al monitoreo (el log estructurado del 45 o la API de Grafana si la tienes): deployment_started/completed con commit+digest+actor. Verifica que la gráfica del p95 muestra la línea vertical del deploy.
  2. Las 4 métricas DORA del proyecto: calcula a mano (o con el log de GH Actions) lead time, frecuencia, tasa de fallo, MTTR de los últimos 10 deploys. ¿Cuál está sana y cuál es la vergüenza del equipo?
  3. El documento docs/ci-cd.md: el diagrama del pipeline (ASCII), los gates, la estrategia de despliegue con su razón, y la política de rollback. Máximo 1 página — el documento que el próximo tú lee al despertar a las 3 a.m. con un deploy roto.

Entrega

Pega el ci.yml con sus tiempos, la evidencia del digest auditable, el log del switch + rollback, y las 4 métricas DORA. Después: Lección 42 — Nube.