Как опубликовать приложение Play Framework от Jenkins для балансировки нагрузки
Я только начал настраивать пуленепробиваемую среду ночной сборки для приложения на основе Play. До сих пор я не нашел хорошего учебника по этой теме. Не могли бы вы рассмотреть решение, которое я сейчас настраиваю? Благодарю.
Настройте Play Framework на сервер Jenkins и создайте задание, которое каждые 24 часа создает дистрибутив из репозитория git / svn.
play dist
Выше команда создает файл app-1.0.zip. Файл копируется и распаковывается на несколько узлов. Мы используем балансировщик нагрузки. В конце концов файл распаковывается в папку /home/play/webapp/app-1.0.
После распаковки я изменяю symlink /home/play/webapp/app => /home/play/webapp/app-1.0 и перезагружаю проект. Эта символическая ссылка действительно нужна? Могу ли я просто распаковать файлы поверх старых файлов? Мне действительно нужно распаковать проект? Могу ли я просто создать файл JAR и запустить его на сервере?
play reload
Наконец старое приложение удалено.
rm -rf /home/play/webapp/app-0.9
Версия app-0.9 изначально была запущена с помощью следующего скрипта.
/etc/init.d/play start
Скрипт является модификацией следующего скрипта:
http://monocaffe.blogspot.fr/2012/09/a-play-framework-server-setup.html
В основном скрипт выполняет следующую команду, которую я нашел в файле запуска внутри файла app-xxx.zip.
exec java $* -cp "`dirname $0`/lib/*" play.core.server.NettyServer `dirname $0`
Я также подумал о создании скрипта перезагрузки, который проверяет, запущено ли игровое приложение, в противном случае игровое приложение запущено, а не перезапущено.
/etc/init.d/play reload
С наилучшими пожеланиями, Маркку
2 ответа
Я парень из блога, который вы опубликовали. В этом посте я предлагаю вам иметь все банки Play в одном месте (/home/play/libs/current -> play-2.0.4), так что вам не нужно играть в dist. В нашем случае мы используем play stage, scp наши файлы отдельно в webapps/foo/0.1-SNAPSHOT-20121011/ и затем изменяем ток символьной ссылки.
После распаковки я изменяю symlink /home/play/webapp/app => /home/play/webapp/app-1.0 и перезагружаю проект. Эта символическая ссылка действительно нужна? Могу ли я просто распаковать файлы поверх старых файлов?
Вот как мне нравятся наши настройки, использующие символические ссылки, но это только потому, что я хочу сохранить, до некоторой степени, предыдущие версии, особенно если это те из CI.
Могу ли я просто создать файл JAR и запустить его на сервере?
Технически, вы могли бы создать исполняемый JAR, который содержал бы ВСЕ Play и ваши зависимости, включая Netty, но это был бы огромный файл (только Play deps - 33 МБ), вы теряете возможность легко изменять используемую версию Play (которую я менялись три раза за последние два месяца) и, наконец, вам нужно будет использовать что-то большее, чем Play, поскольку этот параметр не поддерживается (например, http://maven.apache.org/plugins/maven-shade-plugin/examples/executable-jar.html)
Я также подумал о создании скрипта перезагрузки, который проверяет, запущено ли игровое приложение, в противном случае игровое приложение запущено, а не перезапущено.
Это сценарий развертывания, показанный в записи блога:
#!/bin/bash
#
# Script to automate CI deployments. Simply stop all
# servers, change the "current" symlinks to the given
# target folder and finally, start all servers
#
export JAVA_HOME="/usr/lib/jvm/default-java"
play_home="/home/play"
webapps_folder="${play_home}/webapps"
apps=( "foo" "bar" "api" )
for app in ${apps[@]}; do
echo "Stopping server ${app}"
${play_home}/bin/${app} stop
echo "Regenerate current symlink of ${app}"
rm ${webapps_folder}/${app}/current
ln -s ${webapps_folder}/${app}/${1} ${webapps_folder}/${app}/current
echo "Starting server ${app}"
${play_home}/bin/${app} nohup
done
exit 0
Идея этого сценария заключается в том, чтобы вызывать его с помощью SSH из сценария ANT в Jenkins или вручную./deploy 0.1-SNAPSHOT-20121012
Я создал скрипт Python для непрерывного развертывания приложения Jenkins Play. Основное, что делает скрипт, это следующее:
- Опрос Jenkins, чтобы проверить, доступна ли новая сборка
- Если один доступен
- Проверьте код, соответствующий коммиту
- компилировать
- Создать пакет.
- Перезапустите игровой сервер
- Остальное поспите перед опросом в другой раз
Стратегия перезапуска в настоящее время является базовой, но вы можете легко изменить скрипт для реализации другого. Документации больше нет, но код и файл конфигурации доступны для чтения и комментирования.