gitlab 8.2.1, comment utiliser cache in.gitlab-ci.yml

j'essaie d'utiliser' cache'.gitlab-ci.yml (http://doc.gitlab.com/ce/ci/yaml/README.html#cache). Mon gitlab version 8.2.1 et mon Coureur est:

$ docker exec -it gitlab-runner gitlab-runner -v 
gitlab-runner version 0.7.2 (998cf5d)

donc selon le doc, tout est à jour, mais je ne peux pas utiliser le cache ; - (. Tous mes fichiers sont toujours supprimés. Suis-je en train de faire quelque chose de mal?

une archive cache est créée, mais n'est pas transmise aux travaux suivants.

Voici mon .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

sortie du travail '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.

Sortie de l'emploi "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

Ma solution

ma solution consiste à désactiver manuellement ce qui se trouve dans le répertoire /cache ... Je suis presque sûr que ce n'est pas la bonne façon d'utiliser le 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
20
demandé sur Nathan 2015-11-26 16:50:07

3 réponses

8.2 ne supporte que le cache par tâche, et 8.3 introduira le cache "group" qui sert parmi les tâches selon le commentaire de@ayufan dans la possibilité de mettre en cache des dossiers dans le répertoire de compilation (#97).

cependant, bien que je ne puisse pas être sûr à 100%, en fouillant rapidement le code source de gitlab-ci-muti-runner, l'exécuteur de docker ne semble pas fonctionner avec la fonctionnalité de cache. Depuis qu'un nouveau conteneur entier est créé et détruit dans chaque travail, le cache.les archives tgz n'existent plus dans la prochaine génération.

Errata:

La description ci-dessus est incorrect grâce à des essais à un problème de configuration de l'environnement. Par défaut, gitlab-ci-multi-runner crée un conteneur de volume de données dédié comme un stockage de cache pour chaque construction concurrente. Le conteneur cache est monté dans le répertoire /cache dans le conteneur d'application et dans le cache.tgz les archives sont placées sous /cache par défaut. Donc les caches sont réellement réutilisable parmi les constructions indépendantes.

mises à jour 2015/12/11:

vient de découvrir que le cache "group" a déjà été implémenté dans gitlab-coureur@7dc9524f6ef0144b3797fc07c9035f38a8ad0512, peut-être pas encore sorti et documenté. Vous pouvez l'activer avec

cache:
  paths:
    - doc/
  group: sharedcache

le résultat est un cache tarball placé sous le chemin <namespace>/<repo>/sharedcache/ au lieu de placer deux balles de cache séparément sous le chemin <namespace>/<repo>/createcache/ et <namespace>/<repo>/testcache/.

mises à jour 2017/12/04:

le cache"group" a été remplacé par cache:key. Utilisez le key touche pour faire partager le cache entre les tâches ou les références git. Par défaut, un cache est partagé entre toutes les tâches. Donc, il suffit d'écrire ce qui suit ferait le travail

cache:
  paths:
    - doc/

Caisse GitLab CI cache: key et gitlab-coureur@d34f76f86a7c2fc4d399e9922175bcc614434016 pour plus d'informations.

10
répondu Lance Chen 2017-12-04 10:07:58

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
16
répondu wcc526 2016-04-13 15:32:37

il semble qu'il ne soit pas possible de mettre en cache des fichiers de conteneurs locaux avec des coureurs partagés. Vous devez mettre vos fichiers par exemple dans le dossier cache:

before_script:
  - export GRADLE_USER_HOME=/cache/.gradle

...

cache:
  paths:
    - $GRADLE_USER_HOME/caches/
    - $GRADLE_USER_HOME/wrapper/
    - $GRADLE_USER_HOME/build-cache/

à strictement parler, il n'est pas nécessaire de mettre le dossier /cache en tant que fichiers de cache, car cela se produit automatiquement, mais je le laisse pour plus de clarté (aussi quand je veux déplacer le cache gradle)

4
répondu for3st 2017-04-27 11:53:18