El stage E2E corría contra A76_URL (versión viva en dev), así que detectaba
regresiones un build tarde: el código roto ya estaba desplegado cuando el
siguiente pipeline lo encontraba. Ahora E2E levanta un stack efímero con la
imagen del backend recién pusheada a Harbor y una imagen del frontend
buildeada localmente con VITE_API_URL=http://localhost:8000/api/ (la imagen
de prod tiene la URL de dev bakeada en el bundle). Si E2E falla, el deploy
no ocurre — el guardrail actúa sobre lo que se va a desplegar.
Cambios:
- docker-compose.e2e.yml (nuevo): postgres + minio + valkey + backend +
frontend efímeros, sin volúmenes persistidos, image tags vía env vars.
- Jenkinsfile: stage E2E reescrito. Build temp frontend en paralelo con
startup DB+alembic; preparación Playwright en paralelo con health wait
de backend/frontend. --cache-from de la imagen prod para reusar layer
de pnpm install. Cleanup garantizado vía trap EXIT.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>