我有以下GitLab yml文件,并且假设每个阶段都将保留依赖项,所以我已分阶段编写了该文件,但事实并非如此!
# This file is a template, and might need editing before it works on your project.
# Official Java image. Look for the different tagged releases at
# https://hub.docker.com/r/library/java/tags/ . A Java image is not required
# but an image with a JVM speeds up the build a bit.
image: java:8
variables:
FILE_TARGET_PATH: $FILE_TARGET_PATH
stages:
- test
- run
cache:
key: "$CI_BUILD_REF_NAME" # contains either the branch or the tag, so it's caching per branch
untracked: true
paths:
- "sbt-cache/.ivy.cache"
- "sbt-cache/.boot"
- "sbt-cache/.sbtboot"
- "sbt-cache/target"
before_script:
# Enable the usage of sources over https
- apt-get update -yqq
- apt-get install apt-transport-https -yqq
# Add keyserver for SBT
- echo "deb http://dl.bintray.com/sbt/debian /" | tee -a /etc/apt/sources.list.d/sbt.list
- apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823
# Install SBT
- apt-get update -yqq
- apt-get install sbt -yqq
Run unit Tests:
stage: test
tags:
- master
script:
# Execute your project's tests
- sbt -Denv=test clean test
Run Pipeline:
stage: run
tags:
- master
script:
# Execute the pipeline
- sbt -Denv=test run
如何在此多阶段设置中缓存依赖项?我的机器上有一个运行管道的本地运行程序。文物可以帮助我吗?
答案 0 :(得分:0)
如果您使用的SBT版本高于1.0.4,则缓存将对您不起作用,因为编译器将始终使所有文件无效。 此编译器问题已在此处报告:https://github.com/sbt/sbt/issues/4168
我的建议是将CI的sbt版本降级到1.0.4。如果这样做没有帮助,您还可以通过添加到build.sbt
中来检查导致缓存无效的原因:
// Debug incremental zinc compiler
logLevel := Level.Debug
incOptions := incOptions.value.withApiDebug(true).withRelationsDebug(true)
我在Bitbucket Pipelines CI上遇到了同样的问题,并设法使其here成功地工作了