7 min lectura • Guide 422 of 877
Mejores Prácticas de Pipeline CI/CD
Los pipelines CI/CD automatizan el camino desde el código hasta producción. Buenos pipelines son rápidos, confiables y detectan problemas temprano. Malos pipelines son lentos, inestables y crean miedo al despliegue. Esta guía cubre la construcción de pipelines efectivos.
Etapas del Pipeline
| Etapa | Propósito | Velocidad |
|---|---|---|
| Build | Compilar código | < 2 min |
| Test | Verificar corrección | < 5 min |
| Seguridad | Encontrar vulnerabilidades | < 3 min |
| Deploy | Enviar a ambiente | < 5 min |
Diseño del Pipeline
Etapas Esenciales
DISEÑO DE PIPELINE CI/CD
════════════════════════
PIPELINE BÁSICO:
─────────────────────────────────────
build → test → deploy
Inicio simple
PIPELINE COMPLETO:
─────────────────────────────────────
┌─────────────────────────────────────┐
│ CI │
├─────────────────────────────────────┤
│ checkout → build → lint → test │
│ │ │ │
│ └── security scan ───┘ │
└─────────────┬───────────────────────┘
│
▼ artefacto
┌─────────────────────────────────────┐
│ CD │
├─────────────────────────────────────┤
│ deploy staging → smoke → aprobar │
│ │ │ │
│ ▼ ▼ │
│ tests integración deploy prod │
│ │ │
│ smoke tests │
└─────────────────────────────────────┘
DETALLES DE ETAPAS:
─────────────────────────────────────
Build:
├── Compilar/transpilar código
├── Instalar dependencias
├── Crear artefacto de build
└── Rápido, paralelizable
Lint:
├── Verificación de estilo de código
├── Análisis estático
├── Verificación de formato
└── Detectar problemas temprano
Test:
├── Tests unitarios
├── Tests de integración
├── Tests E2E (si son rápidos)
└── Confianza en la corrección
Seguridad:
├── Escaneo de dependencias
├── SAST (análisis estático)
├── Detección de secretos
└── Gates de seguridad
Optimización del Pipeline
Haciéndolo Rápido
OPTIMIZACIÓN DE PIPELINE
═════════════════════════
PARALELIZACIÓN:
─────────────────────────────────────
Ejecutar jobs independientes en paralelo:
┌── lint
build ──┼── tests unitarios ──► deploy
└── security scan
En lugar de:
build → lint → tests → security → deploy
CACHÉ:
─────────────────────────────────────
Cachear:
├── Dependencias (node_modules, etc.)
├── Artefactos de build
├── Capas Docker
├── Fixtures de test
├── Ahorro enorme de tiempo
└── Cachear agresivamente
FEEDBACK RÁPIDO:
─────────────────────────────────────
Ordenar por velocidad e importancia:
├── Lint primero (rápido, detecta problemas comunes)
├── Tests unitarios después (rápido, alto valor)
├── Tests de integración (más lento)
├── Tests E2E (más lento aún)
├── Fallar rápido
└── Optimizar el cuello de botella
Estrategias de Testing
PIRÁMIDE DE TESTING:
┌─────────────────────────────────────────────────────────────┐
│ │
│ ╱╲ │
│ ╱ ╲ │
│ ╱ E2E╲ Pocos, lentos, costosos │
│ ╱──────╲ (5-10% de tests) │
│ ╱ ╲ │
│ ╱Integración╲ Algunos, velocidad media │
│ ╱────────────╲ (15-25% de tests) │
│ ╱ ╲ │
│ ╱ Tests Unitarios╲ Muchos, rápidos, baratos │
│ ╱──────────────────╲ (65-80% de tests) │
│ │
│ TIEMPOS OBJETIVO DE EJECUCIÓN: │
│ • Tests unitarios: < 2 minutos │
│ • Integración: < 10 minutos │
│ • E2E: < 20 minutos │
│ • Pipeline completo: < 30 minutos │
└─────────────────────────────────────────────────────────────┘
Estrategias de Deployment
Deployment Progresivo
OPCIONES DE DEPLOYMENT:
┌─────────────────────────────────────────────────────────────┐
│ │
│ ROLLING DEPLOYMENT: │
│ [■■■■■□□□□□] → [■■■■■■■□□□] → [■■■■■■■■■■] │
│ Versión vieja Rollout Nueva versión │
│ gradual │
│ │
│ BLUE-GREEN: │
│ Blue (live) ────────────┬───→ Blue (standby) │
│ Green (standby) ────────┴───→ Green (live) │
│ Cambio instantáneo, rollback fácil │
│ │
│ CANARY: │
│ [■■■■■■■■■□] → [■■■■■■■□□□] → [■■■■■□□□□□] │
│ 1% usuarios 10% usuarios 100% usuarios │
│ │
│ FEATURE FLAGS: │
│ • Desplegar código, activar para usuarios │
│ • Rollback instantáneo sin redeploy │
│ • Testing en producción seguro │
│ • A/B testing integrado │
└─────────────────────────────────────────────────────────────┘
Configuración de Gates
QUALITY GATES:
┌─────────────────────────────────────────────────────────────┐
│ │
│ GATE DE PR: │
│ ├── Todos los tests pasan │
│ ├── Cobertura > 80% │
│ ├── Sin issues de seguridad críticos │
│ ├── Code review aprobado │
│ └── Lint sin errores │
│ │
│ GATE DE STAGING: │
│ ├── Deploy exitoso │
│ ├── Smoke tests pasan │
│ ├── Tests de integración pasan │
│ └── Performance dentro de límites │
│ │
│ GATE DE PRODUCCIÓN: │
│ ├── Staging validado │
│ ├── Aprobación manual (opcional) │
│ ├── Ventana de deployment apropiada │
│ └── Rollback plan definido │
│ │
│ POST-DEPLOY: │
│ ├── Smoke tests de producción │
│ ├── Monitoreo de errores │
│ ├── Alertas configuradas │
│ └── Rollback automático si falla │
└─────────────────────────────────────────────────────────────┘
Manejando Tests Inestables
Proceso de Cuarentena
GESTIÓN DE TESTS FLAKY:
┌─────────────────────────────────────────────────────────────┐
│ │
│ DETECCIÓN: │
│ • Rastrear tasa pass/fail por test │
│ • Identificar tests que fallan intermitentemente │
│ • Threshold: <95% pass rate = flaky │
│ │
│ PROCESO DE CUARENTENA: │
│ 1. Marcar test como flaky en sistema │
│ 2. Mover a suite de test separada │
│ 3. No bloquear deployments por tests flaky │
│ 4. Arreglar o eliminar dentro de 2 semanas │
│ │
│ PREVENCIÓN: │
│ • Evitar tests dependientes del tiempo │
│ • Usar datos de test determinísticos │
│ • Aislar tests de servicios externos │
│ • Revisar diseño de tests en code reviews │
│ │
│ MÉTRICAS A MONITOREAR: │
│ • % de tests flaky │
│ • Tiempo promedio para arreglar flaky │
│ • Impacto en tiempo de pipeline │
└─────────────────────────────────────────────────────────────┘
Monitoreo del Pipeline
Métricas Clave
MÉTRICAS DE PIPELINE:
┌─────────────────────────────────────────────────────────────┐
│ │
│ VELOCIDAD: │
│ • Tiempo promedio de pipeline │
│ • Tiempo por etapa │
│ • Tiempo de cola │
│ │
│ CONFIABILIDAD: │
│ • Tasa de éxito de pipeline │
│ • Tasa de tests flaky │
│ • Frecuencia de rollbacks │
│ │
│ THROUGHPUT: │
│ • Deploys por día/semana │
│ • Lead time (commit → producción) │
│ • Frecuencia de deployment │
│ │
│ DASHBOARD EJEMPLO: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ PIPELINE HEALTH ││
│ │ ││
│ │ Tiempo: 12 min avg │ Éxito: 94% ││
│ │ Deploys: 8/día │ Flaky: 2% ││
│ │ ││
│ │ ETAPAS MÁS LENTAS: ││
│ │ 1. Tests E2E - 6 min ││
│ │ 2. Build - 3 min ││
│ │ 3. Tests integración - 2 min ││
│ └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
Integración con GitScrum
Visibilidad del Pipeline
GITSCRUM + CI/CD:
┌─────────────────────────────────────────────────────────────┐
│ │
│ CONEXIÓN AUTOMÁTICA: │
│ • Estado de build visible en tarjetas de tarea │
│ • Historial de deploys por feature │
│ • Links directos a logs de pipeline │
│ • Notificaciones de fallas │
│ │
│ FLUJO DE TRABAJO: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ││
│ │ [Tarea] ──► [PR] ──► [CI] ──► [Merge] ──► [Deploy] ││
│ │ │ │ │ │ │ ││
│ │ └─────────┴────────┴──────────┴───────────┘ ││
│ │ Todo visible en GitScrum ││
│ │ ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ RELEASE NOTES AUTOMÁTICAS: │
│ • Genera changelog de tareas completadas │
│ • Lista features incluidas en release │
│ • Documenta bugs arreglados │
│ • Comparte con stakeholders │
└─────────────────────────────────────────────────────────────┘