如何从Jenkins发布Play Framework应用程序以加载平衡环境

时间:2012-10-11 06:12:31

标签: playframework centos playframework-2.0 load-balancing nightly-build

我刚刚开始为基于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 个答案:

答案 0 :(得分:1)

我创建了一个python script来从Jenkins连续部署一个播放应用程序。基本上脚本的作用如下:

  • 轮询Jenkins以检查新版本是否可用
  • 如果有的话
    • 查看与提交相对应的代码
    • 编译
    • 创建一个包。
    • 重新启动播放服务器
  • 在再次投票之前,请等待延迟

重启策略目前是基本的,但你可以很容易地修改脚本来实现另一个。没有更多文档,但codeconfiguration file是可读和评论的。

答案 1 :(得分:1)

我是您发布的博客中的人。在那篇文章中,我建议你应该把所有Play游戏放在一个位置(/ home / play / libs / current - > play-2.0.4),所以没有必要做 play dist 。在我们的例子中,我们使用播放阶段,将我们的文件单独scp到webapps / foo / 0.1-SNAPSHOT-20121011 /,然后更改符号链接当前

  

解压后我更改了symlink / home / play / webapp / app =>   /home/play/webapp/app-1.0并重新加载项目。这个符号链接真的吗?   需要?我可以将文件解压缩到旧文件吗?

这就是我喜欢我们的设置,使用符号链接,但这只是因为我想在某种程度上保留以前的版本,特别是如果这些是来自CI。

  

我可以创建一个jar文件并在服务器上运行吗?

从技术上讲,你可以创建一个包含所有Play和你的依赖项(包括Netty)的可运行JAR,但这将是一个巨大的文件(只有Play deps是33MB),你失去了轻松更改正在使用的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从Jenkins的ANT脚本调用,或者手动调用./deploy 0.1-SNAPSHOT-20121012