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