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

时间:2015-06-26 06:11:20

标签: jenkins typesafe-activator playframework-2.4 test-environments

如何在Jenkins运行的同一台服务器上本地使用Jenkins自动部署Play Framework(2.4)应用程序?在某些时候,我们将分别建立一个合适的生产环境,并可能以相同的方式实施测试环境,但此时我想查看是否可以设置Jenkins正在运行的同一服务器的简单测试环境。

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

./activator clean
./activator test

使用Play 1我使用了play start& play stop类似的事情。在我的开发环境中尝试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.

所以我用" Execute shell"评估了两个(不完整的)替代品。 &安培;阶段:

舞台&与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 &

- >应用程序似乎已经开始到某种程度,但没有继续运行?

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

3 个答案:

答案 0 :(得分:3)

对于特定情况,我最终使用Docker:

  • 将Docker安装到服务器
  • 根据play-docker-ci
  • 创建了一个Dockerfile
  • 将Jenkins配置为
    • 构建Docker镜像
    • 如果正在运行则停止现有容器,如果存在则删除现有容器
    • 运行Docker镜像

到目前为止看起来效果还不错。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我通过让Team City生成一个startup.sh脚本来设置它,该脚本包含启动Play服务器作为后台进程的命令:

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

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