Как опубликовать приложение 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, чтобы проверить, доступна ли новая сборка
  • Если один доступен
    • Проверьте код, соответствующий коммиту
    • компилировать
    • Создать пакет.
    • Перезапустите игровой сервер
  • Остальное поспите перед опросом в другой раз

Стратегия перезапуска в настоящее время является базовой, но вы можете легко изменить скрипт для реализации другого. Документации больше нет, но код и файл конфигурации доступны для чтения и комментирования.

Другие вопросы по тегам