estrategias de devops - galoryzen/equipo8-pfinal GitHub Wiki
Evidencias de Estrategias de DevOps - Sprint 1
Video Evidencias Semana 1
1. Parametrización de Integración Continua / Despliegue Continuo
El proyecto cuenta con 4 workflows de GitHub Actions configurados en .github/workflows
1.1 Backend CI/CD (backend.yml)
- Trigger: push y pull request a
main, workflow dispatch manual. - Detección inteligente de cambios: usa
dorny/paths-filterpara identificar cuáles de los 5 microservicios fueron modificados (auth, catalog, booking, payment, notification). También detecta cambios enbackend/libs/(librerías compartidas). - Ejecución selectiva: solo ejecuta
pytestsobre los servicios que realmente cambiaron, optimizando el tiempo de CI. - Coverage gate: cada servicio debe tener minimo 70% de cobertura de lineas (
--cov=app --cov-fail-under=70), alineado con el objetivo OBJ-002. - Pipeline CD (solo en push a main): despliega automaticamente solo los servicios modificados:
- Configura credenciales AWS via OIDC (
role-to-assume) - Pull de imagen
latestdesde ECR como cache de capas Docker (inline cache con BuildKit) - Build de imagen Docker con context en
backend/y Dockerfile del servicio - Push a Amazon ECR (
travelhub/{servicio}) con tagslatesty commit SHA - Actualiza task definition de ECS con la nueva imagen
- Despliega en cluster ECS Fargate (
travelhub) con--force-new-deployment
- Configura credenciales AWS via OIDC (
- Job de resultado:
backend-resultcorre siempre (if: always()) y reporta el estado consolidado para los status checks de la rama.
1.2 Frontend CI/CD (frontend.yml)
- Trigger: push y pull request a
main, workflow dispatch manual. - Detección de cambios: filtra por modificaciones en
frontend/**. - Pipeline CI:
- Instala dependencias con
pnpm install --frozen-lockfile - Ejecuta tests con cobertura (
pnpm test:coverage) - Build estático (
pnpm build) que generaout/ - Sube artefacto del build
- Instala dependencias con
- Pipeline CD (solo en push a main):
- Descarga artefacto del build
- Configura credenciales AWS via OIDC (
role-to-assume) - Sincroniza
out/a S3 (aws s3 sync --delete) - Invalida caché de CloudFront
- Smoke test: verifica HTTP 200 en la URL de producción
- Job de resultado:
frontend-resultreporta estado consolidado.
1.3 Mobile CI (mobile.yml)
- Trigger: push y pull request a
main, workflow dispatch manual. - Detección de cambios: filtra por
mobile/**. - Pipeline:
- Instala dependencias con
npm ci - Verificación de tipos TypeScript (
npx tsc --noEmit) - Tests con cobertura (
npm run test:coverage)
- Instala dependencias con
- Job de resultado:
mobile-resultreporta estado consolidado.
1.4 Deploy Backend Manual (deploy-backend.yml)
- Trigger:
workflow_dispatchmanual con input de servicios a desplegar (separados por coma). - Uso: si se presenta un despliegue fallido o se requiere desplegar un servicio específico fuera del flujo normal, se puede ejecutar este workflow manualmente desde la pestaña de Actions. Solo requiere ingresar los nombres de los servicios a desplegar (ej:
auth,catalog). - Pipeline por cada servicio seleccionado:
- Pull de imagen
latestdesde ECR como cache de capas Docker - Build de imagen Docker con inline cache (BuildKit)
- Push a Amazon ECR (
travelhub/{servicio}) - Actualiza task definition de ECS
- Despliega en cluster ECS Fargate (
travelhub)
- Pull de imagen
1.5 Reglas de rama (Branch Rulesets)
La rama main tiene configuradas las siguientes reglas mediante GitHub Rulesets:
| Regla | Configuración |
|---|---|
| Protección contra eliminación | Activada |
| Non-fast-forward | Bloqueado |
| Pull request requerido | Solo merge por squash |
| Dismiss stale reviews on push | Activado |
| Status checks requeridos | backend-result, frontend-result, mobile-result |
| Strict status checks | Activado (rama debe estar al día con main) |
Esto significa que ningún código llega a main sin pasar los 3 pipelines de CI.
2. Sprint Backlog y Asignación por Integrante
Sprint 1 — Resumen
| Metrica | Valor |
|---|---|
| Historias | 20 |
| Story Points | 32 pts |
| Velocity real | S1-W1: 19 pts, S1-W2: 13 pts (32/32 completados) |
| Business Value | 28.5% acumulado |
| Foco | Busqueda, detalle de propiedad, autenticacion viajero |
Objetivo del Sprint
Entregar la experiencia base del viajero: buscar hospedajes con filtros, ver detalle de propiedades y autenticarse en la plataforma (web y movil).
Features entregadas en Sprint 1
Semana 1:
- Busqueda por ubicacion, fechas, rango de precio y amenidades (web)
- Listado de hospedajes destacados (web)
- Autenticacion viajero con JWT (web)
- Arquitectura hexagonal y CI/CD base
Semana 2:
- Detalle de propiedad con resenas (#96, #100)
- Filtros por huespedes, amenidades y precio (movil) (#97, #99, #101)
- Home page y navbar (web) (#98)
- Cache con Redis para busquedas (#102)
- Calificacion promedio de propiedades (#105)
- Consultar reservas del viajero (#106)
Asignacion por Integrante
| Integrante | Historias | Pts | Foco |
|---|---|---|---|
| Isaac Blanco | SCRUM-170, 173, 78-81 | 8 | Auth + detalle de propiedad y resenas (web) |
| Raul Lopez | SCRUM-110, 113, 115-119 | 8 | Busqueda y detalle (movil) |
| Jose Manuel Garcia | SCRUM-75, 76, 77 | 8 | Filtros de precio, amenidades y combinados (web) |
| Nicolas Calero | SCRUM-73, 74, 82, 87 | 8 | Busqueda ubicacion/fechas, calificacion, reservas (web) |
3. Commits y Pull Requests
Convenciones de commits
El equipo utiliza commits convencionales con prefijos semanticos:
feat:/feature:para nuevas funcionalidadesfix:para correccionesrefactor:para reestructuracion de codigoci:para cambios en pipelines de CI/CDdocs:para documentaciontests:para pruebas
Ramas
Cada historia de usuario o tarea se desarrolla en una rama dedicada que sigue una convencion de nombres:
feature/{id-o-descripcion}— funcionalidades nuevasfix/descripcion— correcciones de bugsrefactor/descripcion— cambios de refactorizacion- PRs se mergean a
mainvia squash merge, manteniendo un historial limpio
4. Flujo de Trabajo y Estrategia de Versionamiento
Estrategia de branching: GitHub Flow
El equipo sigue GitHub Flow, una estrategia simple y efectiva:
Flujo de trabajo
- Crear rama desde
maincon nombre descriptivo basado en la historia de usuario - Desarrollar la funcionalidad con commits frecuentes y descriptivos
- Abrir Pull Request hacia
main - CI automatico ejecuta los 3 pipelines (backend, frontend, mobile) segun los archivos modificados
- Los 3 status checks deben pasar (
backend-result,frontend-result,mobile-result) — es un requisito obligatorio configurado en las reglas de rama - Squash merge a
main— consolida todos los commits de la rama en uno solo, manteniendo un historial limpio - CD automatico — si hay cambios en frontend, se despliega automaticamente a S3 + CloudFront; si hay cambios en backend, se despliegan solo los microservicios modificados a ECS Fargate
Protecciones
- No se puede hacer push directo a
main— siempre via PR - Status checks estrictos — la rama debe estar actualizada con
mainantes de mergear - Squash-only — unica estrategia de merge permitida
- Dismiss stale reviews — si se pushean cambios nuevos, las revisiones anteriores se invalidan
5. Ejecucion de Pruebas
Estrategia de pruebas
Basada en el documento formal de estrategia (docs/DocumentoEstrategiaPruebas.pdf), con objetivo de minimo 70% de cobertura automatizada (OBJ-002).
Backend — Pytest
- Framework: pytest con soporte asyncio (
asyncio_mode = "auto") - Arquitectura hexagonal: las pruebas usan mocks de puertos (CachePort, database session) permitiendo testing aislado de la logica de negocio
- Ejecucion en CI:
pytest tests/ -v --cov=app --cov-fail-under=70por cada servicio modificado - Ejecucion local:
make test s=catalogomake coverage s=catalog
Frontend — Vitest
- Framework: Vitest v4.1 + React Testing Library v16 + jsdom
- Cobertura: proveedor v8, reportes en texto y lcov
- Alcance: archivos en
app/**/*.{ts,tsx,js,jsx} - Ejecucion en CI:
pnpm test:coverage - Ejecucion local:
pnpm testopnpm test:coverage
Mobile — Jest
- Framework: Jest v29 + jest-expo v55 + Testing Library React Native v13
- Soporte ESM:
node --experimental-vm-modules - Ejecucion en CI:
npm run test:coverage - Ademas incluye verificacion de tipos con
npx tsc --noEmit
Ejecucion en CI
Las pruebas se ejecutan automaticamente en cada PR y push a main. Evidencia de ejecuciones recientes:
Las pruebas son un requisito bloqueante para mergear: si alguno de los 3 pipelines falla, el PR no puede ser mergeado.
Coverage gate en los 3 layers
A partir de semana 2, los 3 layers tienen coverage gate >= 70% enforceado en CI:
| Layer | Mecanismo | Cobertura actual |
|---|---|---|
| Backend | pytest --cov-fail-under=70 (por servicio) |
82.8% |
| Frontend | Vitest thresholds: { lines: 70 } |
78.2% |
| Mobile | Jest coverageThreshold: 70% |
91.2% |
Si cualquier layer baja de 70%, el CI falla y el PR no puede ser mergeado.
6. Peer Review (Opcional)
El flujo de trabajo del equipo incluye pull requests como mecanismo de peer review:
- Todos los cambios pasan por PR antes de llegar a
main - Las reglas de rama tienen configurado dismiss stale reviews on push, lo que invalida revisiones previas cuando se agregan nuevos commits
- Se han hecho algunas reviews entre compañeros, aunque no es un requisito formal ni obligatorio. El enfoque principal ha sido asegurar que los pipelines de CI pasen correctamente.
7. Revision Automatica de Codigo (Opcional)
Linting y formateo
El proyecto utiliza herramientas de revision automatica de codigo:
Backend — Ruff
- Linting:
make lint s={servicio}(ruff check) - Formateo:
make format s={servicio}(ruff format)
Frontend — ESLint
- Linting:
pnpm lint - Configurado con reglas de Next.js
Mobile — TypeScript
- Verificacion de tipos:
npx tsc --noEmit(ejecutado en CI)
Status checks como puerta de calidad
Los 3 status checks requeridos (backend-result, frontend-result, mobile-result) actuan como revision automatica: si las pruebas o el build fallan, el codigo no puede entrar a main. Esto garantiza que todo codigo mergeado:
- Compila correctamente
- Pasa las pruebas automatizadas
- Cumple con las verificaciones de tipos (mobile)