Тестовое окружение для Pipeline

Подготовка проекта к автотестам в CI/CD Pipeline. Добавление окружения для тестирования рабочих Docker-образов. Создание файла подкачки в Ansible.

  • 00:00:26 Постановка задачи
  • 00:02:04 Доработка передачи переменных окружения
  • 00:07:54 Тестовое окружение для docker-compose
  • 00:11:30 Команды сборки в Makefile
  • 00:13:37 Команды инициализации и остановки
  • 00:15:51 Запуск Smoke и E2E тестов
  • 00:17:31 Загрузка фикстур
  • 00:21:28 Сквозная команда запуска
  • 00:22:54 Файл подкачки
  • 00:27:16 Создание Swap-файла через Ansible
  • 00:29:08 Динамический расчёт размера Swap
Скрытый контент (код, слайды, ...) для подписчиков. Открыть →
Дмитрий Елисеев
elisdn.ru
Комментарии (17)
Arunas

самый высокий уровень, спасибо.

Ответить
Руслан

Такими темпами проект закончен будет к 2040 году

Ответить
Дмитрий Елисеев

И хорошо. Будут насыщенные высококачественные видео, а не впопыхах записанные недомонтированные поделки с кучей ошибок.

Хотел сначала записать простой пример по примитивной установке Jenkins. Но в итоге за неделю много чего дополнил и записал вчера 6 часов видео. Надеюсь, что после нескольких пересмотров удастся сократить до концентрированных полутора часов.

Ответить
fedot

Ну отлично, спасибо! Ничего там сокращать не надо, тема серьезная, если все же сократишь, то хотелось бы иметь и не сокращенный вариант тоже. Нет возможности угадать, что может быть важно из сокращенного кому то в будущем, потому исходники тоже лучше выкладывать по возможности, видео раз в неделю новое выкладывается и как раз эти 6 часов нормально за неделю посмотреть.

Ответить
Дмитрий Елисеев

Там в основном паузы, повторы и исправления. Иногда предложения по несколько раз повторяю, чтобы потом лучший вариант оставить. О разных нюансах Юлия у себя в @elisjuli_live пишет.

Ответить
fedot

Теперь понятно.

Ответить
Sergei

Здорово же правда?

Ответить
elmut

Дмитрий Елисеев У меня сервер на centos 7 какую сейчас луче всего систему учить для сервера. я Windows. ставил VirtualBox Devian 10 выливает Ubunta есть серверная?

Ответить
Дмитрий Елисеев

Это просто разные семейства:

  • Debian и основанная на нём Ubuntu
  • CentOS на основе Red Hat

Популярнее Ubuntu и Debian. Реже используют CentOS и остальные.

Ответить
Евгений

Как поступить в случае, если фронтенд и бекенд находятся в разных репозиториях. Как организовать независимый набор инструментом (команды make) для каждого отдельного проекта и для всего приложения полностью? Так же заметил, что в Dockerfile много копипасты для разных окружений, что чревато ошибками. Есть ли какие-нибудь инструменты сборки Dockerfile с элементами наследования на подобии инструментов сборки конфигурации?

Ответить
Дмитрий Елисеев

Как организовать набор инструментов для каждого отдельного проекта и для всего приложения полностью?

В простейшем случае во всех docker-compose.yml можно подключить общую внешнюю сеть через external network. Создание этой сети и команды запуска всех подпроектов можно поместить в ещё один координационный репозиторий наверху. В нём сделать Jenkinsfile, который будет запускать все подпроекты и выполнять интеграционные тесты. И в Jenkins настроить его так, чтобы этот pipeline запускался после завершения pipeline каждого подпроекта. Но всё это будет сложно.

В более продвинутом случае при вынесении фронтенда (или при разбивке на микросервисы) прямо в репозитории фронтенда с E2E-тестами делают эмулятор API вручную или через Wiremock. Тогда фронтенд при запуске будет самодостаточен как локально, так и в Jenkins. Фронтенд и API можно будет разрабатывать и тестировать отдельно. Локально запускать всё приложение полностью не будет необходимости. Но при этом нужно будет следить за корректностью API-контрактов, чтобы быть уверенным в работоспособности всей системы без общих тестов.

