Последняя мили DevOps: полная автоматизация запуска и настройки контейнеров - PullRequest
0 голосов
/ 24 июня 2019

В рамках нашей небольшой организации по разработке мы стараемся максимально автоматизировать развертывание / обновление нескольких служб. Эти сервисы в основном находятся в контейнерах Docker (и в нескольких блоках Vagrant для вещей, которые не могут напрямую работать в Linux, например, для узла сборки macOS).

Текущий статус

Мы полагаемся на файлы Docker и файлы Compose (развернутые с docker stack) для достижения значительной части автоматизации: отдельные виртуальные машины устанавливаются воспроизводимым образом путем создания Dockerfiles, а затем напрямую зависимые службы запускаются вместе через compose. файлы.

Тем не менее, становится очевидным, что заключительные этапы настройки среды и развертывания инфраструктуры не одинаково хорошо формализованы. Чтобы проиллюстрировать это, давайте представим, что наша цель - развернуть два стека (Jenkins и Artifactory) в заданной среде.

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

Ограничения

Этот подход не кажется адекватным по сравнению с элегантным подходом контейнеризации. Некоторые из наших горя:

  • Это очень нерегулярно, мы должны поддерживать несколько специализированных сценариев, которые связаны с интерфейсом контейнера («как контейнер ожидает, что будет предоставлена ​​конфигурация?» «Какие параметры?»), А также структура данных конфигурации («Является ли конфигурация файлом для монтирования в контейнере? Файл .env, который должен быть получен до развертывания стека или внутри одного из контейнеров стека?»)
  • Нарушение принципа СУХОЙ: если мы хотим развернуть подмножество стеков в другой среде или тот же стек с другой конфигурацией, необходимо создать отдельный репозиторий, и он будет перекрываться.
  • Не существует чистого способа первого развертывания в тестовой среде (чтобы проверить, что обновление не нарушает функциональность, тест выполняется автоматически или вручную), кроме поддержки отдельного репозитория A-test, как указано выше.
  • Секреты хранятся в открытом виде в приватном A хранилище.
  • Реализация функций обслуживания означала бы больше специальных сценариев bash: например, резервное копирование всех служб в развертывании будет более или менее означать один дополнительный сценарий на стек.
  • Нет простого мониторинга
  • На самом деле для развертывания по-прежнему требуется несколько шагов вручную (подключение к нужной среде, клонирование репозитория, запуск сценария и проверка статуса его возврата)

Ответы могут принимать несколько форм, с учебными ресурсами, общими советами о том, как решать этот последний шаг с точки зрения разработчика, или рекомендованными инструментами и программным обеспечением, обычно рекомендуемым для этой проблемы.

...