如何在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 &
- >应用程序似乎已经开始到某种程度,但没有继续运行?
这里有什么首选(甚至是唯一的工作方式)?
答案 0 :(得分:3)
对于特定情况,我最终使用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。