Skip to content

Latest commit

 

History

History
533 lines (404 loc) · 12 KB

File metadata and controls

533 lines (404 loc) · 12 KB

Docker для Kafka Test Framework

Полная поддержка контейнеризации тестов с использованием Docker и Docker Compose.

Содержание

Быстрый старт

1. Установка Docker

Windows:

# Скачайте и установите Docker Desktop
# https://www.docker.com/products/docker-desktop

macOS:

brew install --cask docker

Linux (Ubuntu):

sudo apt update
sudo apt install docker.io docker-compose
sudo usermod -aG docker $USER
# Перелогиньтесь после этого

2. Подготовка сертификатов

Создайте директорию и поместите туда ваши Kafka сертификаты:

mkdir kafka_key
# Скопируйте файлы:
# - kafka.truststore.jks
# - kafka.keystore.p12

3. Настройка переменных окружения

Создайте файл .env в корне проекта:

# Пароли для SSL сертификатов
KAFKA_SSL_TRUSTSTORE_PASSWORD=ваш_пароль
KAFKA_SSL_KEYSTORE_PASSWORD=ваш_пароль

# Пароли для API
KAFKA_REST_API_PASSWORD=ваш_пароль
KAFKA_SCHEMA_REGISTRY_PASSWORD=ваш_пароль

# Путь к сертификатам (опционально)
KAFKA_CERTS_PATH=./kafka_key

4. Запуск тестов

# Все тесты последовательно
./docker/docker-run.sh

# Только smoke тесты
./docker/docker-run.sh --smoke

# Параллельное выполнение
./docker/docker-run.sh --parallel

# С пересборкой образа
./docker/docker-run.sh --build

Требования

  • Docker: 20.10+
  • Docker Compose: 2.0+
  • Память: минимум 4GB RAM для контейнера
  • Диск: 2GB свободного места

Структура файлов

docker/
├── Dockerfile              # Многоступенчатая сборка образа
├── docker-compose.yml      # Конфигурация сервисов
├── docker-run.sh          # Скрипт запуска (Linux/macOS)
└── README.md              # Эта документация

.dockerignore              # Игнорируемые файлы при сборке

Конфигурация

Dockerfile

Двухступенчатая сборка:

Этап 1 (Builder):

  • Базовый образ: maven:3.9-eclipse-temurin-17
  • Загрузка зависимостей
  • Компиляция проекта

Этап 2 (Runtime):

  • Базовый образ: eclipse-temurin:17-jre-alpine
  • Минимальный размер образа
  • Безопасность (non-root пользователь)

Docker Compose сервисы

1. kafka-tests (основной)

Запускает все тесты последовательно:

docker-compose -f docker/docker-compose.yml run kafka-tests

2. kafka-tests-smoke

Только smoke тесты:

docker-compose -f docker/docker-compose.yml run kafka-tests-smoke

3. kafka-tests-parallel

Параллельное выполнение (8 потоков):

docker-compose -f docker/docker-compose.yml run kafka-tests-parallel

4. allure-report

Сервер Allure отчетов:

docker-compose -f docker/docker-compose.yml up -d allure-report

Запуск тестов

Базовые команды

Все тесты:

./docker/docker-run.sh

Smoke тесты:

./docker/docker-run.sh --smoke

Параллельное выполнение:

./docker/docker-run.sh --parallel

Дополнительные опции

Пересборка образа:

./docker/docker-run.sh --build

Очистка volumes:

./docker/docker-run.sh --clean

Без вывода логов:

./docker/docker-run.sh --no-logs

Использование docker-compose напрямую

Запуск конкретных тестов:

docker-compose -f docker/docker-compose.yml run kafka-tests \
  test -Dgroups=producer

Запуск с переменными:

docker-compose -f docker/docker-compose.yml run \
  -e THREAD_COUNT=16 \
  kafka-tests-parallel

Запуск в фоне:

docker-compose -f docker/docker-compose.yml up -d kafka-tests
docker-compose -f docker/docker-compose.yml logs -f kafka-tests

Просмотр отчетов

Allure Report Server

Запуск сервера:

./docker/docker-run.sh --report
# или
docker-compose -f docker/docker-compose.yml up -d allure-report

Доступ:

Остановка:

docker-compose -f docker/docker-compose.yml down allure-report

Локальные отчеты

Результаты сохраняются в:

target/
├── allure-results/     # Сырые результаты
├── allure-reports/     # Сгенерированные отчеты
└── logs/              # Логи выполнения

Управление контейнерами

Просмотр логов

Реального времени:

docker-compose -f docker/docker-compose.yml logs -f kafka-tests

Последние 100 строк:

docker-compose -f docker/docker-compose.yml logs --tail=100 kafka-tests

Остановка сервисов

# Остановить все
docker-compose -f docker/docker-compose.yml down

# С удалением volumes
docker-compose -f docker/docker-compose.yml down -v

