Azure Pipelines で、Job は依存関係を設定しない場合は並列で動作します。
同じ処理だけどパラメーターだけ異なるような Job を複数構成したい場合、matrix を使うことでいい感じに YAML を書くことができます。
今回は、その matrix を構成を動的にセットする方法のメモです。
基本的な書き方
基本的な書き方はこんな感じ。これで 6行目からの job_a
完了後、13行目からの job_b
で matrix を使っています。18行目から27行目で構成されている変数のセットを使って3つの Job が並列で動作します。
動作させるとこんな感じで job_b
は3つが動作します。
先述のコードの18~27行目の matrix の定義は以下のように1行で書くことも書けます。
matrix: { proj1: { PramA: proj1-val-A, PramB: proj1-val-B }, proj2: { PramA: proj2-val-A, PramB: proj2-val-B }, proj3: { PramA: proj3-val-A, PramB: proj3-val-B } }
動的に値をセットする
これを動的にセットする場合は、先述で紹介した一行で書く感じで変数を渡せばいいんですが、ダブルクォーテーション付きの値を渡す必要があります。
以下の例は11行目で matrix にセットしたい値を普通に書いちゃってますが、この部分はやりたいようにスクリプトとかで動的に構成すればいいって話です。動的に出力された結果がここにあるように JSON で出力されるようにすれば動作するサンプルになります。
あとは12行目で変数としてセットして、その値を20行目で取得しています。matrix にセットする際に変数は Runtime expressions ($[xxx]
って書き方)で構成する必要があるのもポイントです。 template expression とかだとエラーになります。
参考
- jobs.job.strategy の定義 - Azure Pipelines | Microsoft Learn
- 変数の定義 - Azure Pipelines | Microsoft Learn
- 並列ジョブの構成と支払い | Microsoft Learn
自分用メモ:
- pipeline-sandbox > matrix-sandbox repo