我正在尝试使用.gitlab-ci.yml (http://doc.gitlab.com/ce/ci/yaml/README.html#cache)中的“缓存”。我的gitlab版本是8.2.1,我的Runner是:
$ docker exec -it gitlab-runner gitlab-runner -v
gitlab-runner version 0.7.2 (998cf5d)
因此,根据文档,一切都是最新的,但我无法使用缓存;-(。我的所有文件都会被删除。我做错了什么吗?
将创建缓存存档,但不会将其传递给下一个作业。
这是我的.gitlab-ci.yml
$ cat .gitlab-ci.yml
stages:
- createcache
- testcache
createcache:
type: createcache
cache:
untracked: true
paths:
- doc/
script:
- touch doc/cache.txt
testcache:
type: testcache
cache:
untracked: true
paths:
- doc/
script:
- find .
- ls doc/cache.txt
作业'createcache‘的输出
Running on runner-141d90d4-project-2-concurrent-0 via 849d416b5994...
Fetching changes...
HEAD is now at 2ffbadb MUST BE REVERTED
[...]
$ touch doc/cache.txt
[...]
Archiving cache...
INFO[0000] Creating archive cache.tgz ...
INFO[0000] Done!
Build succeeded.
作业'testcache‘的输出
Running on runner-141d90d4-project-2-concurrent-0 via 849d416b5994...
Fetching changes...
Removing doc/cache.txt
[...]
$ ls doc/cache.txt
ls: cannot access doc/cache.txt: No such file or directory
ERROR: Build failed with: exit code 1
我的解决方法
我的变通方法是手动解压/cache目录中的内容...我很确定这不是使用缓存的正确方式...
$ cat .gitlab-ci.yml
stages:
- build
- test
- deploy
image: ubuntu:latest
before_script:
- export CACHE_FILE=`echo ${CI_PROJECT_DIR}/createcache/${CI_BUILD_REF_NAME}/cache.tgz | sed -e "s|/builds|/cache|"`
createcache:
type: build
cache:
untracked: true
paths:
- doc/
script:
- find . | grep -v ".git"
- mkdir -p doc
- touch doc/cache.txt
testcache:
type: test
script:
- env
- find . | grep -v ".git"
- tar xvzf ${CACHE_FILE}
- ls doc/cache.txt
发布于 2016-02-18 18:34:03
https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/327
image: java:openjdk-8-jdk
before_script:
- export GRADLE_USER_HOME=`pwd`/.gradle
cache:
paths:
- .gradle/wrapper
- .gradle/caches
build:
stage: build
script:
- ./gradlew assemble
test:
stage: test
script:
- ./gradlew check
发布于 2017-04-27 19:53:19
使用共享运行器缓存容器本地文件似乎是不可能的。你必须把你的文件放在缓存文件夹中:
before_script:
- export GRADLE_USER_HOME=/cache/.gradle
...
cache:
paths:
- $GRADLE_USER_HOME/caches/
- $GRADLE_USER_HOME/wrapper/
- $GRADLE_USER_HOME/build-cache/
严格来说,不需要将/cache文件夹作为文件放入缓存,因为这是自动发生的,但为了清楚起见,我将其保留下来(当我想要移动gradle缓存时也是如此)
发布于 2019-12-09 20:54:23
我们发现,缓存整个.gradle
-folder会更好。这应该在每个项目中只使用一次。如果k8s用于gitlab-runner,那么您应该关闭该守护进程。
gitlab-ci.yaml
variables:
GRADLE_OPTS: "-Dorg.gradle.daemon=false" # no gradle-daemon on k8s
# ...
buildJar:
stage: build
image: gradle:5.6.4-jdk11
before_script:
- export GRADLE_USER_HOME=`pwd`/.gradle
script:
- gradle assemble
cache:
key: "gradleCache"
paths:
- .gradle
https://stackoverflow.com/questions/33940384
复制相似问题