(Заранее извиняюсь за глупость в этом вопросе. Обычно я программист, а не системный администратор, но я взял на себя задачу автоматизировать некоторые вещи и очистить некоторые другие, которые автоматизированы, но не самым красивым образом . :-)
Я искал различные инструменты для автоматизации развертывания программного обеспечения на нескольких серверах, таких как cfengine, Puppet и Chef. Пока что Puppet выглядит наиболее привлекательно, но я, конечно, еще ни к чему не стремился.
Все эти инструменты выглядят так, будто отлично справляются с необходимостью поддерживать ряд серверов в актуальном состоянии с помощью предварительно упакованного программного обеспечения.
Чего я не понимаю: как использовать инструмент (например, Puppet) для управления развертыванием нашего внутреннего программного обеспечения? Я думаю , что я в растерянности , потому что я видел тысячи учебников , показывающие , как сохранить Apache ensure => latest
(который является довольно прохладно), но ничего , что вполне соответствует моему потребительной случае сегодня, что - то подобное:
- когда человек нажимает кнопку,
- вытащить ветку A из репозитория контроля версий B
- запустить команду C, чтобы скомпилировать ее
- скопировать двоичные файлы D на серверы с E1 по E10
- на каждом сервере выполните команду F, чтобы все изменения вступили в силу
Puppet звучит великолепно, и я полностью вижу преимущество декларативной идемпотентной конфигурации по сравнению с некоторыми сценариями оболочки, но я не видел никаких руководств для «вы хотите обновить свои сценарии оболочки до Puppet (или Chef, или cfengine), так что вот что вы следует сделать". Что-то подобное существует? Разве для других людей очевидно, как взять то, что предусмотрено в документах Puppet, и воспроизвести то поведение, которое я хочу? Я просто не понимаю?
Пока это звучит для меня так, что человек (# 1) вручную упаковывает программное обеспечение (# 2 и # 3), внешнее для Puppet, вручную обновляет конфигурацию Puppet, что запускает Puppet для обновления серверов. .. может быть? (Я немного запутался здесь, как я уверен, вы можете сказать.)
Спасибо!
источник
Ответы:
Мы используем Puppet, но мы не используем его для развертывания наших приложений. Как вы сказали, вы можете упаковать свое программное обеспечение в debs или rpms, настроить свой личный репозиторий везде и использовать puppet для управления версиями, но вы все еще можете ждать следующих 30 минут обновления на всех ваших серверах.
Что бы я сделал (и это близко к тому, что мы делаем, но мы используем рельсы, поэтому нет этапа компиляции):
Шеф-повар может иметь больше возможностей толчка в режиме реального времени; Я не очень знаком с этим.
источник
Шаги с 1 по 3 обычно автоматизируются в процессе сборки. Обычно выходные данные этого процесса проходят цикл тестирования. Я упаковываю вывод, чтобы его можно было развернуть в среде тестирования интеграции. Только в случае прохождения интеграционных испытаний выполняются шаги 4 и 5.
Ваш шаг 5 подразумевает перерыв в развертывании. Для чего-то вроде apache это может быть обработано выключением и перезапуском во время ротации журнала. Сценарий crontab может справиться с этим. Если вы можете обрабатывать непрерывные изменения в течение часа или около того, просто включите перезапуск в шаге 4 развертывания. Puppet или cfengine являются подходящими инструментами для шага 4. Это может быть вызвано обновлением хранилища, когда тесты интеграции пройдут.
источник
Ищите рецепты кукол, и вы найдете тонны готовых сценариев производства. Да, вам придется вручную упаковать программное обеспечение. Если вы поддерживаете свой собственный личный репозиторий, вы можете использовать флаг sure => latest. Затем напишите рецепт, чтобы сообщить куклу об установке программного обеспечения. Рецепт должен быть размещен на главном сервере, откуда он будет распространяться на подчиненных.
источник