FIXER cloud.config Tech Blog
Azure Pipelinesのyamlでelse-ifが使えるようになっていた件
2021年10月21日 11時00分更新
本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「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は今も大小さまざまなアップデートが頻繁に上がってきていて前までできなかったことが知らない間にできるようになったりすることもあります。
こまめに要チェックですね。
参考
・New YAML conditional expressions
・General availability: Azure DevOps September 2021 updates
なむゆ/FIXER
最近インフラ始めました。
k8s社内最強を目指します。