2 git хранилища в одном каталоге (общий Dockerfile) - PullRequest
1 голос
/ 02 апреля 2020

Я нашел несколько подобных вопросов здесь о переполнении стека, но ничего, что точно отвечает на мой вопрос. Самое близкое, что я нашел, это: Два git хранилища в одном каталоге?

Но этот вопрос из '09, который является эпохой с точки зрения DevOps. Итак, пошли.

Я работаю над двумя проектами из одного каталога. Одним из них является шаблон для запуска тестовой среды из Docker контейнеров (назовем его template). Другое - это собственно приложение, которое я разрабатываю в этой среде (назовите его project). Структура каталогов выглядит следующим образом:

.
+--_ app
|  |-- some-file
|  +-- some-file2
+--_ somedir
|  +-- other-files
+--- Dockerfile
+--- docker-compose.yml

template должен включать все файлы, кроме app/*. project необходимо включить все в app/* и Dockerfile. Я не могу поместить Dockerfile в app/, а затем сделать исключение для него в .gitignore, потому что тогда я не смог бы инициализировать проект в app/, используя laravel new или другие инструменты командной строки, потому что они требуется пустой каталог.

Между тем, файл Dockerfile необходимо включить в репозиторий project, поскольку он используется для развертывания проекта и тестирования.

Так что будет лучшим подходом для этой ситуации?

1 Ответ

0 голосов
/ 02 апреля 2020

Я думаю, что понимаю, чего вы пытаетесь достичь - у вас есть некоторые зависимости между приложениями / службами, которые нужно запускать во время работы над приложением. Я подошел к этому немного по-другому, чем 2 git репо в 1 руб. (Какой TBH, я не уверен, как это будет работать).

Позвольте мне объяснить, как я подошел к этому. Я не могу сказать, что то, что я делаю, это лучший подход, но, похоже, он работает довольно хорошо.

Во-первых, у нас есть "Docker .Зависимости" репо, которое имеет все основные зависимости, которые мы используем (или, по крайней мере, локально эквивалентные зависимости, например, IDP, который мы запускаем в работе, не может быть запущен локально, поэтому я просто использую Keycloak локально). Репо 'Docker .Dependencies' имеет структуру каталогов, как показано ниже. Примечание: это будет подмодуль git в моих репозиториях микросервисов:

enter image description here

Подкаталоги содержат файлы Docker везде, где мне нужно что-то добавить в Базовый официальный образ, например, для Logsta sh, мне нужно установить некоторые плагины, скопировать некоторые конфигурации конвейера.

Также есть несколько файлов yml на уровне root. Это все docker -композитные файлы, которые я могу при необходимости объединить в цепочку, т.е.

docker-compose -f database.yml -f security.yml -f logging.yml up --build

Теперь перейдем к моим репозиториям на микросервисах; которые имеют структуру каталогов следующим образом:

enter image description here

Как уже упоминалось, подкаталог 'Docker .Dependencies' на самом деле является подмодулем git .

Я создал несколько вспомогательных сценариев, включая модуль PowerShell (package-scripts.psm1) и сценарий для (повторной) установки модуля (init.ps1), а также некоторые сценарии NPM ( пакет. json), которые вызывают команды PowerShell, так что я очень легко могу делать такие вещи, как:

  • npm run dependencies
  • npm run migrations как при переносе базы данных
  • npm run services для запуска микросервисов в docker
  • et c.

enter image description here

^^ как вы можете видеть в файле packages.json выше, сценарии PowerShell все параматизированы, поэтому я настраиваюсь так, как требуется для конкретного репо микросервиса. Примечание. Эти вспомогательные сценарии могут быть в другом подмодуле git (что я и планирую сделать). Также я выбрал PowerShell вместо bash, потому что некоторые из наших разработчиков используют Windows для своей среды разработки.

В src находится источник исходного кода, а также там есть файлы Docker-файлов микросервиса. Как уже упоминалось, я могу запускать свои микросервисы, используя npm run services, или я могу просто запускать их непосредственно из своей IDE. Требуется немного конфигурации (которая является частью шаблона микросервиса), так как нам нужно все, чтобы «просто работать» для различных настроек компьютера, например, docker рабочий стол на Windows, docker на Linux, docker -машина; запуск микросервиса в контейнере docker и запуск на хост-компьютере ...

Файл Dockerfile микросервиса создается и публикуется в нашем реестре docker в конвейере CI / CD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...