ビルドアーティファクトとは?
ビルドアーティファクトとは、pipeline が生成し、保持または受け渡したいと考えるあらゆるファイルのことです - コンパイル済みバイナリ、パッケージ化されたイメージ、カバレッジレポートなど。
CI の job は、隔離された使い捨ての環境で実行されます。job が生成したものは、アーティファクトとして保存されない限り、終了時にすべて消えてしまいます。アーティファクトは、出力が job を越えて生き残り、後続の job、release、あるいは人間のレビュアーに届くための手段です。
何がアーティファクトに当たるか
- build の出力: バイナリ、JAR、Docker イメージ、静的サイトのバンドル。
- レポート: テスト結果、カバレッジ、セキュリティスキャン、ログ。
- 実行後にダウンロード、deploy、または確認したいあらゆるもの。
job 間でのアーティファクトの受け渡し
build の job がアーティファクトをアップロードし、後続のテストまたは deploy の job がそれをダウンロードします。これにより、各 job で build をやり直すのではなく、一度 build して同じ出力を複数の job への fan-out にわたって再利用できます。
小さな例
build の job が name: dist、path: dist/ を指定して upload-artifact を実行します。下流のテストと deploy の job は同じ名前で download-artifact を実行し、build された正確なバイト列を取得します - これにより、同じ出力をテストして出荷することが保証されます。
アーティファクト vs cache
cache は最適化です - 存在しなくても job は動作し、単に遅くなるだけです。アーティファクトは成果物です - 存在しなければ、下流の job は進めません。release 可能な出力を cache に保存してはいけません。
命名とサイズ
アーティファクトには明確で一意な名前を付け(特に matrix のセル間では、そうしないと衝突します)、無駄なく保ちましょう。不要なファイルを数ギガバイトもアップロードすると、依存するすべての job が遅くなり、ストレージコストが膨らみます。
重要なポイント
- アーティファクトとは、pipeline が生成し、job を越えて保持するファイルです。
- アーティファクトは出力を job 間で受け渡すため、一度 build して再利用できます。
- アーティファクトは成果物であり、cache は任意の最適化です。