更新artifacts
:ショート での使用をお勧めしexpire_in
ます。cache
これは、ジョブごとにキャッシュが更新されるのに対し、パイプラインごとに 1 回だけアーティファクトを書き込む必要があるため、優れています。また、キャッシュはランナーごとであるため、ジョブを複数のランナーで並行して実行すると、集中的に保存されるアーティファクトとは異なり、データが読み込まれることが保証されません。
Gitlab CI 8.2 では、ビルド間でファイルを再利用できるランナー キャッシュが追加されています。ただし、これは非常に遅いことがわかりました。
代わりに、ちょっとしたシェル スクリプトを使用して独自のキャッシュ システムを実装しました。
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
これは、すべてのジョブの前に実行され、依存関係が変更された場合、またはキャッシュ ファイルが見つからない場合 (たとえば、最初の実行、またはファイルが手動で削除された場合) に.gitlab-ci.yml
のみ依存関係がインストールされます。package.json
異なるサーバーに複数のランナーがある場合、それぞれに独自のキャッシュ ファイルがあることに注意してください。
最新の依存関係を取得するために、キャッシュ ファイルを定期的にクリアすることをお勧めします。これは、次の cron エントリで行います。
@daily find /tmp/dependencies_* -mtime +1 -type f -delete