@HiDiv
fullstack разработчик (php, js, html, css, vuejs)

Стоит ли хранить исходные коды приложения и конфигураций Docker в одном или разных git репозиториях?

Мы ведем разработку приложения на php. Исходные коды находятся в отдельном репо git на собственном gitlab.

До недавнего времени, настройку окружения для разработки, тестирования и прода у заказчика (выкладку релиза) делали вручную. До автоматизации руки не доходили, да и обычно бывали какие-то моменты, которые требовали ручного участия... Потом начали сталкиваться с тем, что на компах у разрабов бывает, что несколько отличается конфигурация ПО и из-за этого (периодически!) происходили какие-то "чудеса" (у одного работает, а у другого нет). Задумались о docker, но как-то не срослось... Прорыв наступил, когда очередной релиз не взлетел на сервере у заказчика из-за разницы в версиях установленных библиотек и ряда других настроек. Причем установить другую библиотеку было никак нельзя... Пришлось срочно переключаться на поставку приложения в виде набора docker-контейнеров.

Это я описал к тому, что наработанного процесса поставки решения на основе docker у нас пока нет... Мы только учимся!

В процессе анализа задачи, мы пришли к выводу, что нам нужны следующие образы:

* Кастомный образ с php (web и cli), который мы собираем с дистрибутивного php-образа путем установки и настройки разных библиотек и расширений. Причем в двух вариантах: с xdebug (для dev) и без (stage, prod). Он собирается достаточно долго, т.ч. решили его собрать заранее и положить в hub (gitlab).
* Итоговый образ php вместе с приложением (на основе кастомного образа) и всем необходимым. Собирается часто, для каждой новой фичи или фикса.
* Различны образы дополнительного ПО (nginx, rabbitmq и т.д.) собираются по мере потребности, например, может потребоваться новая версия для новой фичи, а может и нет.

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

Все это хозяйство (файлы docker) решили тоже хранить в git и, из-за возможной связи версии этих файлов с самим приложением, решили положить все в одно репо. Исходные коды php из корня переложили в каталог src, а остальное "разложили вокруг"...

Собственно так это сейчас и живет, но не всем такая "конфигурация" нравится... Во-первых, из-за массового переноса исходников приложения из корня в подкаталог src одним коммитом, стало неудобно "ходить по истории". Во-вторых, при такой структуре каталогов (периодически) "как-то странно" работает phpstorm, например, для require_once, говорит, что не находит файл. Да и вообще, мне кажется исходники должны быть в своем репо, а инструменты сборки в другом, хотя они и могут быть взаимосвязаны.

Дальше планируем настраивать CI/CD, в том числе автоматический прогон автотестов разных уровней, но вначале хотелось бы окончательно определиться с конфигурацией "сборочной линии"...
  • Вопрос задан
  • 82 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы