Aggiornamento: ora mi consiglia di utilizzare artifacts
con una breve expire_in
. Questo è superiore a cache
perché deve scrivere l'artefatto solo una volta per pipeline mentre la cache viene aggiornata dopo ogni lavoro. Anche la cache è per runner, quindi se esegui i tuoi lavori in parallelo su più corridori non è garantito che vengano popolati, a differenza degli artefatti che vengono memorizzati centralmente.
Gitlab CI 8.2 aggiunge runner caching che consente di riutilizzare i file tra costruisce. Tuttavia ho trovato che questo è molto lento.
Invece ho implementato il mio sistema di caching utilizzando un po 'di scripting di shell:
before_script:
# unique hash of required dependencies
- PACKAGE_HASH=($(md5sum package.json))
# path to cache file
- DEPS_CACHE=/tmp/dependencies_${PACKAGE_HASH}.tar.gz
# Check if cache file exists and if not, create it
- if [ -f $DEPS_CACHE ];
then
tar zxf $DEPS_CACHE;
else
npm install --quiet;
tar zcf - ./node_modules > $DEPS_CACHE;
fi
Questo verrà eseguito prima di ogni lavoro nel vostro .gitlab-ci.yml
e installare solo le dipendenze se package.json
è cambiato oppure il file di cache è mancante (ad es. prima corsa o file cancellato manualmente). Si noti che se si dispone di più corridori su server diversi, ognuno avrà il proprio file di cache.
È possibile eliminare regolarmente il file di cache per ottenere le ultime dipendenze. Lo facciamo con la seguente voce di cron:
@daily find /tmp/dependencies_* -mtime +1 -type f -delete
Ho personalizzato la mia immagine di finestra mobile con quello che mi serve. Funziona per te? –