web-dev-qa-db-fra.com

gitlab ci cache aucun fichier correspondant

J'essaye de construire apk avec gitlab runner

Quand je construis apk, je ne veux pas télécharger tous les build pacakage à chaque fois

donc j'essaie de mettre en cache .gradle/caches et .gradle/wrappers

voici mon gitlab-ci.yml

sdk_build_job
  image: myimage:latest
  stage: sdk-build
  script:
    ...
  cache:
    key: gradle-cache
      - /root/.gradle/caches
      - /root/.gradle/wrapper

mais créer gradle-cache toujours faire un avertissement

Creating cache gradle-cache...
WARNING: /root/.gradle/caches: no matching files       
WARNING: /root/.gradle/wrapper: no matching files      
Archive is up to date!                             

Je ne sais pas pourquoi je ne trouve pas le répertoire des caches et du wrapper

Quand je suis dans le conteneur Docker et que je trouve les dossiers, ils étaient bien placés

root@runner-3d9fa57b-project-4-concurrent-0:~/.gradle# pwd
/root/.gradle
root@runner-3d9fa57b-project-4-concurrent-0:~/.gradle# ls -al
total 28
drwxr-xr-x 7 root root 4096 Dec 28 02:21 .
drwx------ 1 root root 4096 Dec 28 02:19 ..
drwxr-xr-x 6 root root 4096 Dec 28 02:20 caches
drwxr-xr-x 3 root root 4096 Dec 28 02:19 daemon
drwxr-xr-x 4 root root 4096 Dec 28 02:19 native
drwxr-xr-x 2 root root 4096 Dec 28 02:21 workers
drwxr-xr-x 3 root root 4096 Dec 28 02:19 wrapper

Aidez-moi, s'il vous plaît.......

9
fuzes

En effet, cache ne fonctionne que pour les fichiers et dossiers À L'INTÉRIEUR de votre projet. Ceci est mal documenté sur le site Web de GitLab à mon humble avis.

Donc:

cache:
  key: gradle-cache
  paths:
    - /root/.gradle/caches
    - /root/.gradle/wrapper

Recherche toujours uniquement dans:

/home/user/yourproject/root/.gradle/caches
/home/user/yourproject/root/.gradle/wrapper

Pour R, je mets R_LIBS_SITE dans un dossier local à l'intérieur de mon projet. Cela m'a permis de réutiliser les packages installés. Ayez n coup d'oeil ici .

17
MS Berends

Je me suis cogné la tête sur le même sujet.

MS Berends a partiellement raison. La mise en cache est censée fonctionner pour les fichiers et dossiers uniquement dans votre répertoire de projet, voir ici: https://gitlab.com/gitlab-org/gitlab-ce/issues/4431

Il devait y avoir une option de montage du dossier de cache en tant que volume comme

[[runners]]
  name = ""
  url = ""
  token = ""
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "Alpine:latest"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache", "/root/.gradle:/root/.gradle"]
    shm_size = 0

Mais cela ne fonctionne pas non plus .

J'ai fini par faire ce qui suit:

  1. Dans mon .gitlab-ci.yaml, j'ai défini GRADLE_USER_HOME pour pointer sur le volume de cache déjà mappé comme

    GRADLE_USER_HOME: "/cache/.gradle"

  2. Ensuite, j'ai passé cette variable home gradle au ./gradlew comme

    ./gradlew $ GRADLE_ARGS_CI -g $ GRADLE_USER_HOME testDebugUnitTest

  3. Notez l'argument nommé $ GRADLE_ARGS_CI. Il est défini sur la valeur suivante

    GRADLE_ARGS_CI: "--no-build-cache --no-daemon --stacktrace"

Le --no-build-cache est nécessaire si vous ne voulez pas réutiliser les sorties de build des builds précédents. Le --no-daemon est une évidence car l'environnement de build docker est généré pour chaque build.

J'ai pu économiser 2,5 minutes sur mon temps de construction avec ces changements.

5
Hamady C.