Ответить
Дмитрий Елисеев

Есть ли какие-нибудь инструменты сборки Dockerfile с элементами наследования?

Да, можно по отдельному Dockerfile собрать и запушить свой базовый php-fpm и уже наследоваться от него через FROM registry/php-fpm:7.4

Ответить
slo_nik

Доброй ночи, Дмитрий.

Помогите, пожалуйста, довести до ума запуск functional тестов.

Проект на Symfony.

Запуск unit тестов работает, а вот с functional никак не могу понять, как настроить работу с базой данных.

В Makefile

testing-functional-test:
COMPOSE_PROJECT_NAME=testing docker-compose -f docker-compose-testing.yml run --rm testing-php-cli composer test -- --filter=Functional
testing-unit-test:
COMPOSE_PROJECT_NAME=testing docker-compose -f docker-compose-testing.yml run --rm testing-php-cli composer test -- --filter=Unit

В тестовом dockerfile пришлось принудительно копировать composer, без этого выдавало ошибку

COPY --from=builder /bin/composer /usr/local/bin/composer

В phpunit.xml добавил нужные настройки

   <env name="APP_ENV" value="test" force="true" />
   <env name="APP_DEBUG" value="1" force="true" />

Unit тесты работают без проблем, но когда доходит до functional тестов - куча ошибок.

Первая, вроде бы простая

An exception occurred in driver: SQLSTATE[08006] [7] FATAL:  database "app_test" does not exist

Но как изменить имя базы на существующую - не могу понять. Для тестового окружения настроена база с именем app.

Пробовал в phpunit.xml, в docker-compose-testing.yml явно указывать имя базы, но результата это не дало.

phpunit.xml

<env name="DB_NAME" value="app" force="true" />

docker-compose-testing.yml

  testing-php-cli:
    image: ${REGISTRY}/pohoron:testing-php-cli-${IMAGE_TAG}
    environment:
       APP_ENV: dev
       APP_DEBUG: 1
      DB_NAME: app

Как можно решить эту проблему?

Ответить
Дмитрий Елисеев

В тестовом dockerfile пришлось принудительно копировать composer, без этого выдавало ошибку

Это нужно если запускаете тесты через composer test вместо нативного запуска bin/app.php или vendor/bin/phpunit.

Но как изменить имя базы на существующую - не могу понять.

Поищите в проекте строку с app_test и измените или удалите. Возможно, что это в файле .env.test

Ответить
slo_nik

Поищите в проекте строку с app_test и измените или удалите. Возможно, что это в файле .env.test

Искал через edit -> find -> find in files , но ничего не находит в phpstorm.

В .env.test нет настроек базы данных для тестирования. Попробую указать в .env_test имя базы, может поможет)

Ответить
slo_nik

Если запускаю просто functional тесты через dev образы, то всё работает

docker-compose run --rm project-php-cli php bin/phpunit --testsuite functional

Не пойму, почему через тестовые образы в docker-testing-compose.yml не находит базу.

COMPOSE_PROJECT_NAME=testing docker-compose -f docker-compose-testing.yml run --rm testing-php-cli php bin/phpunit --filter Functional

Если изменить команду на такую

COMPOSE_PROJECT_NAME=testing docker-compose -f docker-compose-testing.yml run --rm testing-php-cli php bin/phpunit --testsuite Functional

то вообще в консоли пишет

PHPUnit 9.5.9 by Sebastian Bergmann and contributors.

No tests executed!

Ответить
Sasha

Префикс "_test" для тестовой базы прописан в файле doctrine.yaml Нужно закомментировать строку: dbname_suffix: '_test%env(default::TEST_TOKEN)%'

Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий

Или войти через:

Yandex
MailRu
GitHub
Google