oficial - gitlab runner registry
gitlab 8.2.1, cómo usar el caché en.gitlab-ci.yml (3)
8.2 solo es compatible con la memoria caché por trabajo, y 8.3 introducirá la memoria caché de "grupo" que sirve entre las tareas de acuerdo con el comentario de @ayufan en Posibilidad de almacenar en caché las carpetas en el directorio de compilación (# 97) .
Sin embargo, aunque no puedo estar 100% seguro, al excavar rápidamente el código fuente de gitlab-ci-muti-runner, el ejecutor de docker no parece funcionar con la funcionalidad de caché. Dado que se crea y destruye un contenedor completamente nuevo en cada trabajo, el archivo cache.tgz ya no existirá en la siguiente compilación.
Errata
La descripción anterior es incorrecta debido a las pruebas realizadas en un entorno mal configurado. De forma predeterminada, gitlab-ci-multi-runner crea un contenedor de volumen de datos dedicado como almacenamiento de caché para cada compilación concurrente. El contenedor de caché se monta en el directorio /cache
en el contenedor de la aplicación y esos archivos de memoria cache.tgz se colocan en /cache
de forma predeterminada. Así que los cachés son realmente reutilizables entre construcciones independientes.
Actualizaciones 2015/12/11:
Acabo de descubrir que el caché de "grupo" ya se ha implementado en gitlab-runner@7dc9524f6ef0144b3797fc07c9035f38a8ad0512 , tal vez aún no se haya publicado ni documentado. Puedes habilitarlo con
cache:
paths:
- doc/
group: sharedcache
El resultado es un tarball de caché colocado en la ruta <namespace>/<repo>/sharedcache/
lugar de dos tarballs de caché que se colocan por separado bajo la ruta <namespace>/<repo>/createcache/
y <namespace>/<repo>/testcache/
.
Actualizaciones 2017/12/04:
"grupo" caché ha sido reemplazado por cache:key
. Use la key
clave para hacer que la caché se comparta entre trabajos o referencias de git. De forma predeterminada, un caché se comparte entre todos los trabajos. Entonces, simplemente escribe lo siguiente haría el trabajo
cache:
paths:
- doc/
Para obtener más información, gitlab-runner@d34f76f86a7c2fc4d399e9922175bcc614434016 caché de GitLab CI: clave y gitlab-runner@d34f76f86a7c2fc4d399e9922175bcc614434016 .
Estoy tratando de usar ''caché'' en .gitlab-ci.yml ( http://doc.gitlab.com/ce/ci/yaml/README.html#cache ). Mi versión de gitlab es 8.2.1 y mi Runner es:
$ docker exec -it gitlab-runner gitlab-runner -v
gitlab-runner version 0.7.2 (998cf5d)
Entonces, según el documento, todo está actualizado, pero no puedo usar el caché ;-(. Todos mis archivos siempre se eliminan. ¿Estoy haciendo algo mal?
Se crea un archivo de caché, pero no se pasa a los siguientes trabajos.
Aquí está mi .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
Salida del trabajo ''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.
Salida del trabajo ''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
Mi solución
Mi solución es untar manualmente lo que está en el directorio / cache ... Estoy bastante seguro de que no es la forma correcta de usar 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
Parece que no es posible almacenar en caché los archivos locales con los corredores compartidos. Tienes que poner tus archivos, por ejemplo, en la carpeta de caché:
before_script:
- export GRADLE_USER_HOME=/cache/.gradle
...
cache:
paths:
- $GRADLE_USER_HOME/caches/
- $GRADLE_USER_HOME/wrapper/
- $GRADLE_USER_HOME/build-cache/
Estrictamente, no es necesario poner la carpeta / cache como archivos en caché, porque esto sucede automáticamente, pero lo dejo en claro (también cuando quiero mover el caché de gradle)
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