El pipeline de TicketFlow. Sin solutions.md hasta entregar.
Ejercicio 1 — El pipeline del PR
- Escribe el
ci.ymlcon 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)? - 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.
- 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
- Configura el push con tag
:git-<sha>y guarda el digest del push en el output del job. Verifica:docker pulldel digest funciona y eldocker inspectdel digest coincide con el local. - El scan gate: trivy con
--exit-code 1 --severity CRITICALsobre 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? - 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
- 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.
- 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).
- 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
- Escribe el job
release-migrateque corremanage.py migratedesde 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). - 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).
- 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 && runserveren el contenedor: ¿qué complica el rollback? Documenta ambas experiencias como advertencias del runbook.
Ejercicio 5 — El círculo
- 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.
- 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?
- 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.