2013-07-31 2 views
2

фона:Continuous Delivery с Grails

Моя команда использует Дженкинс, чтобы запустить нашу непрерывную интеграцию (CI) для наших Grails приложений. Мы пытаемся приблизиться к Continuous Delivery, настроив конвейер развертывания и используя развертывание кнопок в нескольких средах (Dev, Itg, Prod). Мы попытались использовать плагин Jenkins Tomcat для развертывания нашего кода, но у вас возникли проблемы с PermGen на Tomcat и вам придется вручную перезапустить его после развертывания.

Вопросы:

  1. Является ли Дженкинс правильный инструмент, чтобы использовать для автоматического развертывания с Grails?
  2. Как мы можем автоматизировать развертывание в Tomcat без необходимости вручную перезапускать его послесловие?

ответ

2
  1. Я не думаю, что кто-нибудь может сказать, если Дженкинс «правильный» инструмент, но это хороший один.
  2. Когда вы подключаетесь к Tomcat, его PermGen будет почти неизбежно расти. Перезапуск - это самый простой способ справиться с этим. Другие вопросы, такие как What makes hot deployment a "hard problem"? для получения дополнительной информации. Вы можете использовать Post Build Task для запуска сценария оболочки на сервере Jenkins для развертывания войны и перезапуска Tomcat.
0

С моей точки зрения (по общему признанию, предубежденный) Дженкинс не предназначен для развертывания. Он не настроен таким образом. В той степени, в которой ножницы не предназначены для очистки апельсинов, Дженкинс не является подходящим инструментом для развертывания. Но это сделает работу независимо.

1

Мы используем балансиры grails, tomcat и эластичной нагрузки и запускаем/запуска/развертывания экземпляров экземпляров через инфраструктуру AWS. Ведро S3 содержит наш военный файл, который размещается там нашим сервером Jenkins в составе плагина, который мы настроили. Это версия с номером сборки и именем задания Jenkins, поэтому у нас есть один для каждой среды. Скрипт шеф-повара тянет наши зависимости и войну в экземпляр и делает всю реальную работу, в то время как наши Jenkins запускали скрипт оркестровки, и он спал на каждом этапе успеха, пока новые экземпляры не полностью встали и не прошли проверку работоспособности балансировки нагрузки, после чего мы остановимся старые экземпляры (балансиры нагрузки сливаются в новые). Если что-то не удастся или время истекает, мы не выполняем работу Jenkins после закрытия новых экземпляров. Чтобы следовать этому подходу, у нас нет общего состояния в нашем приложении, и мы используем memcached (эластик) в качестве нашего магазина сеансов благодаря интеграции безопасности весны Grails.