【问题标题】:Reusing the result of SBT compilation between Travis or Github Actions jobs在 Travis 或 Github Actions 作业之间重用 SBT 编译的结果
【发布时间】:2021-01-16 15:52:23
【问题描述】:

有谁知道是否有可能有一个使用 SBT(最新 1.4.3 版本)的多阶段 Travis 构建,并且每个阶段都可以重用前一个阶段的编译代码?

我尝试过缓存,但它似乎不起作用(我希望我只是遗漏了一些东西)。 我所拥有的是第一个“编译”阶段,然后是第二个“测试”阶段,其中两个作业并行运行(单元测试和集成测试)。

我想要的是 Compile 编译所有内容(包括测试代码),然后下一个阶段都只从编译离开的地方开始。

我设法组织构建来做到这一点,但是:

  • 在每个步骤中重新完成编译或
  • 通过缓存整个 ./ 来保存编译...但随后它会忽略我推送的每一个新更改(显然)。

我使用的缓存配置来自 sbt 文档:

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

有什么想法吗?

(或者,如果您知道这是 Travis 的问题,并且可以在 Github Actions 中使其正常工作,那也可以

【问题讨论】:

  • 缓存并不意味着存储阶段之间的构建工件。您将需要使用共享存储,例如 S3。见docs.travis-ci.com/user/build-stages/share-files-s3
  • 另外,如果你想要覆盖,你必须重新编译你的代码,以便让覆盖工具添加检测,否则它将无法工作。
  • 有趣。我能问一下为什么它不适用于在阶段之间存储.class 文件吗?对于更大的人工制品,我可以理解,但编译代码的基本原理是什么?

标签: scala caching sbt travis-ci github-actions


【解决方案1】:

有一个新的 Travis 功能(测试版),允许您将一个作业中的文件与构建中的后续作业共享:workspaces

jobs:
  include:
    - stage: warm_cache
      script:
        - echo "foo" > foo.txt
      workspaces:
        create:
          name: ws1
          paths:
            - foo.txt
    - stage: use_cache
      workspaces:
        use: ws1
      script:
        - cat foo.txt || true

此外,SBT 1.4 允许您将构建工件推送到 Maven 服务器并稍后再次获取:https://www.scala-sbt.org/1.x/docs/Remote-Caching.html

【讨论】:

    猜你喜欢
    • 2021-04-10
    • 2020-07-27
    • 2020-01-08
    • 1970-01-01
    • 2021-04-03
    • 2020-01-09
    • 2020-10-08
    • 2020-03-24
    • 2021-05-13
    相关资源
    最近更新 更多