CI runner image(またはAMI)とは何か?
runner imageはrunnerが起動するためのビルド済みテンプレートです - OSに加えて、厳選されたツールやSDKがすでにインストールされており、jobが毎回それらをゼロからインストールする必要がありません。
image、AMI(AWS上)、VMテンプレートのいずれと呼ばれても、考え方は同じです。作業準備の整ったマシンのsnapshotです。そのimageの中身が、CIがどれだけ速く、どれだけ一貫しているかを大きく左右します。
imageに含まれるもの
runner imageには、オペレーティングシステム、一般的な言語ランタイムとSDK、buildツール、そしてrunnerエージェント自体が焼き込まれます。runnerが起動すると、このimageをブートしてすぐにjobを拾える状態になり - 実行ごとにベースのtoolchainを長々とプロビジョニングする必要がありません。
事前に焼き込むことが重要な理由
- 速度: ツールが起動時に存在するため、jobはベースツールのインストールを省けます。
- 一貫性: すべてのrunnerが同一の既知のベースラインから始まります。
- 再現性: imageのバージョンを固定することで、すべてのjobのtoolchainが固定されます。
AMIについて具体的に
AWSでは、imageはAMI(Amazon Machine Image)です - EC2インスタンスが起動元とするディスクテンプレートです。self-hostedまたはマネージドのrunnerフリートは通常、jobが必要とするツールをちょうど揃えたカスタムAMIをビルドし、各インスタンスが起動時にすべてをインストールするのではなく、事前ロード済みで立ち上がるようにします。
トレードオフ
リッチなimageはより多くのjobに対して準備が整った状態で起動しますが、サイズが大きく、焼き込んだツールが変わるたびにrebuildして再公開しなければなりません。より無駄のないimageは小さくて保守しやすいものの、jobに実行時のインストールをより多く強いります。バランスは、ほとんどのjobが必要とするものを含めつつ、まれで重いツールはjobごとのインストールやcacheに委ねることです。
重要なポイント
- runner imageはrunnerが起動するためのビルド済みテンプレートです。
- AWSではそのテンプレートは、EC2インスタンスが起動元とするAMIです。
- ツールを事前に焼き込むことで、速度、一貫性、再現性が得られます。
- リッチなimageは起動時に準備が整いますが、サイズとrebuildのchurnを要します - バランスを取りましょう。