Módulo 6: Proyecto — Pipeline CI/CD Completo con Claude Code
Documentación, Optimización y Retrospectiva
Documentación, Optimización y Retrospectiva
Descripción
Esta es la cápsula final de la guía. El pipeline funciona end-to-end. Ahora lo conviertes en algo transferible: documentación operacional que un colega puede usar, optimizaciones de costos y velocidad, y retrospectiva con métricas reales que justifica el ROI ante el equipo o el management.
Sin esta cápsula, tienes un pipeline que funciona en tu máquina. Con esta cápsula, tienes un artefacto profesional que demuestra capacidad senior en CI/CD con AI. Es la diferencia entre "hice algo" y "entregué algo que el equipo puede operar y mantener".
Al terminar, vas a tener: documentación operacional completa, runbook para failures, métricas reales del pipeline, plan de optimización priorizado, y reflexión sobre lessons learned. Es lo que cierra el proyecto integrador como portfolio piece.
Los 4 Documentos del Entregable Final
docs/
├── DEPLOYMENT.md # Cómo opera el pipeline (para usuarios)
├── RUNBOOK.md # Qué hacer cuando X falla (para on-call)
├── METRICS.md # Análisis de costos y tiempos (para stakeholders)
└── LESSONS.md # Lecciones aprendidas (para el equipo)
Cada uno tiene una audiencia específica y un propósito claro.
Documento 1: DEPLOYMENT.md
Audiencia: developers del equipo que usan el pipeline. Propósito: explicar cómo funciona y cómo interactuar con él.
# Deployment Pipeline
Pipeline CI/CD end-to-end con Claude Code. Cubre desde apertura de PR hasta producción con rollback automático.
## Cuándo se dispara
| Evento | Workflow | Trigger |
|--------|----------|---------|
| PR opened/sync | PR Review (Phase 1) | `pull_request` |
| Push a main | Staged Deployment (Phase 2-4) | `push: main` |
## Las 4 Fases
### Phase 1: PR Review (~5 min)
- Code review automático con Claude Code
- Security scan (critical findings bloquean merge)
- Tests + linting + type checking
### Phase 2: Pre-Deployment (~3 min)
- Generación automática de changelog
- Readiness validation (env vars, migrations, deps)
### Phase 3: Deployment (~13 min + approval wait)
- Deploy automático a staging
- Smoke tests + validación con Claude
- **Approval gate humano antes de producción**
- Deploy a producción + smoke tests
- Notificación al equipo
### Phase 4: Post-Deploy (~10 min monitoring)
- Monitor de métricas continuo
- Auto-rollback si métricas degradan
- Diagnóstico inteligente post-rollback
## Cómo Aprobar un Deploy
Cuando el pipeline llega a `deploy-production`, GitHub muestra:
> ⏸️ Waiting for approval to deploy: production
Como reviewer:
1. **Antes de aprobar**, revisa:
- Comment del bot `validate-staging` en el PR (resumen + checklist)
- Métricas de staging en Grafana: [link]
- Changelog del release (artifact del workflow)
2. **Si todo OK**, click "Approve and deploy"
3. **Si hay dudas**, click "Reject" + comment explicando, o pide más info en el PR
## Cómo Ver el Estado del Pipeline
- **Pipeline runs:** Actions tab del repo
- **Métricas agregadas:** Grafana dashboard "Pipeline Health" [link]
- **Rollbacks históricos:** GitHub Issues con label `incident`
## Cómo Skipear el Pipeline (Solo Emergencias)
### Hotfix urgente (skip PR review)
```bash
git commit -m "hotfix: critical bug in payment
[skip ci]"
git push origin hotfix/critical-bug
⚠️ Solo para emergencias. Requiere approval post-merge en el #emergency channel.
Bypass security scan (falso positivo confirmado)
Aplicar label security-scan-override al PR. Requiere approval explícito de @security-team.
Cómo Modificar el Pipeline
Cambios al pipeline son commits regulares al repo en .github/workflows/ o scripts/. Estos cambios pasan por su propio code review.
Importante: cambios al pipeline mismo deben testearse en una rama de testing antes de mergear a main.
Costos
| Item | Costo Esperado |
|---|---|
| Por run completo | ~$0.30 |
| Mensual (50 deploys) | ~$15 |
| Mensual (200 deploys) | ~$60 |
Monitoring de costos: dashboard "CI Cost" en Grafana.
Soporte
- Issues con el pipeline: abre issue con label
pipeline - Falsos positivos del bot: comment en el PR, asignar a @ai-bot-maintainer
- Incidents: PagerDuty rotation activa
---
## Documento 2: RUNBOOK.md
**Audiencia:** on-call durante incidents.
**Propósito:** qué hacer cuando X falla. Pasos concretos, no descripción.
```markdown
# Pipeline Runbook
## Failure Mode 1: Pipeline Falla en Phase 1 (PR Review)
### Síntomas
- Status check rojo en el PR
- Workflow run "failed"
### Pasos
1. Identificar qué job falló:
- GitHub PR → "Details" en el status check rojo
2. Por job:
- **code-review failed:** error de Claude API o JSON parse → re-run
- **security-scan failed con critical:** revisar findings, decidir si fix o override
- **tests-and-linting failed:** correr tests local, fixear
3. Si es bug del pipeline (no del código):
- Issue con label `pipeline-bug`
- Tag @pipeline-team
### Escalation
- Si afecta a múltiples PRs simultáneamente: post a #infrastructure
- Si bloquea release crítico: PagerDuty rotation
---
## Failure Mode 2: Readiness Validation Falla
### Síntomas
- Job `readiness-validation` failed
- Workflow no continúa a deploy
### Pasos
1. Descargar artifact `readiness-report.json`:
```bash
gh run download <RUN_ID> -n readiness-report
-
Identificar el check que falló:
cat readiness_report.json | jq '.checks[] | select(.status == "fail")' -
Resolver según tipo:
- Env var faltante: Settings → Environments → production → agregar
- Migration issue: revisar
migrations/y aplicar - Breaking change sin doc: agregar al changelog antes de deploy
-
Re-disparar el workflow:
gh workflow run staged-deployment.yml --ref main
Escalation
- Si es repetitivo (>3 fallos en una semana): revisar process de PRs
Failure Mode 3: Deploy a Staging Falla
Síntomas
- Job
deploy-stagingfailed - Comment en el commit con error
Pasos
-
Revisar logs del job:
gh run view <RUN_ID> --log -
Identificar tipo:
- Imagen Docker no encontrada: revisar registry, re-build si necesario
- kubectl timeout: revisar cluster health
- Dependency falló: revisar requirements.txt, dependency CVE
-
Si es issue de infra:
- Verificar [Infrastructure status page]
- Re-disparar después de resolver
-
Si es issue del código:
- Revertir el commit en main
- Investigar offline
- Re-mergear cuando esté listo
Escalation
- 30 min sin resolución: PagerDuty
- 1 hora sin resolución: incident escalation team
Failure Mode 4: Rollback Automático Ejecutado
Síntomas
- Slack alert: "🚨 Auto-rollback executed"
- PagerDuty incident
- GitHub Issue con postmortem draft
Pasos
-
Verificar producción:
- Métricas en Grafana (debe estar volviendo a baseline)
- Smoke tests manuales:
./scripts/smoke_tests.sh https://app.example.com
-
Leer el postmortem auto-generado:
- GitHub → Issues → label
incident - Validar el diagnóstico
- GitHub → Issues → label
-
Si métricas siguen mal:
- Verificar que el rollback se completó:
kubectl get deployment app -n production - Si rollback falló: escalar a infra team
- Manual rollback como último recurso
- Verificar que el rollback se completó:
-
Comunicar al equipo:
- Update en #incidents-channel
- Confirmar producción estable
-
Postmortem follow-up:
- Asignar el issue a alguien para review en 24hr
- Validar y completar el postmortem
- Action items con owners
Escalation
- Rollback falla: infra team + senior on-call
- Más de 1 rollback en 24hr: emergency review del proceso
Failure Mode 5: Approval Gate Stuck
Síntomas
- Workflow en "Waiting for approval" por más de 1 hora
- Reviewers no respondieron
Pasos
-
Verificar reviewers configurados:
- Settings → Environments → production → Required reviewers
-
Notificar reviewers:
- Comment en el workflow
- Slack DM al on-call senior
-
Si urgente y nadie disponible:
- Solicitar override en #emergency channel
- Otro reviewer con permission puede aprobar
-
Si timeout (24hr):
- Workflow cancela automáticamente
- Re-mergear si el cambio sigue siendo válido
Common Commands
# Ver runs recientes
gh run list --limit 10
# Ver detalle de un run
gh run view <RUN_ID>
# Re-disparar el último run
gh run rerun <RUN_ID>
# Disparar workflow manualmente
gh workflow run staged-deployment.yml --ref main
# Cancelar run en progreso
gh run cancel <RUN_ID>
# Descargar artifacts
gh run download <RUN_ID>
On-Call Rotation
| Día | Primary | Secondary |
|---|---|---|
| Lun-Mié | @on-call-1 | @on-call-2 |
| Jue-Vie | @on-call-2 | @on-call-3 |
| Sáb-Dom | @on-call-3 | @on-call-1 |
PagerDuty: [link a la rotation]
---
## Documento 3: METRICS.md
**Audiencia:** stakeholders, management, equipo.
**Propósito:** justificar el ROI con datos concretos.
```markdown
# Pipeline Metrics & ROI Analysis
Datos del pipeline después de [N runs en últimos 90 días].
## Tiempos
### Promedio por phase
| Phase | Promedio | P95 | Min | Max |
|-------|----------|-----|-----|-----|
| Phase 1 (PR Review) | 4.2 min | 6.5 min | 2.1 min | 9.8 min |
| Phase 2 (Pre-Deploy) | 2.8 min | 4.1 min | 1.5 min | 6.2 min |
| Phase 3 (Deployment) | 12.5 min | 18 min | 8 min | 25 min |
| Approval wait | 14 min | 1.2 hrs | 30s | 18 hrs |
| Phase 4 (Monitoring) | 10.1 min | 10.5 min | 9.8 min | 11.2 min |
| **Total (sin approval)** | **29.6 min** | **38.6 min** | **22 min** | **55 min** |
### Distribution
Pipeline duration distribution (últimos 90 días):
10-20 min: ████ 22% 20-30 min: ████████████ 51% 30-40 min: ██████ 19% 40-60 min: ██ 6%
60 min: █ 2% (típicamente approval wait largo)
## Costos
### Por run
| Componente | Costo Promedio |
|-----------|----------------|
| Anthropic API calls | $0.18 |
| GitHub Actions runners | $0.09 |
| Slack/PagerDuty | ~$0.01 |
| **Total** | **$0.28** |
### Mensual
| Mes | Deploys | Costo Total | Promedio/Deploy |
|-----|---------|-------------|-----------------|
| Mar 2026 | 47 | $13.20 | $0.28 |
| Apr 2026 | 52 | $14.40 | $0.28 |
| May 2026 | 61 | $17.10 | $0.28 |
**Tendencia:** consistente. Costos predecibles.
### Top costos por job
- claude-review: $0.06/run (Sonnet, ~3K tokens)
- security-scan: $0.05/run (Sonnet, ~2.5K tokens)
- validate-staging: $0.04/run (Sonnet, ~2K tokens)
- diagnose (when triggered): $0.06/run (Sonnet, ~3K tokens)
- Otros: $0.07/run combinado
## Quality Metrics
### Success rate
| Métrica | Valor |
|---------|-------|
| Deploys exitosos | 94% (172/183) |
| Rollbacks ejecutados | 6 (3.3%) |
| Approval rechazados | 5 (2.7%) |
### Bot performance
| Métrica | Valor |
|---------|-------|
| Code review false positive rate | 12% |
| Security scan false positive rate | 8% |
| Diagnose accuracy (validated) | 78% |
### Time saved (estimado)
ANTES (proceso manual):
- Code review humano por PR: ~30 min
- Changelog manual por release: ~30 min
- Readiness check manual: ~15 min
- Coordinación de deploy: ~15 min
- Investigación de incidents: ~45 min TOTAL: ~135 min de tiempo humano por deploy
DESPUÉS (con pipeline):
- Approval click: ~3 min
- Validación de comments del bot: ~10 min (se validan en review humano)
- Investigación de incidents: ~15 min (con diagnóstico auto) TOTAL: ~28 min de tiempo humano por deploy
AHORRO: ~107 min por deploy
### Aplicado a 200 deploys/mes
Tiempo ahorrado/mes: 200 × 107 min = 21,400 min = ~357 horas Valor (a $100/hr de developer): $35,700/mes
Costo del pipeline: $14/mes
ROI: 2,500x
## Trend: Pipeline Health
[Insertar gráficos de:]
- Success rate trend (últimos 6 meses)
- Deploy frequency trend
- MTTR cuando hay rollback
- Costos mensuales acumulados
## Action Items
Basado en los datos:
1. **Reducir false positive rate** del code review (12% → target 5%)
- Approach: refinar prompt + CLAUDE.md más específico
- Owner: @ai-bot-maintainer
- Timeline: Q3 2026
2. **Aumentar accuracy de diagnose** (78% → target 90%)
- Approach: más contexto en el prompt (logs, métricas históricas)
- Owner: @ai-bot-maintainer
3. **Reducir tiempo de approval wait** (14 min promedio)
- Approach: notificación más visible en Slack, escalación automática a 1hr
- Owner: @sre-team
4. **Reducir Phase 3 P95** (18 min → target 12 min)
- Approach: optimizar deploy script, mejor caching
- Owner: @sre-team
Documento 4: LESSONS.md
Audiencia: equipo y futuros maintainers. Propósito: capturar aprendizajes para que no se repitan errores.
# Lessons Learned: Construyendo el Pipeline
## Decisiones que Tomé Bien
### 1. Empezar con suggest-only mode (Module 2)
El bot operó sin bloquear merges durante las primeras 4 semanas. Permitió ver cómo se comportaba sin generar fricción. Cuando movimos algunos checks a "blocking", el equipo ya confiaba en el bot.
**Aplicable a:** cualquier introducción de automatización que afecta workflow del equipo.
### 2. Capture previous_release antes del deploy
Trivial pero crítico. Sin este step, el rollback es manual. Con este step, es automático y rápido.
**Aplicable a:** cualquier sistema con potencial de rollback.
### 3. Diseñar antes de implementar (Module 6 cápsula 02)
Las 2 horas que invertí en el documento de diseño me ahorraron días de retrabajo. Especialmente para decidir paralelización y dependencias entre stages.
**Aplicable a:** cualquier proyecto técnico no trivial.
## Decisiones que Tomé Mal (Y Corregí)
### 1. Inicialmente usé Opus para todo
Costos crecieron 5x. Migrar a Haiku para code review básico y Sonnet para análisis profundo redujo costos sin perder calidad.
**Lección:** Default al modelo más económico que funcione. Subir solo cuando tienes evidencia clara de que vale la pena.
### 2. Falta de markers en comments
Primera versión generaba un comment nuevo por cada push. Después de 5 pushes, el PR tenía 5 comments del bot. Equipo se quejó.
**Lección:** Markers únicos (`<!-- bot-x -->`) son trivial de implementar y previenen este problema desde el día 1.
### 3. Thresholds de monitoring demasiado bajos al inicio
Primera semana: 4 false positives de rollback. Equipo perdió confianza.
**Lección:** Empezar con thresholds conservadores (más permisivos). Apretar gradualmente con datos reales.
## Sorpresas
### 1. Approval wait es la mayor variable
El tiempo desde merge hasta producción es dominado por approval wait, no por el pipeline mismo. El pipeline tarda ~30 min; approval puede tardar 0 a 24 horas.
**Implicación:** optimizar el approval flow (notifications, delegation) tiene más impacto en velocidad que optimizar el pipeline.
### 2. Diagnose es más valioso de lo esperado
Pensé que el diagnóstico automático sería un nice-to-have. Resultó ser lo que más usa el equipo en post-mortems. El postmortem draft auto-generado ahorra ~30 min en cada incident.
**Implicación:** invertir en diagnóstico automático para sistemas críticos vale la pena.
### 3. Documentación es 30% del proyecto
Subestimé el tiempo de docs. Pipeline funcional fue ~70% del trabajo, docs profesionales fueron el 30% restante. Pero sin docs, el pipeline no es transferible.
**Implicación:** plan de proyecto debe incluir tiempo dedicado a docs.
## Lo Que Cambiaría
### 1. Empezaría con mejor observability
Construí dashboards al final. Empezaría con dashboards básicos desde el día 1, aunque vacíos. Hubieran detectado problemas más rápido.
### 2. Test del rollback más temprano
No probé el rollback hasta que pasó por accidente. Ahora hay un game day mensual programado donde simulamos rollbacks.
### 3. CLAUDE.md desde el principio
Iteré las convenciones del bot ad-hoc por 2 semanas antes de escribir CLAUDE.md formal. Hubiera sido más rápido hacer un CLAUDE.md día 1 e iterar sobre él.
## Recomendaciones para el Próximo Equipo
Si vas a construir un pipeline similar:
1. **Lee este doc primero** — te ahorra los errores de arriba
2. **Iteración incremental** — Phase 1 funcional > Phase 1-4 a medias
3. **Métricas desde el día 1** — sin datos no puedes optimizar
4. **CLAUDE.md activo** — actualízalo con cada falso positivo
5. **Game days mensuales** — practica failures controlados
## Cosas que NO Probé Pero Probaría
1. **Canary deployments** — actualmente vamos 0→100% en producción
2. **Multi-region deployments** — un solo cluster por ahora
3. **Self-healing pipeline** — auto-fix de issues conocidos antes de fallar
4. **A/B testing del pipeline** — probar variaciones del prompt
Estas serían las siguientes optimizaciones con beneficio probable.
Optimizaciones Concretas
Listadas por costo/beneficio:
Optimización 1: Cache de pip (impact: alto, esfuerzo: bajo)
- uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: 'pip' # ← reduce ~25s por job
Beneficio: ~75s ahorrados por run en 3 jobs paralelos = $0.01/run × 200 deploys = ~$2/mes.
Optimización 2: Cambiar a Haiku donde aplique (impact: alto, esfuerzo: bajo)
# Code review: Haiku suficiente
env:
CLAUDE_MODEL: 'claude-haiku-4-5'
Beneficio: 5x reducción en costo de API para ese job.
Optimización 3: Skipear PRs en draft (impact: medio, esfuerzo: bajo)
jobs:
review:
if: github.event.pull_request.draft == false
Beneficio: ahorra runs en PRs en construcción.
Optimización 4: Custom Docker image con deps preinstaladas (impact: medio, esfuerzo: medio)
FROM python:3.11-slim
RUN pip install --no-cache-dir anthropic>=0.39.0 requests
Beneficio: elimina pip install en cada job. ~30s/job × 3 jobs × 200 deploys = ~$5/mes.
Optimización 5: Concurrency cancel-in-progress (impact: alto, esfuerzo: trivial)
concurrency:
group: pr-${{ github.event.pull_request.number }}
cancel-in-progress: true
Beneficio: PRs con muchos pushes solo completan el último. Ahorro variable, típicamente 30-50% de runs cancelados.
Trampas Comunes en Documentación
1. Docs que describen pero no orientan
Síntoma: "El pipeline tiene 4 fases" — pero no explica qué hacer en cada situación.
Por qué pasa: Documenting whats vs hows.
Cómo corregir: Cada doc orientado a una acción: "para hacer X, hace Y, Z, W".
2. Runbook genérico
Síntoma: "Si X falla, investiga".
Por qué pasa: Runbook escrito sin pensar en quién lo usa bajo presión.
Cómo corregir: Pasos concretos, comandos exactos, links a dashboards. Lo que el on-call necesita en pánico.
3. Métricas sin contexto
Síntoma: "Pipeline tarda 30 min" — pero no se sabe si es bueno o malo.
Por qué pasa: Datos sin baseline ni comparación.
Cómo corregir: Mostrar tendencias, comparar con antes, justificar trade-offs. ROI calculado, no solo números.
4. Lessons learned positivos solamente
Síntoma: "Todo salió bien".
Por qué pasa: Miedo a documentar errores propios.
Cómo corregir: Especialmente documentar los errores. Es donde el equipo aprende. Cultura de blameless postmortems.
5. Docs que se desactualizan
Síntoma: Docs precisos al inicio, mienten 3 meses después.
Por qué pasa: No hay proceso de mantenimiento.
Cómo corregir: Docs en el repo, versionados con el código. PR que modifica el pipeline debe actualizar docs como parte del cambio.
Diagnóstico
Pregunta 1: ¿Tu DEPLOYMENT.md describe el pipeline o explica cómo usarlo?
Describir = "tiene 4 fases". Explicar = "para aprobar un deploy, hace X". El segundo es más útil.
Pregunta 2: ¿Tu RUNBOOK tiene pasos concretos o consejos genéricos?
Bajo presión, el on-call necesita comandos copy-paste, no consejos.
Pregunta 3: ¿Calculaste ROI del pipeline con números?
Sin números, "el pipeline ahorra tiempo" es opinión. Con números, es business case.
Pregunta 4: ¿Documentaste tus errores y correcciones?
Solo éxitos = futuras personas repiten errores. Errores documentados = aprendizaje colectivo.
Pregunta 5: ¿Aplicaste al menos 3 optimizaciones medibles?
Implementar sin optimizar es trabajo a medias. Las optimizaciones de arriba dan ahorros visibles.
Ejercicios Finales
Ejercicio 1: Crear los 4 documentos (Difícil)
Para tu pipeline, escribe los 4 documentos:
DEPLOYMENT.mdorientado a usuariosRUNBOOK.mdorientado a on-callMETRICS.mdcon datos reales (al menos 1 mes de pipeline)LESSONS.mdhonesto sobre qué funcionó y qué no
Ejercicio 2: Aplicar 3 optimizaciones (Medio)
Elige 3 optimizaciones de la lista, impleméntalas, y mide el impact:
- Tiempo del pipeline antes/después
- Costo del pipeline antes/después
- Documentar el resultado en METRICS.md
Ejercicio 3: Game day (Medio)
Programa un game day mensual:
- Simula cada failure mode intencionalmente
- Verifica que el runbook responde correctamente
- Documenta hallazgos en LESSONS.md
- Mejoras al runbook si necesario
Resumen Final del Proyecto Integrador
Lo Que Construiste
PIPELINE END-TO-END:
- Phase 1: PR Review (paralela, ~5 min)
- Phase 2: Pre-Deployment (~3 min)
- Phase 3: Deployment con approval gate (~13 min)
- Phase 4: Monitor + auto-rollback + diagnose (~10 min)
DOCUMENTACIÓN:
- DEPLOYMENT.md (cómo opera)
- RUNBOOK.md (qué hacer si X falla)
- METRICS.md (ROI calculado)
- LESSONS.md (aprendizajes)
CARACTERÍSTICAS:
- Failure paths explícitos para los 5 modos
- Dashboards de pipeline health
- 3 tiers de alerting
- Optimizaciones con impact medido
Lo Que Demuestra
Este proyecto en tu portfolio demuestra:
- Diseño arquitectural — pensaste el pipeline como sistema, no como steps
- Trade-off awareness — decisiones documentadas con razón
- Operational excellence — runbook + dashboards + game days
- Business sense — ROI calculado, costos optimizados
- Continuous improvement — lessons learned + action items
Lo Que Va Después
Este es el último módulo de la guía #10. El siguiente paso natural en el path Agentic Development es la Guía #11 (Security for AI-Generated Code):
- Esta guía cubrió automatización con Claude Code en CI/CD
- La Guía 11 cubre seguridad del código generado por AI — tanto en interactivo como en pipelines
La transición es natural: aprendiste a automatizar, ahora aprendes a hacerlo seguro.
Recursos Adicionales
- The DevOps Handbook — Referencia clásica
- Site Reliability Engineering: Postmortem Culture — Cómo aprender de incidents
- GitHub Engineering Blog — Cómo GitHub construye su CI/CD
- DORA Research — Métricas que importan en DevOps
- Continuous Delivery: Reliable Software Releases — Jez Humble
- Anthropic API Best Practices — Aplicables a CI/CD
- The Twelve-Factor App — Principios de apps deployables
Cierre del Proyecto Integrador
Construiste un pipeline production-ready end-to-end con Claude Code integrado. Tienes:
- ✅ Pipeline funcional desde PR hasta producción
- ✅ Failure paths cubiertos para los 5 modos
- ✅ Documentación operacional completa
- ✅ Métricas reales y ROI calculado
- ✅ Lessons learned para futuros maintainers
- ✅ Plan de optimización priorizado
Este proyecto es portfolio-worthy. Mostrarlo demuestra senior-level CI/CD con AI. Y es transferible — el patrón aplica a cualquier proyecto profesional futuro.
Felicitaciones por completar la guía #10.