Тестовое окружение для 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
2020-05-21 16:15

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

Ответить
Руслан
2020-05-28 06:33

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

Ответить
Дмитрий Елисеев
2020-05-29 05:57

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

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

Ответить
fedot
2020-05-29 07:50

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

Ответить
Дмитрий Елисеев
2020-05-29 13:36

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

Ответить
fedot
2020-05-29 13:41

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

Ответить
Sergei
2020-05-31 17:13

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

Ответить
elmut
2020-05-31 19:47

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

Ответить
Дмитрий Елисеев
2020-06-07 05:33

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

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

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

Ответить
Евгений
2020-09-11 04:30

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

Ответить
Дмитрий Елисеев
2020-09-11 07:08

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

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

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

Ответить
Дмитрий Елисеев
2020-09-11 07:27

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

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

Ответить
slo_nik
2021-08-29 21:25

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

Помогите, пожалуйста, довести до ума запуск 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

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

Ответить
Дмитрий Елисеев
2021-09-07 13:31

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

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

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

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

Ответить
slo_nik
2021-09-07 13:35

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

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

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

Ответить
slo_nik
2021-09-07 18:15

Если запускаю просто 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
2023-04-30 22:52

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

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

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

Yandex
MailRu
GitHub
Google