如何使用 Jenkins 在本地自动部署 Play Framework (2.4) 应用程序?
Posted
技术标签:
【中文标题】如何使用 Jenkins 在本地自动部署 Play Framework (2.4) 应用程序?【英文标题】:How to auto-deploy Play Framework (2.4) application locally with Jenkins? 【发布时间】:2015-06-26 06:11:20 【问题描述】:如何在 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.
所以我用“执行外壳”和阶段评估了两个(不完整的)替代方案:
使用 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 &
-> 应用程序似乎已经启动到某个时间点但没有继续运行?
这里首选(甚至唯一可行的)方式是什么?
【问题讨论】:
【参考方案1】:对于特定情况,我最终使用了 Docker:
已将 Docker 安装到服务器 基于play-docker-ci创建了一个Dockerfile 将 Jenkins 配置为 构建 Docker 镜像 如果正在运行则停止现有容器,如果存在则删除现有容器 运行 Docker 镜像到目前为止,这似乎工作得很好。
【讨论】:
【参考方案2】:Jenkins 会在构建完成时终止其所有子进程以避免内存泄漏,因此没有应用程序正在运行。使用Playframework 2.4
设置jenkins 的最简单方法是使用sbt
任务和sbt plugin。如果您想从 jenkins 执行发布,最好的方法是构建 debian package 并使用 jenkins shell 安装它 - 不会杀死任何进程。见release plugin。
【讨论】:
谢谢,尽管我最终选择了 Docker,但这似乎是相关的想法。 Play 文档在 Production / The Native Packager 上也有这方面的信息【参考方案3】:我通过让 Team City 生成一个 startup.sh 脚本来进行设置,该脚本包含将 Play 服务器作为后台进程启动的命令:
nohup /pathToApp/bin/app_name -Dhttp.port=8180 &
然后下一个构建步骤只是运行这个 shell 脚本并启动它。 nohup 和 & 使它作为后台进程运行,并且当构建服务器断开连接时它会继续运行。为了清楚起见,我从启动脚本中删除了很多额外的内容,但您可以添加您想要用于您的应用程序的 whatever startup parameters。
【讨论】:
以上是关于如何使用 Jenkins 在本地自动部署 Play Framework (2.4) 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Jenkins 将 .Net 应用程序自动部署到本地计算机 IIS