Playframework 如何将Play Framework应用程序从Jenkins发布到负载平衡环境

Playframework 如何将Play Framework应用程序从Jenkins发布到负载平衡环境,playframework,centos,playframework-2.0,load-balancing,nightly-build,Playframework,Centos,Playframework 2.0,Load Balancing,Nightly Build,我刚刚开始设置防弹的夜间构建环境,以便基于游戏的应用程序。到目前为止,我还没有找到关于这个主题的好教程。你能回顾一下我目前正在设置的解决方案吗?谢谢 将Play Framework安装到Jenkins服务器并创建一个作业,该作业每24小时从git/svn存储库创建一个分发包 play dist 上面的命令创建app-1.0.zip文件。文件被复制并解压缩到多个节点。我们正在使用负载平衡器。最终文件被解压缩到/home/play/webapp/app-1.0文件夹 解压后,我更改symlink/

我刚刚开始设置防弹的夜间构建环境,以便基于游戏的应用程序。到目前为止,我还没有找到关于这个主题的好教程。你能回顾一下我目前正在设置的解决方案吗?谢谢

将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
脚本是对以下脚本的修改:

基本上,该脚本运行以下命令,我在app-xxx.zip文件的开始文件中找到了该命令

exec java $* -cp "`dirname $0`/lib/*" play.core.server.NettyServer `dirname $0`
我还考虑过创建一个重新加载脚本,该脚本验证play应用程序是否正在运行,如果没有,则说明play应用程序已启动,而不是重新启动

/etc/init.d/play reload
致以最良好的祝愿, Markku

我创建了一个用于从Jenkins连续部署播放应用程序的应用程序。脚本的基本功能如下:

  • 轮询Jenkins以检查是否有新版本可用
  • 如果有的话
    • 检查与提交对应的代码
    • 编撰
    • 创建一个包
    • 重新启动播放服务器
  • 否则,请在下次轮询之前延迟睡眠

重启策略目前是基本的,但是您可以修改脚本以非常容易地实现另一个。没有更多的文档,但是可以阅读和注释

我就是你博客上的那个人。在那篇文章中,我建议你应该把所有的游戏罐放在一个位置(/home/Play/libs/current->Play-2.0.4),这样就不需要做播放距离。在我们的例子中,我们使用播放阶段,将我们的文件分别scp到webapps/foo/0.1-SNAPSHOT-20121011/,然后更改当前符号链接

解压后,我更改符号链接/home/play/webapp/app=> /home/play/webapp/app-1.0并重新加载项目。这真的是符号链接吗 需要?我可以在旧文件上解压文件吗

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

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

play reload
从技术上讲,您可以创建一个可运行的JAR,其中包含所有Play和您的依赖项,包括Netty,但这将是一个巨大的文件(只有Play dep是33MB),您无法轻松更改正在使用的Play版本(我在过去两个月内更改了三次),最后,由于不支持此选项,您需要使用比“播放”更多的内容(即)

我也考虑过创建一个重新加载脚本,用于验证播放效果 应用程序正在运行,如果未运行,则启动播放应用程序,而不是 重新启动

/etc/init.d/play reload
这是博客条目中显示的部署脚本:

#!/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

这个脚本的想法是从Jenkins中的ANT脚本使用SSH调用,或者手动调用。/deploy 0.1-SNAPSHOT-20121012

受您的脚本启发,我创建了一个类似的脚本,但没有使用Jenkins,而是在本地编译应用程序。以下是链接: