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)