Прежде всего, это очень сильно зависит от приложения, которое вы создаете, и от того, какие тесты вы выполняете ... Но вот мое мнение:
Я бы предложил второй вариант.
Когда вы запускаете свои тесты, в идеале вы хотите запускать их в среде, максимально приближенной к рабочей. Если вы планируете использовать изображение в рабочей среде, я бы посоветовал сначала создать его, а затем запустить тесты.
Мне нравится идея пометить встроенное изображение с помощью :COMMIT_HASH
, а затем запустить тесты для этого изображения. Если у вас есть несколько этапов тестирования, это означает, что вы можете повторно использовать одно и то же изображение, так как вы пометили его хешем коммита.
Например, если ваш конвейер похож на Unit -> Integration -> E2E -> Deploy to Staging -> Deploy to Production
, то на всех этапах вы сможете ссылаться на один и тот же тег по хешу коммита и быть уверенным, что то, что вы тестируете, одинаково на всех этапах ,
После завершения тестирования, просто пометьте изображение как :latest
, и вы можете развернуть его в рабочей среде
Если код находится внутри контейнера, в зависимости от типов тестов, которые вы хотите запустить, вы можете создать файл docker-compose.yml для тестов, который затем сможете использовать для запуска любых других необходимых сервисов для тестирования (например, например, макет базы данных и хаб Selenium с узлами браузера)