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.......
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 .
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:
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"
Ensuite, j'ai passé cette variable home gradle au ./gradlew comme
./gradlew $ GRADLE_ARGS_CI -g $ GRADLE_USER_HOME testDebugUnitTest
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.