ビルドステージとは何か?コンパイルとパッケージのフェーズ
ビルドステージとは、テストやデプロイの前に、ソースコードをコンパイル済みバイナリやコンテナイメージなどの実行可能なartifactに変えるパイプラインのフェーズです。
ほとんどのパイプラインはビルドステージで始まります。ここでソースが、実行または出荷できるものになります。コードのコンパイル、assetのバンドル、コンテナイメージのビルドです。その後のすべてがそれに依存するので、ビルドステージは通常最初に来て、その出力(artifact)はtestとdeployのステージへdownstreamに流れます。
ビルドステージで何が起こるか
- ビルドが必要とする依存関係をインストールする。
- ソースコードをコンパイルまたはトランスパイルする。
- assetをバンドルし、出力をパッケージ化する。
- 後のステージのためのartifactを生成する。
なぜ最初に来るか
ビルドされていないものはテストもデプロイもできません。ビルドステージは、testステージが動かし、deployステージが出荷するartifactを生成します。ビルドの失敗は、後のどのステージも実行される前にパイプラインを止めます。
簡単な例
Nodeのビルドステージは npm ci を実行し、次に npm run build を実行して、artifactとしてアップロードされる dist/ フォルダを生成します。testステージは dist/ をダウンロードしてそれに対して実行し、deployステージは同じartifactを出荷します。
一度ビルドし、どこでも使う
良いプラクティスは、ステージごとに再ビルドするのではなく、artifactを一度ビルドしてすべての後のステージで再利用することです。これはtestと本番が全く同じビットを実行することを保証し、繰り返しビルドのコストを節約します。
ビルドステージの速度
ビルドは、依存関係のインストールとコンパイルのために最も遅いステージであることが多いです。依存関係とbuild layerのキャッシュが最大のレバーです。マネージドランナー(Latchkey)はそれらのキャッシュをウォームに保つので、ビルドステージはコールドな状態ではなく準備された状態から始まります。
重要なポイント
- ビルドステージは、testとdeployの前にソースを実行可能なartifactに変えます。
- 後のステージがその出力に依存するので、最初に来ます。
- artifactを一度ビルドし、一貫性と速度のためにdownstreamで再利用します。