Módulo 11Trimestre 4 · Operaciones en producción14 puntos del póster

Despliegue: CI/CD, cadena de suministro e infraestructura

Inicia sesión para guardar tu progreso en todos tus dispositivos. Mientras tanto, se guarda en este navegador.

Por qué importa

La IA te permite escribir diez veces más cambios. Sin un camino automatizado y seguro a producción, eso se convierte en diez veces más incidentes. La investigación de DORA es clara: velocidad y estabilidad no se oponen. Los mejores equipos despliegan a menudo y fallan menos, porque cada cambio es pequeño, está probado y es reversible.

Resultados de aprendizaje

  1. Construir un pipeline de CI/CD con controles de calidad y de seguridad.
  2. Contenerizar de forma reproducible con Docker.
  3. Asegurar la cadena de suministro de software (lockfiles, SBOM, procedencia, slopsquatting).
  4. Lanzar de forma progresiva con feature flags, rolling, canary y blue-green.
  5. Hacer rollback en menos de un minuto.
  6. Definir la infraestructura como código.
  7. Saber cuándo usar Kubernetes (y cuándo no).

Lecciones

11.1 El pipeline (6, 107)

En cada pull request: instalación (desde el lockfile) → lint → comprobación de tipos → tests unitarios → tests de integración (base de datos real en un contenedor) → escaneos de seguridad (secretos, SAST, dependencias) → build → despliegue de preview → tests E2E sobre el preview. Al hacer merge a main: haz el build una sola vez, despliega el mismo artefacto en staging y luego en producción, ejecuta las migraciones como un paso controlado, haz un smoke test y monitoriza.

  • Protección de ramas: revisiones obligatorias y checks en verde; nadie (ni ningún agente) hace push directamente a main.
  • La caché de builds (107) mantiene CI rápido (cachés de dependencias y de capas, cachés remotas en monorepos). Un CI lento hace que la gente se lo salte.

11.2 Docker (7)

  • Builds multi-stage; imágenes base pequeñas (distroless, alpine o slim); fija los digests de las imágenes.
  • Ejecuta como usuario no root; sin secretos en las imágenes ni en las capas; .dockerignore.
  • Escanea las imágenes (Trivy) en CI. La misma imagen se ejecuta en local, en CI y en producción: se acabó el "en mi máquina funciona".

11.3 Cadena de suministro y el infierno de las dependencias (108, OWASP A03:2025)

  • Lockfiles en el repo; npm ci / instalaciones congeladas en CI.
  • Slopsquatting: las herramientas de IA a veces sugieren paquetes que no existen; los atacantes registran esos nombres. Verifica que cada nueva dependencia existe, se mantiene, tiene uso real y está bien escrita.
  • Actualizaciones automáticas (Dependabot/Renovate) con tests; agrupa las actualizaciones menores; revisa las mayores.
  • Minimiza las dependencias; prefiere la plataforma y la librería estándar.
  • SBOM (CycloneDX o SPDX) generado en cada build; procedencia y firma (framework SLSA, Sigstore/cosign, GitHub artifact attestations). Los clientes empresariales piden SBOMs cada vez más.
  • Fija las GitHub Actions a SHAs de commit; permisos de GITHUB_TOKEN con el mínimo privilegio.

11.4 Entrega progresiva (51 a 55)

  • Feature flags (51): despliega el código apagado, lánzalo a usuarios internos, luego a un %, luego a todos. Separa el despliegue del lanzamiento. Limpia los flags antiguos (son deuda técnica).
  • Rolling (54): sustituye las instancias de forma gradual; es lo predeterminado en la mayoría de las plataformas.
  • Canary (53): envía un % pequeño del tráfico a la nueva versión, compara la tasa de errores y la latencia, y promociona o aborta automáticamente.
  • Blue-green (52): dos entornos completos; cambias el tráfico al instante y vuelves atrás al instante.
  • Rollback (55): el más importante. Rollback instantáneo de la plataforma (Vercel, Cloudflare, Fly, Render) o redespliegue del tag de imagen anterior. Practícalo. Las migraciones de base de datos deben ser retrocompatibles para que el rollback del código sea seguro (expand and contract de 03 · Fundamentos de datos).

11.5 Infraestructura como código (104, 105)

  • Todo (DNS, buckets, bases de datos, colas, IAM, alertas) definido en código, revisado en PRs y aplicado por CI. Nada de click-ops en producción.
  • Terraform / OpenTofu (105), Pulumi (TypeScript) o los archivos de configuración de la plataforma. Estado guardado en remoto y con lock.
  • Ventajas: entornos reproducibles, trazabilidad para auditoría y recuperación ante desastres volviendo a aplicar.
  • Escanea el IaC en busca de configuraciones incorrectas (Checkov, Trivy).

11.6 Kubernetes, Helm, service discovery (8, 9, 106)

  • Kubernetes (8) orquesta contenedores: planificación, autorreparación, escalado y actualizaciones rolling. Helm (106) empaqueta aplicaciones de K8s. El service discovery (9) permite que los servicios se encuentren entre sí por nombre.
  • Consejo honesto: para un equipo pequeño, un PaaS gestionado (Vercel, Cloudflare, Fly, Render, Railway, Cloud Run, ECS) da la mayor parte del beneficio con una fracción de la carga operativa. Adopta K8s cuando tengas muchos servicios, un equipo de plataforma o requisitos empresariales u on-prem.

11.7 Entornos

Local → preview (por PR) → staging (similar a producción, con datos anonimizados) → producción. Credenciales y cuentas separadas por entorno. Los agentes de IA nunca tienen credenciales de producción por defecto.

Lab 11: Despliega diez veces en un día

  1. Construye en GitHub Actions el pipeline completo descrito arriba.
  2. Añade generación de SBOM y escaneo de dependencias y contenedores; haz que falle ante vulnerabilidades críticas.
  3. Envuelve una nueva funcionalidad en un flag; lánzala al 10% y luego al 100%.
  4. Haz a propósito un despliegue defectuoso; detéctalo y haz rollback. Cronométralo.
  5. Define tu infraestructura (al menos DNS, base de datos, almacenamiento y una alerta) en Terraform/OpenTofu o Pulumi.

Definition of Done

Paquete de prompts de IA

  • "Escribe un workflow de GitHub Actions con lint, typecheck, tests con un contenedor de servicio de Postgres, gitleaks, Semgrep, auditoría de dependencias, build de Docker con escaneo de Trivy y SBOM. Fija todas las actions por SHA y usa permisos de mínimo privilegio."
  • "Para cada dependencia añadida en este diff, confirma que existe en el registro, sus descargas semanales, la fecha de su última publicación y el número de mantenedores."