runner cacheとは?クリーンな実行をまたいで作業を再利用する
runner cacheは高価なartifact - 依存関係、ビルド出力、Dockerのレイヤー - をrunnerの外に保存し、新しくエファメラルなマシンがゼロから再構築する代わりにそれらを復元できるようにします。
エファメラルなrunnerはクリーンですがcacheが何もないので、各jobは依存関係を再インストールしゼロから再構築することになります。runner cacheはそれを解決します: 高価な部分を外部ストレージに保持し、新しい各runnerへ復元するのです。
なぜキャッシュが必要か
クリーンなrunnerはjobごとに依存関係のインストールとビルドの完全な税金を払います。大規模なプロジェクトではそれが実際のテスト時間を圧倒しかねません。キャッシュは重く変化の遅い部分を復元し、jobが本当の作業に時間を費やせるようにします。
何がキャッシュされるか
- package managerのダウンロード(npm、pip、Maven、Cargo)。
- コンパイル済みのビルド出力とインクリメンタルビルドの状態。
- 変更されていないステージの再構築を避けるためのDockerイメージのレイヤー。
汚れた状態のないキャッシュ
重要な区別: runner cacheは既知のartifactをクリーンなマシンへ復元し、これは安全です。汚れたrunner全体を再利用するのは安全ではありません。キャッシュはエファメラルなrunnerの正しさを保ちながら速度を与えます。
マネージドrunner上のキャッシュ
マネージドプラットフォームは高速で統合されたキャッシュを提供し、エファメラルなrunnerが依存関係とレイヤーを素早く復元できるようにします。Latchkeyはwarm poolと組み込みのキャッシュを組み合わせ、新しいrunnerが速いrunnerでもあるようにします。
キャッシュキーと無効化
キャッシュは入力を捉える何か - 通常はlockfileやDockerfileのハッシュ - をキーにします。入力が変わればキーが変わりキャッシュは再構築され、変わらなければ復元されます。不適切に選ばれたキーは絶えずミスするかstaleなartifactを提供するかのどちらかなので、キーはキャッシュそのものと同じくらい重要です。
重要なポイント
- runner cacheはdepとビルド出力をrunnerの外に保存します。
- エファメラルなマシンがゼロからの再構築をスキップできるようにします。
- 既知のartifactをクリーンなrunnerへ復元し、正しさを保ちます。
- マネージドなキャッシュは汚れた状態を再利用せずに新しいrunnerを速くします。