Ir al contenido

Pruebas E2E con Docker

El modo E2E con Docker arranca un entorno desechable de GitLab, provisiona fixtures, registra un runner de CI y ejecuta la suite end-to-end de MCP contra esa instancia local. La ruta por defecto usa GitLab CE; el modo Enterprise usa la imagen EE más una licencia Ultimate local. Úsalo cuando necesites validación de alta confianza sin depender de una instancia real configurada en .env.

ComponentePropósito
GitLab CE o EEInstancia efímera de GitLab para llamadas reales a REST y GraphQL
GitLab RunnerHabilita flujos de pipelines y jobs que los tests unitarios no pueden ejercitar
Servicio de fixturesProporciona endpoints deterministas para webhooks, emoji personalizados y mirrors
Suite E2EEjecuta flujos de herramientas individuales, meta-herramientas y herramientas dinámicas mediante transporte MCP en memoria

El modo Docker cubre los mismos flujos de ciclo de vida que los E2E autoalojados, además de escenarios de pipelines y jobs que solo están disponibles en Docker. Crea datos temporales en GitLab y los elimina al desmontar el stack.

Ventana de terminal
make test-e2e-docker

Ese objetivo orquesta el stack Docker, espera a GitLab, configura el usuario y el runner de pruebas, ejecuta la suite E2E de Go con el build tag e2e, y escribe reportes JUnit y JSON.

Para ejecutar la cobertura Enterprise/Premium contra GitLab EE, define ENTERPRISE_LICENSE en .env o en la shell y usa:

Ventana de terminal
make test-e2e-docker-enterprise

Ese objetivo se ejecuta con los build tags e2e enterprise, asi compila los archivos comunes de harness y los tests Enterprise/Premium de test/e2e/suite/*_ee_test.go. Los tests solo CE viven en test/e2e/suite/*_ce_test.go y quedan en make test-e2e-docker, mientras las fixtures Enterprise pueden ajustarse de forma independiente.

Cuando ENTERPRISE_LICENSE contiene un activation code de 24 caracteres, la primera ejecucion correcta exporta la licencia reutilizable generada a test/e2e/.enterprise-license. Las siguientes ejecuciones Enterprise prefieren ese cache local ignorado por Git y lo instalan mediante la License API, asi no consumen otra vez el activation code.

Usa la secuencia manual cuando necesites inspeccionar la UI de GitLab o relanzar un test concreto sin recrear el stack cada vez.

Ventana de terminal
docker compose -f test/e2e/docker-compose.yml up -d
./test/e2e/scripts/wait-for-gitlab.sh
./test/e2e/scripts/setup-gitlab.sh
./test/e2e/scripts/register-runner.sh
set -a && source test/e2e/.env.docker && set +a
go test -v -tags e2e -timeout 600s ./test/e2e/suite/
docker compose -f test/e2e/docker-compose.yml down -v

Para preparar Enterprise manualmente, usa la imagen EE en los comandos de compose y activa el flag durante el provisionamiento:

Ventana de terminal
env GITLAB_IMAGE=gitlab/gitlab-ee:latest docker compose -f test/e2e/docker-compose.yml up -d
GITLAB_ENTERPRISE=true ./test/e2e/scripts/setup-gitlab.sh
env GITLAB_IMAGE=gitlab/gitlab-ee:latest docker compose -f test/e2e/docker-compose.yml down -v

Para ejecutar solo el flujo de herramientas dinámicas después de preparar el entorno:

Ventana de terminal
E2E_MODE=docker \
go test -v -tags e2e -timeout 600s \
-run '^TestDynamicToolSurface' \
./test/e2e/suite/
Situación¿Usar E2E Docker?
Cambios en registro de herramientas, proyección del catálogo o schemas
Cambios en pipelines, jobs, webhooks, emoji personalizados o mirrors
Verificar release candidates antes de publicar binarios
Editar una página Markdown estrechaNormalmente no
Depurar un unit test fallando con respuestas mock de GitLabNormalmente no

La suite escribe reportes legibles por máquinas para CI y diagnóstico local. Si una ejecución falla, mantén el stack Docker levantado mientras inspeccionas los datos de GitLab, los logs del runner y los reportes E2E generados. Cuando termines, elimina todos los datos de prueba con:

Ventana de terminal
docker compose -f test/e2e/docker-compose.yml down -v
SíntomaQué comprobar
GitLab nunca queda listoLímites de memoria y CPU de Docker; GitLab necesita varios GB de RAM
Los escenarios Enterprise no se habilitanGITLAB_ENTERPRISE=true, la imagen EE y ENTERPRISE_LICENSE en .env
Tests de pipelines o jobs saltados/fallandoSalida de registro del runner y valores de test/e2e/.env.docker
Fallos en webhooks o mirrorsSalud del contenedor de fixtures y URLs internas de la red Docker
Una repetición ve datos antiguosEjecuta docker compose -f test/e2e/docker-compose.yml down -v y empieza de nuevo

Docker E2E es más lento que los tests unitarios, pero es la ruta de validación preferida para migraciones de arquitectura porque ejercita la API real de GitLab, el transporte MCP y todas las superficies públicas de herramientas a la vez.