Travis CI Scala Play 应用程序构建和部署优化

Travis CI Scala Play Application Build & Deployment Optimization

我在 GitHub 上有一个项目,我正在使用 Travis CI 做 CI & CD。它是一个使用 sbt 构建的 Scala 应用程序,并使用 Play 框架作为 Web 应用程序运行。我已经编写了构建管道,以便在构建阶段执行以下操作:

jobs:
  include:
  - stage: test
    script: sbt clean coverage test coverageReport
  - stage: assemble-jar
    script: sbt "set test in assembly := {}" assembly
    if: branch = master
  - stage: push-docker 
    script: bash docker_push.sh 
    if: branch = master  

我现在面临的问题是,在测试阶段,它被格式化和编译一次,在组装期间也是如此,在 push-docker 阶段再次格式化和编译。考虑到 Scala 编译器的速度有多慢,这很烦人。有什么方法可以优化它,使其不会在每个阶段都被编译吗?我确实了解了缓存并且在我的 yml 中也有以下内容:

cache:
  directories:
  - "$HOME/.ivy2/cache"
  - "$HOME/.sbt"

但不幸的是,这并没有帮助,因为它只缓存依赖项,而不缓存前一个构建阶段的结果。我可以做些什么让它变得更好?

首先,您不能真正重复使用测试阶段编译的 class 文件,因为这些文件嵌入了 scoverage 工具,这使得它们在 运行 时依赖于 scoverage。当您尝试 运行 没有它时它会崩溃。

其次,如果您想在 assemble-jar 和 push-docker 阶段之间共享构建文件,您可以使用 S3 来实现:https://docs.travis-ci.com/user/build-stages/share-files-s3/