This document explains how to run E2E tests with guaranteed fresh Docker images.
# This command will:
# 1. Clean all existing Docker images
# 2. Rebuild JARs from source
# 3. Build fresh Docker images (including base image)
# 4. Run all E2E tests
./gradlew :e2eTest:e2eTestClean# Only use this if you know Docker images are up-to-date
./gradlew :e2eTest:test| Command | What It Does | Duration | When to Use |
|---|---|---|---|
./gradlew :e2eTest:e2eTestClean |
Clean + Rebuild + Test | ~8-12 min | After any code change |
./gradlew :e2eTest:test |
Test with existing images | ~3-5 min | Quick verification only |
./gradlew :e2eTest:cleanDockerImages |
Remove all images/containers | ~30 sec | Manual cleanup |
./gradlew :e2eTest:buildDockerImages |
Rebuild images only | ~6-8 min | Verify Docker build |
./gradlew :e2eTest:buildServiceJars |
Build JARs only | ~2-3 min | Verify compilation |
Docker caches build layers. Without explicit cleanup:
- ❌ Tests might use old code even after changes
- ❌ Base image (DockerFile-base) might be stale
- ❌ Dependencies might not be updated
- ❌ Tests pass but deployed code fails
This task guarantees fresh builds by:
- Removing all images (including
base-builder) - Rebuilding with
--no-cacheflag - Rebuilding DockerFile-base from scratch
- Ensuring latest code in all containers
# Make code changes to Player service
vim Player/src/main/kotlin/...
# Test with fresh images
./gradlew :e2eTest:e2eTestClean
# Fast feedback if no changes
./gradlew :e2eTest:test# Ensure all tests pass with latest code
./gradlew :e2eTest:e2eTestClean
# Verify the results
open e2eTest/build/reports/tests/test/index.html# Always use clean build in CI
- name: Run E2E Tests
run: ./gradlew :e2eTest:e2eTestClean# If Docker is acting strange, clean everything
./gradlew :e2eTest:cleanDockerImages
# Verify Docker is clean
docker images | grep burraco
docker ps -a | grep burracoThe cleanDockerImages task removes:
- ✅ Service images:
burraco-vertx-game,burraco-vertx-player,burraco-vertx-dealer - ✅ Base image:
base-builder,burraco-vertx-base-builder - ✅ Containers: All running/stopped containers
- ✅ Volumes: All named volumes (to clean databases)
- ✅ Orphans: Containers not defined in docker-compose.yml
Infrastructure images are NOT removed:
- ℹ️ EventStore (KurrentDB)
- ℹ️ Kafka (Redpanda)
- ℹ️ Redpanda Console
This is normal! The cleanup task tries to remove all possible images. If an image doesn't exist, it's safely ignored.
Check that services built correctly:
./gradlew :e2eTest:buildServiceJars
./gradlew :Game:shadowJar --infoClean all Docker resources:
./gradlew :e2eTest:cleanDockerImages
docker system prune -a --volumes -fManually stop everything:
cd /path/to/project
docker compose down --volumes --remove-orphans🧹 Cleaning Docker environment...
Stopping containers...
Removing Docker images...
✅ Docker environment cleaned!
🐳 Building Docker images from scratch...
This may take several minutes...
Building base-builder... [LONG - 3-5 min]
Building game... [FAST - uses base-builder]
Building player... [FAST - uses base-builder]
Building dealer... [FAST - uses base-builder]
✅ All Docker images built successfully!
🧪 Starting E2E tests with fresh Docker images...
🚀 Starting Burraco services with docker-compose...
⏳ Waiting for services to be ready...
✓ Game is healthy
✓ Player is healthy
✅ All services started successfully!
[Cucumber tests run]
🛑 Stopping Burraco services...
✅ All services stopped.
| Task | First Run | Subsequent Runs |
|---|---|---|
| Clean | 30 seconds | 30 seconds |
| Build JARs | 2-3 minutes | 30 seconds (cached) |
| Build Base Image | 3-5 minutes | N/A (rebuilt each time) |
| Build Service Images | 1-2 minutes | N/A (rebuilt each time) |
| Start Containers | 30 seconds | 30 seconds |
| Run Tests | 1-2 minutes | 1-2 minutes |
| Total | 8-12 minutes | 8-12 minutes |
- Run
e2eTestCleanafter making code changes - Run
e2eTestCleanbefore submitting PRs - Use
e2eTestCleanin CI/CD pipelines - Clean up Docker regularly to save disk space
- Don't use regular
testtask for important validations - Don't assume Docker images are up-to-date
- Don't skip cleanup in CI/CD
- Don't commit without running
e2eTestClean
- See
e2eTest/CLAUDE.mdfor detailed E2E test documentation - See
docker-compose.ymlfor service configuration - See
DockerFile-basefor base image details
If tests behave unexpectedly:
- Run
./gradlew :e2eTest:cleanDockerImages - Run
./gradlew :e2eTest:e2eTestClean - Check Docker logs:
docker logs <container-id> - Verify images were rebuilt:
docker images | grep burraco