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

8

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

Я искал различные инструменты для автоматизации развертывания программного обеспечения на нескольких серверах, таких как 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 для обновления серверов. .. может быть? (Я немного запутался здесь, как я уверен, вы можете сказать.)

Спасибо!

кругозор
источник
Puppet предназначен для работы с шаблоном «Пакеты, файлы, сервисы». Puppet отлично подойдет для подготовки серверов, но сервер непрерывной сборки, такой как Jenkins, может быть лучшим инструментом для этого варианта использования.
spuder

Ответы:

5

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

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

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

Шеф-повар может иметь больше возможностей толчка в режиме реального времени; Я не очень знаком с этим.

Бен Дженкс
источник
Это конкретное программное обеспечение не использует Ruby. У меня сложилось впечатление, что Puppet довольно агностик, но Capistrano создан, чтобы лучше всего работать с приложениями Rails. Но прошло уже пару лет с тех пор, как я использовал кепку, так что, возможно, она изменилась, и сейчас я проверю это снова.
Кен
1
Capistrano склоняется к Rails, но гибок и может легко использоваться для других языков. Просто прочитайте рецепты развертывания по умолчанию и перезапишите их в своем собственном рецепте. Это просто программирование. Моя компания развертывает десятки PHP-приложений на нескольких серверах через Capistrano, хотя мы используем интерфейс Webistrano, чтобы сделать его более управляемым.
Мартин Химельс
2
С Capistrano все в порядке, но MCollective и RunDeck лучше настроены для интеграции с Puppet.
jgoldschrafe
Вы также можете взглянуть на ткань; это немного похоже на Capistrano, но в Python.
Xiong Chiamiov
1

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

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

BillThor
источник
1

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

Самир
источник