gitlab 8.2.1, как использовать кэш.gitlab-ci.в формате YML
Я пытаюсь использовать "кэш".gitlab-ci.yml (http://doc.gitlab.com/ce/ci/yaml/README.html#cache). Моя версия gitlab-8.2.1, а мой Бегун:
$ 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
3 ответов
8.2 поддерживает только кэш для каждого задания, а 8.3 введет кэш "группы", который служит среди заданий в соответствии с комментарий@ayufan в возможности кэширования папок в каталоге сборки (#97).
однако, хотя я не могу быть на 100% уверен, быстро копая исходный код gitlab-ci-muti-runner, Docker executor, похоже, не работает с функциональностью кэша. Поскольку в каждом задании создается и уничтожается целый новый контейнер, кэш.архив тгз будет больше не существует в следующей сборке.
исправления:
приведенное выше описание неверно из-за тестирования в неправильной среде. По умолчанию gitlab-ci-multi-runner создает выделенный контейнер томов данных в качестве хранилища кэша для каждой параллельной сборки. Контейнер кэша монтируется в каталог /cache
в контейнере приложения и в кэше.tgz tarballs помещаются под /cache
по умолчанию. Так что тайники фактически многоразовые среди независимых сборок.
обновления 2015/12/11:
только что узнал, что кэш" group " уже реализован в GitLab-runner@7dc9524f6ef0144b3797fc07c9035f38a8ad0512, возможно, еще не выпущен и документирован. Вы можете включить его с помощью
cache:
paths:
- doc/
group: sharedcache
в результате один кэш tarball помещается под path <namespace>/<repo>/sharedcache/
вместо двух кеш-тарболов, помещаемых отдельно под path <namespace>/<repo>/createcache/
и <namespace>/<repo>/testcache/
.
обновления 2017/12/04:
кэш"group" был заменен на cache:key
. Используйте key
ключ, чтобы сделать общий кэш между заданиями или ссылками git. По умолчанию кэш является общим для всех заданий. Итак, просто напишите следующее, Чтобы сделать работу
cache:
paths:
- doc/
оформить заказ кэш GitLab CI: ключ и GitLab-runner@d34f76f86a7c2fc4d399e9922175bcc614434016 для получения дополнительной информации.
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
Кажется, что невозможно кэшировать локальные файлы контейнера с общими бегунами. Вы должны поместить свои файлы, например, в папку кэша:
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)