如何使用Jenkins在本地自动部署Play Framework(2.4)应用程序?

如何使用Jenkins在本地自动部署Play Framework(2.4)应用程序?,jenkins,typesafe-activator,playframework-2.4,test-environments,Jenkins,Typesafe Activator,Playframework 2.4,Test Environments,如何在Jenkins运行的同一台服务器上本地自动部署带有Jenkins的Play Framework(2.4)应用程序?在某一点上,我们将单独设置一个适当的生产环境,并可能以相同的方式实现测试环境,但在这一点上,我想检查是否有可能为Jenkins正在运行的同一台服务器设置一个简单的测试环境 我有一个詹金斯的工作运行测试,它似乎工作正常。基本上是“执行shell”运行激活器命令(可以组合成一行) 对于Play 1,我使用了播放开始和播放停止进行类似操作。在我的dev env上尝试activator

如何在Jenkins运行的同一台服务器上本地自动部署带有Jenkins的Play Framework(2.4)应用程序?在某一点上,我们将单独设置一个适当的生产环境,并可能以相同的方式实现测试环境,但在这一点上,我想检查是否有可能为Jenkins正在运行的同一台服务器设置一个简单的测试环境

我有一个詹金斯的工作运行测试,它似乎工作正常。基本上是“执行shell”运行激活器命令(可以组合成一行)

对于Play 1,我使用了
播放开始
播放停止
进行类似操作。在我的dev env上尝试
activator start
,我得到消息:

The start command is deprecated, and will be removed in a future version of Play.
To run Play in production mode, run 'stage' instead, and then execute the generated start script in target/universal/stage/bin.
To test your application using production mode, run 'testProd' instead.
因此,我用“执行shell”和stage评估了两个(不完整的)备选方案:

使用nohup进行阶段和运行:

./activator clean
./activator stage
nohup target/universal/stage/bin/my-app -Dplay.evolutions.db.default.autoApply=true
->应用程序启动正常,但Jenkins任务没有停止

后台播放并运行nohup:

./activator clean
./activator stage
nohup target/universal/stage/bin/my-app -Dplay.evolutions.db.default.autoApply=true &
->应用程序似乎已经开始运行,但并没有继续运行


这里的首选方法是什么(甚至是唯一的工作方式?

Jenkins在构建完成时杀死所有子进程,以避免内存泄漏,因此没有应用程序运行。使用
Playframework 2.4
设置jenkins的最简单方法是使用
sbt
任务和。如果您想从jenkins执行发布,最好的方法是使用jenkins shell构建和安装它-不会终止任何进程。请参阅。

有关我最终使用Docker的特定案例:

  • 已将Docker安装到服务器
  • 根据创建了Dockerfile
  • 让詹金斯
    • 建立码头工人形象
    • 如果正在运行,则停止现有容器;如果存在,则删除现有容器
    • 运行Docker映像

到目前为止,这似乎工作得很好。

我让Team City生成一个startup.sh脚本,其中包含启动播放服务器的命令作为后台进程:

nohup /pathToApp/bin/app_name -Dhttp.port=8180 &

然后下一个构建步骤只是运行这个shell脚本并启动它。nohup&将此作为后台进程运行,当构建服务器断开连接时,它将继续运行。为了清晰起见,我从启动脚本中删除了很多额外的内容,但您可以添加您想要用于应用程序的内容。

谢谢,尽管我最终加入了Docker,但这似乎是一个相关的想法。播放文档也有关于此的信息
nohup /pathToApp/bin/app_name -Dhttp.port=8180 &