gitlab ci:sbt 在每个阶段重新编译
Posted
技术标签:
【中文标题】gitlab ci:sbt 在每个阶段重新编译【英文标题】:gitlab ci: sbt recompiles in each stage 【发布时间】:2020-05-09 18:31:38 【问题描述】:我正在尝试使用 sbt 制作我的第一个 gitlab ci 管道。 我正在尝试构建和测试阶段。
问题是,虽然我在构建时编译了项目,但它在运行测试之前在测试阶段再次编译。
有人可以帮助我了解为什么会发生这种情况以及如何解决它吗?
sbt 版本:1.2.7
这是我的 gitlab-ci.yml 文件:
image: docker-registry:5000/sbt-docker:latest
variables:
SBT_OPTS: "-Dsbt.global.base=sbt-cache/sbtboot -Dsbt.boot.directory=sbt-cache/boot -Dsbt.ivy.home=sbt-cache/ivy Dsbt.coursier.home=sbt-cache/coursier -Dsbt.io.jdktimestamps=true"
COURSIER_CACHE: sbt-cache/coursier
stages:
- build
- test
cache:
paths:
- "sbt-cache/ivy/cache"
- "sbt-cache/boot"
- "sbt-cache/sbtboot"
- "sbt-cache/coursier"
build:
stage: build
script:
- sbt -J-Xmx2G clean core/compile core/package
artifacts:
untracked: true
paths:
- "target/"
test:
stage: test
dependencies:
- build
script:
- sbt core/test
allow_failure: true
【问题讨论】:
你尝试过执行什么吗?当它按照您所说的再次编译时,它会退出吗?也许您可以进一步了解您要解决的具体问题。 您的untracked
和 paths
键似乎缩进不正确。这只是一个复制粘贴的问题吗?
@Nelles 我尝试执行,一切正常,但问题是它需要很长时间,因为它在测试阶段再次编译
@cbley 是的,这是复制粘贴问题
当您在第二阶段运行sbt core/test
时,它可能看不到第一阶段的target/
目录,因此它会重新从头开始编译源代码。您需要找到一种方法将此目录传递到下一阶段,使用工件和依赖项。
【参考方案1】:
您需要缓存项目的target/
文件夹。我对 CircleCI 不熟悉,似乎有一个cache:paths
可用的密钥,只要缓存是每个分支,这听起来不错。
【讨论】:
以上是关于gitlab ci:sbt 在每个阶段重新编译的主要内容,如果未能解决你的问题,请参考以下文章
用于 Maven 部署的 Gitlab CI/CD 的适当阶段是啥?