背景

我正在使用Jenkins来编译,测试,打包和部署我的Play Framework应用程序 .

玩Frameowrk版本:2.3.8(但2.2.3相同)

基本上有三个工作:测试,打包和部署 .

  • 在每个git提交上执行测试,编译代码并使用sbt命令运行测试"clean test" . 如果成功..

  • 包作业检出上面的提交,使用sbt命令"clean dist"将应用程序编译并打包成zip . 如果成功..

  • 部署作业将zip复制到目标实例,解压缩并启动应用程序 .

实际上有更多的第2步工作(如代码覆盖,检查式,...)

问题

问题是,进程变慢(110个Java文件/ 70个Scala(模板)文件),因此没有我希望的那样有用 . 整个过程的构建时间约为15分钟 .

我尝试过的事情

我发现,编译时间占用了大部分构建时间,并作为每个构建步骤的一部分执行 .

为了解决这个问题,我添加了一个新工作,它只是编译项目,将整个jenkins工作原理保存为工件并将其复制到其他工作 . 但是sbt继续在其他构建作业中重新编译整个项目 .

我知道sbt使用了一些缓存文件夹,我使用以下sbt命令行选项更改了这些文件夹:

-Dsbt.log.noformat=true -Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy -Dsbt.global.staging=project/.staging

但是仍然会重新编译整个事情 .

问题:

  • 如何汇总每个工作的编译阶段?

  • 还有其他缓存选项吗?

  • 也许将已编译的源打包成* .jar或simliar?

  • 任何其他改善构建时间的想法?

谢谢!

PS:当然,我在复制已编译的工作区时从sbt中删除了clean命令