Build Matrixとは?
build matrixは、出荷したいプラットフォーム、バージョン、設定の各組み合わせごとに別々のbuildを生成します。
ソフトウェアが多くのターゲット - 複数のOS、アーキテクチャ、runtimeバージョン - で動作する必要がある場合、ターゲットごとにbuildが必要です。build matrixはターゲットの次元を一度宣言するだけで、CIがすべての組み合わせに対してbuild jobを生成します。
build matrixとtest matrix
test matrixは組み合わせをまたいで動作を検証し、build matrixはそれぞれに対して出荷可能なartifactを生成します。両者は同じmatrixの仕組みを使いますが、build matrixは通常、releaseのためにセルごとに1つのartifactをuploadします。
小さな例
os: [linux, macos, windows] と arch: [x64, arm64] のmatrixは6つのbuildを生成し、それぞれがプラットフォーム固有のバイナリを生成します。それを app-linux-arm64、app-macos-x64 などとして公開します。
セルごとのartifactの命名
各セルは、そのmatrixの値から導出した一意の名前でuploadする必要があります。そうしないと、2番目のuploadが最初のものを上書きします。OSとarchをartifact名にエンコードすることで、各ターゲットの出力を区別できます。
管理しやすく保つ
excludeで不可能または不要なセルを除外します。- ターゲットごとにcacheし、各セルが依然としてインクリメンタルbuildの恩恵を受けられるようにします。
- 次元を実際に出荷するターゲットに限定します。
クロスコンパイルという代替案
ネイティブrunnerのmatrixの代わりに、1つのrunnerからすべてのターゲットをクロスコンパイルできる場合があります。これはmatrixの幅を、より複雑なツールチェーンと引き換えにします - あるプラットフォームのネイティブrunnerが希少または遅い場合に有用です。
重要なポイント
- build matrixはターゲットの組み合わせごとに1つのartifactを生成します。
- test matrixと同じ仕組みを使いますが、出荷可能なものを出力します。
- uploadが互いを上書きしないよう、セルごとにartifactに一意の名前を付けます。