Azure pipelineのyamlでelse-ifが使えるようになっていた件 #Azureリレー
はじめに
久々にAzure DevOpsのアップデートを眺めていると、パイプラインyamlで使う式関連でアップデートがあったようなので調べてみました。
パイプラインyamlの式(expression)でElse ifやElseが書けるようになっていました
New YAML conditional expressions
2021年9月のAzure DevOpsのアップデートで追加された式の表現で、if-elseif-elseの式の形で書けるようになりました。
これまではvariable等で使用する変数の値を条件で出し分けたいとき、if式を使うと出し分けが可能だったのですが、これだと例えば以下のようなyamlのパイプラインがあった時、
trigger:
- none
pr:
- none
pool:
vmImage: ubuntu-latest
parameters:
- name: "param1"
type: string
displayName: "param1"
jobs:
- job:
displayName: test
variables:
${{ if eq(parameters.param1, 'a') }}:
val: a is setted
${{ if eq(parameters.param1, 'b') }}:
val: b is setted
steps:
- script: |
echo message: $(val)
displayName: 'test'
param1にaかb以外のパラメータが入っていた場合は$val の変数にパラメータが入らなくなってしまいます。
今回の更新でここに else if
式や else
式を追加することができるようになったので、今なら例えば以下のように書くことができます。
trigger:
- none
pr:
- none
pool:
vmImage: ubuntu-latest
parameters:
- name: "param1"
type: string
displayName: "param1"
jobs:
- job:
displayName: test
variables:
${{ if eq(parameters.param1, 'a') }}:
val: a is setted
${{ elseif eq(parameters.param1, 'b') }}:
val: b is setted
${{ else }}:
val: something else setted
steps:
- script: |
echo message: $(val)
displayName: 'test'
これを実行すると、たとえばparam1にcを入れてパイプラインを実行すると、実行結果には
message: something else setted
と出力されます。
これにより、条件に当てはまらない場合のvariableを指定しておけばif文で条件を網羅しなくても済むようになりました。
おわりに
Azure DevOpsやAzure Pipelineは今も大小さまざまなアップデートが頻繁に上がってきていて前までできなかったことが知らない間にできるようになったりすることもあります。
こまめに要チェックですね。