# Остановить конкретный сервис
docker-compose -f docker/docker-compose.yml stop allure-report

Список контейнеров

docker-compose -f docker/docker-compose.yml ps

Troubleshooting

Проблема: Недостаточно памяти

Симптомы:

OutOfMemoryError: Java heap space

Решение: Увеличьте память в docker-compose.yml:

deploy:
  resources:
    limits:
      memory: 8G

Или через переменную окружения:

export MAVEN_OPTS="-Xmx4096m"
./docker/docker-run.sh

Проблема: Сертификаты не найдены

Симптомы:

FileNotFoundException: /app/kafka_key/kafka.truststore.jks

Решение:

  1. Проверьте путь к сертификатам:
ls -la kafka_key/
  1. Убедитесь, что путь указан правильно в .env:
KAFKA_CERTS_PATH=./kafka_key
  1. Проверьте монтирование в docker-compose.yml:
volumes:
  - ${KAFKA_CERTS_PATH:-./kafka_key}:/app/kafka_key:ro

Проблема: Permission denied

Симптомы:

Permission denied: /app/target/logs

Решение: Дайте права на запись:

chmod -R 777 target/

Или запустите от своего пользователя:

docker-compose -f docker/docker-compose.yml run \
  -u $(id -u):$(id -g) \
  kafka-tests

Проблема: Образ не собирается

Симптомы:

ERROR: failed to solve: process "/bin/sh -c mvn dependency:go-offline -B"

Решение:

  1. Проверьте подключение к интернету
  2. Очистите Docker кеш:
docker builder prune -a
  1. Пересоберите с --no-cache:
docker-compose -f docker/docker-compose.yml build --no-cache

Проблема: Тесты зависают

Симптомы: Тесты не завершаются долгое время

Решение:

  1. Увеличьте таймауты:
docker-compose -f docker/docker-compose.yml run \
  -e TEST_TIMEOUT_SECONDS=120 \
  kafka-tests
  1. Проверьте подключение к Kafka:
docker-compose -f docker/docker-compose.yml run kafka-tests \
  bash -c "curl -v KAFKA_BOOTSTRAP_SERVERS"

Проблема: Docker Compose версии

Симптомы:

ERROR: version is obsolete

Решение: Обновите Docker Compose:

# Linux
sudo apt update
sudo apt install docker-compose-plugin

# macOS
brew upgrade docker-compose

# Windows
# Обновите Docker Desktop

Безопасность

Не храните секреты в docker-compose.yml

Плохо:

environment:
  - KAFKA_SSL_TRUSTSTORE_PASSWORD=mypassword123

Хорошо:

environment:
  - KAFKA_SSL_TRUSTSTORE_PASSWORD=${KAFKA_SSL_TRUSTSTORE_PASSWORD}

Используйте Docker secrets

Для продакшена используйте Docker Swarm secrets:

secrets:
  kafka_truststore_pass:
    external: true

Ограничьте ресурсы

Всегда устанавливайте лимиты:

deploy:
  resources:
    limits:
      cpus: '4'
      memory: 4G

Оптимизация

Ускорение сборки

1. Используйте .dockerignore: Уже настроено в проекте

2. Кешируйте Maven зависимости:

volumes:
  - maven-cache:/root/.m2

3. Используйте BuildKit:

DOCKER_BUILDKIT=1 docker build -t kafka-tests .

Ускорение выполнения тестов

1. Параллельное выполнение:

./docker/docker-run.sh --parallel

2. Увеличьте ресурсы:

deploy:
  resources:
    limits:
      cpus: '8'
      memory: 8G

3. Используйте SSD: Убедитесь, что Docker использует SSD диск

CI/CD Integration

GitHub Actions

- name: Run tests in Docker
  run: |
    echo "${{ secrets.KAFKA_TRUSTSTORE_BASE64 }}" | base64 -d > kafka_key/kafka.truststore.jks
    echo "${{ secrets.KAFKA_KEYSTORE_BASE64 }}" | base64 -d > kafka_key/kafka.keystore.p12
    ./docker/docker-run.sh --parallel

GitLab CI

test:
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker-compose -f docker/docker-compose.yml run kafka-tests

Jenkins

stage('Run Tests') {
    steps {
        sh './docker/docker-run.sh --parallel'
    }
}

Дополнительные ресурсы

Полезные команды

# Удалить все неиспользуемые образы
docker image prune -a

# Посмотреть размер образов
docker images | grep kafka-test

# Зайти в контейнер
docker-compose -f docker/docker-compose.yml run kafka-tests bash

# Скопировать файл из контейнера
docker cp kafka-test-runner:/app/target/logs/test.log ./

# Мониторинг ресурсов
docker stats kafka-test-runner

# Экспорт образа
docker save kafka-test-framework:latest | gzip > kafka-tests.tar.gz

# Импорт образа
docker load < kafka-tests.tar.gz

Версия документации: 1.0.0
Дата обновления: 2026-01-13