Назад | Перейти на главную страницу

Развертывать собственное программное обеспечение с помощью Puppet?

(Заранее извиняюсь за глупость в этом вопросе. Обычно я программист, а не системный администратор, но я взял на себя ответственность автоматизировать некоторые вещи и очистить некоторые другие вещи, которые автоматизированы, но не самым красивым способом . :-)

Я искал различные инструменты для автоматизации развертывания программного обеспечения на множестве серверов, таких как cfengine, Puppet и Chef. Пока что Puppet выглядит наиболее привлекательно, но я, конечно, еще ни к чему не обязывался.

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

Я не понимаю: как использовать инструмент (например, Puppet) для управления развертыванием нашего собственного внутреннего программного обеспечения? Я думаю, что я в растерянности, потому что я видел тысячу руководств, показывающих, как сохранить Apache ensure => latest (который является довольно круто), но ничего, что полностью соответствует моему сегодняшнему варианту использования, который больше похож на:

  1. когда человек нажимает кнопку,
  2. вытащить ветку A из репозитория управления версиями B
  3. запустите команду C, чтобы скомпилировать ее
  4. скопируйте двоичные файлы D на серверы с E1 по E10
  5. на каждом сервере запустите команду F, чтобы все изменения вступили в силу

Puppet звучит великолепно, и я полностью вижу преимущество декларативной идемпотентной конфигурации по сравнению с некоторыми сценариями оболочки, но я не видел никаких руководств по теме "вы хотите обновить сценарии оболочки до Puppet (или Chef, или cfengine), так что вот что вы стоит сделать". Что-то подобное существует? Очевидно ли для других, как использовать то, что указано в документации Puppet, и воспроизвести то поведение, которое я хочу? Я просто не понимаю?

На данный момент мне кажется, что человек (№1) вручную упакует программное обеспечение (№2 и №3), внешнее по отношению к Puppet, вручную обновит конфигурацию Puppet, что заставит Puppet обновить серверы. .. может быть? (Я здесь немного запутался, и я уверен, что вы понимаете.)

Спасибо!

Мы используем марионетку, но не используем ее для развертывания наших приложений. Как вы сказали, вы можете упаковать свое программное обеспечение в debs или rpms, настроить свой частный репозиторий повсюду и использовать марионетку для управления версиями, но вы по-прежнему можете ждать следующего 30-минутного обновления на всех своих серверах.

Что бы я сделал (и это близко к тому, что мы делаем, но мы используем рельсы, поэтому этап компиляции отсутствует):

  • Используйте марионетку для настройки всего на сервере, кроме самого приложения. Зависимости, веб-серверы, пользователи, пути и т. Д.
  • Попросите ваш сервер автоматической сборки (bamboo, hudson, круиз-контроль и т. Д.) Поместить скомпилированные артефакты в диспетчер репозитория, такой как Nexus.
  • Используйте capistrano, чтобы отправить сборку на свои серверы.

У Chef может быть больше возможностей push-уведомлений в реальном времени; Я не очень с этим знаком.

Поищите рецепты кукол, и вы найдете множество готовых сценариев. Да, вам придется вручную упаковать программное обеспечение. Если вы поддерживаете свой личный репозиторий, вы можете использовать флаг sure => latest. Затем напишите рецепт, по которому марионетка должна установить программное обеспечение. Рецепт необходимо разместить на главном сервере, откуда он будет распространен на подчиненные.

Шаги с 1 по 3 обычно автоматизируются в процессе сборки. Обычно результат этого процесса проходит через цикл тестирования. Я упаковываю выходные данные, чтобы их можно было развернуть в среде тестирования интеграции. Шаги 4 и 5 должны выполняться только в случае успешного прохождения интеграционных тестов.

Ваш шаг 5 подразумевает сбой при развертывании. Для чего-то вроде apache это можно решить путем выключения и перезапуска во время ротации журнала. С этим может справиться сценарий crontab. Если вы можете обрабатывать последовательные изменения в течение часа или около того, просто включите перезапуск в шаге 4 развертывания. Puppet или cfengine - подходящие инструменты для шага 4. Это можно запустить, обновив репозиторий после прохождения интеграционных тестов.