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/
我在 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/