Trabajen en grupos de 2 personas. Este repositorio tiene errores. Su misión es encontrarlos y corregirlos todos.
- Hacer Fork de este repositorio
- Encontrar y corregir TODOS los errores
- Lograr que el pipeline de GitHub Actions pase verde ✅
- Hacer push con las correcciones
- Enviar el link del repositorio con un archivo
CORRECCIONES.mdlistando cada error encontrado y qué se cambió
El taller termina cuando logren pipeline verde con todos los pasos pasando. Documenten cada corrección en CORRECCIONES.md.
API REST en Python (Flask) con 3 endpoints que DEBEN funcionar:
| Endpoint | Qué debería retornar |
|---|---|
/ |
{"status": "ok", "service": "devops-api"} |
/health |
JSON con CPU, memoria, uptime y status "healthy"/"unhealthy" |
/metrics |
Métricas en formato Prometheus |
├── app.py ← API Flask (¿todo bien?)
├── test_app.py ← Tests unitarios (¿pasarán?)
├── requirements.txt ← Dependencias (¿está completo?)
├── Dockerfile ← Contenerización (¿está optimizado?)
├── docker-compose.yml ← API + Prometheus (¿los puertos cuadran?)
├── prometheus.yml ← Config Prometheus (¿las rutas son correctas?)
└── .github/workflows/ci.yml ← Pipeline CI/CD (¿pasará verde?)
Los errores están en diferentes niveles:
- Código: Bugs en app.py y test_app.py
- Configuración: Puertos, rutas, dependencias
- Infraestructura: Dockerfile, docker-compose, Prometheus
- Pipeline: El workflow tiene pasos que van a fallar
No todos los errores son obvios. Algunos solo se ven cuando ejecutás el pipeline o levantás el contenedor.
# Clonar tu fork
git clone https://github.com/TU_USUARIO/devops-ci-workshop.git
cd devops-ci-workshop
# Instalar y probar
pip install -r requirements.txt
python app.py
# En otra terminal: correr tests
pytest test_app.py -v
# Probar endpoints
curl http://localhost:5000/
curl http://localhost:5000/health
curl http://localhost:5000/metrics
# Probar con Docker
docker build -t devops-api .
docker run -p 5000:5000 devops-api
# Probar con Docker Compose
docker compose up -d- Hacer correcciones
- Commit + push a
main - Ir a la pestaña Actions y ver si el pipeline pasa
- Si falla: leer los logs, corregir, push nuevamente
Crear un archivo CORRECCIONES.md en el repositorio con este formato:
# Correcciones
**Integrantes:**
- Nombre 1
- Nombre 2
## Error 1
- **Archivo:** app.py
- **Problema:** El puerto estaba en 5001 en vez de 5000
- **Solución:** Cambié `port=5001` por `port=5000`
## Error 2
- **Archivo:** ...
- **Problema:** ...
- **Solución:** ...Enviar: Link del repositorio + captura del pipeline verde.
El pipeline hace:
- ✅ Checkout del código
- ✅ Setup Python 3.11
- ✅ Instalar dependencias
- ✅ Ejecutar tests con pytest
- ✅ Build de Docker image
- ✅ Levantar contenedor y testear endpoints
- ✅ Generar reporte y subir como artefacto
Cuando los 7 pasos pasen verde, ganaron.
💡 Pista 1: Endpoints
Revisá que los endpoints en app.py coincidan con los que testean test_app.py y ci.yml. ¿`/metrics` es lo mismo que `/metric`?💡 Pista 2: Puertos
Revisá TODOS los puertos: app.py, Dockerfile, docker-compose.yml, ci.yml. Deben ser consistentes.💡 Pista 3: Dependencias
¿pytest está en requirements.txt? ¿Y en el pipeline se puede ejecutar si no está instalado?💡 Pista 4: Tests
Revisá las aserciones de test_app.py. ¿El endpoint `/` realmente devuelve `status: "running"`? ¿`/health` tiene campo `uptime_seconds`?💡 Pista 5: Dockerfile
¿`python:3.11` es lo mismo que `python:3.11-slim`? Funciona, pero no es lo óptimo. Hay errores más graves primero.💡 Pista 6: Prometheus
En docker-compose, los servicios se comunican por nombre de servicio, no por localhost. ¿El target en prometheus.yml es correcto para docker-compose?DevOps — Universidad Nacional de Colombia — Sede Manizales — 2026-1