Запустить сборку и тестирование в dockerfile против CI? - PullRequest
0 голосов
/ 28 февраля 2019

самый быстрый способ запуска тестов на CI - ./gradlew test или ./gradle build.он загрузит все необходимые зависимости (которые могут быть каким-то образом кэшированы в CI), запустит тесты и создаст артефакт (файл jar)

Я также хочу создать образ докера.некоторые варианты, которые я рассмотрел:

  • построить образ докера на CI и предположить, что артефакт уже существует.это самый быстрый способ, но он связывает процесс сборки с КИ.его нельзя просто собрать вручную с помощью 1 команды (сборка Docker)

  • запустить тесты как часть сборки Docker.на CI требуется больше времени, прежде чем я получу информацию о провале теста (так как он должен загрузить изображение, зависимости и т. д.).но это позволяет легко создавать докер локально (вероятно, редко используемую функциональность, но полезно для локального docker-compose для тестов)

  • параметризованная сборка для отключения / включения тестов по умолчанию

каков стандартный способ удовлетворения этих требований?какие-либо лучшие практики?

1 Ответ

0 голосов
/ 28 февраля 2019

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

Пишите хорошие локальные тесты (например, на земле Java,используя JUnit) и убедитесь, что они проходят.Если вам нужны интеграционные тесты «белого ящика», которые зависят как от деталей кода, так и от внешних сервисов, запустите их локально или в вашей системе CI, но за пределами Docker.

Минимизируйте различия между «производством» и «разработчиком»».В идеале не должно быть никаких изменений кода, и единственными изменениями конфигурации являются такие вещи, как имена хостов базы данных.

Запускайте полные сквозные тесты, используя настройки на основе Docker.Этот шаг может включать запуск Docker Compose в Jenkins (слегка волосатый).Это тест «черного ящика», который связывается только с пользовательским интерфейсом службы или внешними API.Тесты могут или не могут жить в дереве исходных текстов, но они не встроены в контейнер Docker.Возможно, будет проще запускать такие инструменты, как Selenium, за пределами пространства Docker, судя по количеству вопросов SO по настройке.

...