Pipeline CI/CD โ€” NutriCore API

Arquitectura de despliegue multi-etapa con canary progressivo y rollback automatico
GitHub Actions Kubernetes / GKE Argo Rollouts Prometheus RGPD / SAST SLA 99.9%
Stack tecnico
Python 3.12 FastAPI Docker Trivy Bandit Grafana
Flujo del pipeline โ€” 9 etapas
01
๐Ÿ“ฆ
Build
Checkout + deps
docker build
docker push (GCR)
Sign artifact
โฑ ~4 min
โ†’
02
๐Ÿงช
Test + Scan
pytest (unit)
Bandit (SAST)
Trivy (CVE)
Coverage โ‰ฅ 80%
โฑ ~5 min (paralelo)
โ†’
03
๐Ÿš€
Deploy Staging
kubectl apply
Smoke test
Health /ready
โฑ ~3 min
โ†’
04
๐Ÿ”ฌ
Integration
E2E tests (Playwright)
Contract tests
Perf baseline
โฑ ~3 min
โ†’
05
๐Ÿ”
Aprobacion
QA Lead โ€” Ana G.
Dev Senior โ€” Marcos P.
Ventana L-J 10-16h
โฑ manual
โ†’
06
๐Ÿฆ
Canary Deploy
10% trafico
25% โ†’ 50%
100% (auto)
โฑ ~20 min total
โ†’
07
๐Ÿฅ
Verificacion
Deep /health/ready
Error rate < 2%
Notify Slack
โฑ ~2 min
โ†’
08
โฎ
Rollback
Auto si error > 2%
argo rollbacks abort
Alerta PD #on-call
โฑ < 2 min
โ†’
09
๐Ÿ“Š
Metricas
Marker Grafana
DORA update
Audit log RGPD
โฑ ~1 min
๐Ÿฆ Estrategia Canary โ€” Argo Rollouts
10%
10%
pausa 5min Analisis OK
25%
25%
pausa 5min Analisis OK
50%
50%
pausa 10min En progreso
100%
100% โ€” promocion automatica
โ€” Pendiente
Condicion de rollback automatico:
error_rate > 2% o p99 latency > 800ms durante cualquier fase de analisis
๐Ÿ” Puerta de Aprobacion โ€” Produccion
AG
Ana Garcia
QA Lead โ€” revision obligatoria
Aprobar
MP
Marcos Perez
Senior Dev โ€” revision obligatoria
Aprobar
โฐ Ventana de despliegue: Lunesโ€“Jueves 10:00โ€“16:00 CET
Fuera de ventana: requiere aprobacion adicional del CTO
Configurado en GitHub Settings โ†’ Environments โ†’ production โ†’ Required reviewers. Notificacion automatica via Slack #deploys-nutricore al abrirse la solicitud.
๐Ÿฅ Health Checks โ€” Deep Readiness
API Gateway
GET /health/ready
12ms
PostgreSQL
SELECT 1 (pool check)
8ms
Redis Cache
PING command
2ms
Google Secret Manager
AccessSecretVersion (dry-run)
34ms
ML Model Service
POST /predict (test payload)
180ms
Status WARN: ML Model Service latencia alta โ€” umbral 150ms, no critico. Se monitorea en siguiente ciclo.
โฎ Rollback Automatico
Condicion de disparo
error_rate_5m > 0.02 OR p99_latency_ms > 800
inconclusiveLimit: 2 (falla rapido, no cuelga)
1
Argo Rollouts detecta umbral superado
2
argo rollouts abort nutricore-api
3
Trafico vuelve al 100% version estable en < 30s
4
Alerta PagerDuty โ†’ #on-call-nutricore
5
Pipeline crea GitHub Issue automatico con SHA fallido
6
Audit log RGPD registra el incidente con timestamp
๐Ÿ“„ GitHub Actions โ€” jobs clave
# .github/workflows/nutricore-pipeline.yml
name: NutriCore Production Pipeline
on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Build & push to GCR
        run: |
          IMAGE=gcr.io/nutricore/${{ github.sha }}
          docker build -t $IMAGE .
          docker push $IMAGE

  test:
    needs: build
    strategy:
      matrix:
        job: [pytest, bandit, trivy]
    steps:
      - name: Run ${{ matrix.job }}

  deploy-production:
    needs: integration-test
    environment:
      name: production  # โ† gate manual aqui
    steps:
      - name: Canary deploy
        run: kubectl argo rollouts set image \
               nutricore-api *=gcr.io/nutricore/$SHA
๐Ÿ›ก Security Gates โ€” RGPD Compliance
PASS
Bandit SAST Python
0 high severity issues / 2 medium (accepted)
PASS
Trivy CVE Scan
0 critical / 1 high (CVE-2024-4741, mitigado)
BLOCK
Secrets en codigo
gitleaks โ€” bloquea push si detecta credenciales hardcoded
PASS
Coverage threshold
83% actual โ€” minimo exigido 80%
PASS
License compliance (SCA)
Todas las dependencias MIT / Apache-2.0 / BSD
REQUIRED
DAST (OWASP ZAP)
Obligatorio antes de staging โ€” datos de salud RGPD Art. 32
๐Ÿ“ˆ Metricas DORA โ€” Estado Actual vs Target
Deployment Frequency
Multiple/dia
Actual: 1.8x / dia (โ†‘ desde 0.3x)
Lead Time for Changes
< 1 hora
Actual: 42 min promedio
Change Failure Rate
< 5%
Actual: 2.1% (mes)
Mean Time to Recovery
< 1 hora
Actual: 18 min (con auto-rollback)
Antes del nuevo pipeline: deploy frequency 0.3x/dia, MTTR 35 min, failure rate 14%. Pipeline nuevo mejora todas las metricas al nivel Elite (Google DORA 2024).
๐Ÿ”Ž Argo Rollouts โ€” AnalysisTemplate
apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
  name: nutricore-success-rate
spec:
  metrics:
  - name: error-rate
    interval: 60s
    successCondition: "result[0] >= 0.98"
    failureCondition: "result[0] < 0.98"
    inconclusiveLimit: 2  # falla rapido
    provider:
      prometheus:
        address: http://prometheus:9090
        query: |
          sum(rate(http_requests_total
            {status!~"5..",job="nutricore"}[2m]))
          / sum(rate(http_requests_total
            {job="nutricore"}[2m]))
  - name: p99-latency
    interval: 60s
    failureCondition: "result[0] > 800"
    provider:
      prometheus:
        query: histogram_quantile(0.99,
            rate(http_duration_ms_bucket[2m]))