Песочница (среда разработки) для веб-разработчиков

В системе контроля задач создаётся новый элемент с уникальным именем (порядковым номером). В репозитории проекта создаётся ветка с этим именем в нижнем регистре.

Раработчик вносит изменения в код и выполняет push на удалённый сервер. CI-сервер (gitlab) подхватывает это событие и создаёт задание worker для песочниц. Worker выполняет задание - разворачивает песочницу и добавляет в конфигурацию nginx уникальный домен, с которым может работать заказчик/тестировщик/аналитик и другие участники процесса.

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

  • много оперативной памяти (из расчёта количество задач в день, над которыми предстоит работать * количество контейнеров * количество потребляемой памяти на контейнер);
  • 200 GB HDD в разделе /var/lib/docker для сборки контейнеров;
  • docker-демон;
  • docker-compose;
  • хостовой nginx для проксирования сайтов - должен быть по умолчанию закрыт из внешки для коммерческих проектов; его конфигурация должна автоматически подтягивать конфигурации песочниц;
  • хостовой consul для разрешения имён контейнеров в IP-адреса;
  • скрипты для ночного удаления контейнеров;
  • скрипты для ночного удаления песочниц.

Worker создаётся таким с целью:

  • выделения ресурсов по требованию (требование гибкости);
  • возврата ресурсов в общий пул, когда они становятся не нужны (ресурсы стоят денег).

В таком случае шаги сборки будут следующими:

  1. Вычистить образы selenium (при потребности в браузерном тестировании)
  2. Собрать dev-образ 1 (например, web); Собрать dev-образ 2 (например, cron);
  3. Развернуть dev-образы в окружении разработчика (допустимо использование других контейнеров, например, percona);
  4. Прогнать автоматические тесты с вычислением покрытия, загрузить артефакты (покрытие, неудачные тесты) в CI;
  5. Собрать продуктовые образы;
  6. Развернуть продуктовые в окружении разработчика;
  7. Прогнать автоматические тесты ещё раз;
  8. Вычистить образы selenium (при потребности в браузерном тестировании);
  9. Выгрузить образ в магазин приложений;
  10. (вручную) Разместить приложение в продуктовой среде.