Azure pipelineのyamlでelse-ifが使えるようになっていた件 #Azureリレー
2021-10-12
azblob://2022/11/11/eyecatch/2021-10-12-azure-pipeline-else-if-expression-000.jpg

はじめに

久々に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は今も大小さまざまなアップデートが頻繁に上がってきていて前までできなかったことが知らない間にできるようになったりすることもあります。
こまめに要チェックですね。

参考