Я смотрел этот вопрос, надеясь, что кто-то придумает умный ответ. Так как они этого не сделали, думаю, я присоединюсь к своим собственным чувствам по этому поводу.
Насколько мне известно, не существует инструмента для автоматизации таких типов развертывания, и я предполагаю, что это связано с тем, что существует так много разных сценариев, с которыми нужно иметь дело. Как минимум, у вас есть:
- Один сервер разработки, где нужно просто скопировать WAR на место, а затем перезапустить сервер приложений.
- Один рабочий сервер, где процесс аналогичен, но вы не хотите, чтобы процесс мешал вашим пользователям. Здесь следует учитывать сохранение данных сеанса при перезапусках и планирование перезапуска на время с низким уровнем использования.
- Небольшой кластер, в котором у вас есть балансировщик нагрузки на многих узлах. Теперь все действительно усложняется. Вы можете использовать различные инструменты LB (HA Proxy, NGINX, Amazon Elastic LB), и если вы заботитесь о своих пользователях, вам необходимо координировать циклический перезапуск серверов приложений. Перенос любых данных сеанса между узлами также вызывает беспокойство.
- У вас есть большой кластер, состоящий из более мелких кластеров в разных географических регионах. Здесь вы имеете дело с # 3 + любая конфигурация, которую необходимо выполнить для координации между регионами.
Я полагаю, что 1 и 2 было бы проще всего найти общий инструмент, и если бы это были единственные ситуации, с которыми мне нужно было иметь дело, я бы, вероятно, просто развернул Jenkins вместе с приложением. Его можно довольно легко настроить на извлечение из ветки git при возникновении изменений, сборку кода и перезапуск Jetty. Однако к тому времени, когда вы доберетесь до 3 и 4, я думаю, что количество различных задействованных инструментов и необходимость их координации исключают любое стандартное решение. Я не думаю, что это просто проблема в мире Java/Scala, так как я видел отзывы от людей Github о пользовательских инструментах, которые они создали для управления развертывание своего приложения Rails.
Что касается Puppet, с оговоркой, что я никогда не использовал его, похоже, что он может быть полезным инструментом для такого типа процесса. Вам понадобится какой-то центральный координатор для работы с кластером, и я считаю, что Puppet может помочь с этим.
person
Dave Whittaker
schedule
19.03.2013