Непрерывная доставка с помощью Grails

Предыстория:

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

Вопросы:

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

person EricD    schedule 31.07.2013    source источник


Ответы (3)


  1. Я не думаю, что кто-то может сказать, является ли Jenkins «правильным» инструментом, но он хорош.
  2. При горячем развертывании на Tomcat его PermGen почти неизбежно будет расти. Перезагрузка - самый простой способ справиться с этим. См. другие вопросы, такие как Что делает горячее развертывание сложной проблемой? для получения дополнительной информации. Информация. Вы можете использовать задачу пост-сборки, чтобы запустить сценарий оболочки на сервере Jenkins, чтобы развернуть войну и перезапустить Tomcat.
person doelleri    schedule 31.07.2013

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

person Heath Malmstrom    schedule 30.06.2015

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

person Cihan Özkan    schedule 27.03.2015