Skip to content
Latchkey

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を要します - バランスを取りましょう。

関連ガイド