2020年3月16日月曜日

[Azure Pipelines] iutest のパイプラインを Multi-stage pipelines に変更した

技術書典8 (技術書典 応援祭)で本を出しましたが、本を書いてていくつかのサービスで新しい機能に追従できてないことが発覚したため、ちょこちょこと更新をしていっています。
今回は、iutest の「Azure Pipeline」を「Multi-stage pipelines」に移行しました。

移行結果
まずはじめに移行してどうなったのか見ていただこうと思います。
Before

After


ながいので一部分だけのキャプチャですが、なんとなーく見やすくなったような気がしますね。
テストの種類ごとにステージを分けて、ステージの依存と並列化をしました。

Preview features の有効化
Multi-stage pipelines は現在 Preview feature のため、設定で有効になっている必要があります。
アカウントのボタンを開くと「Preview features」メニューがありそこから変更ができます。


(組織の管理者権限があれば、個人か組織どちらの設定をするか選択できます。)
ここで「Multi-stage pipelines」が「On」になっているか確認してください。
(自分の場合有効化した記憶がないのですが、もしかして Multi-stage な YAML を push すると自動で有効になる??この機能が発表されたのが去年の 5 月なので、以前に有効化していた可能性もなにきしもあらず)




dependsOn 設定で依存と並列
ステージは dependsOn で依存関係を定義できます。iutest では Test/ConfigDisabledTest/ConfigNoFeatureTest が Precheck ステージに依存してます。
また、依存先が同じステージは並列に実行されます。つまり、下記 YAML では Test/ConfigDisabledTest/ConfigNoFeatureTest が並列になります。
stages:
  - stage: Precheck
    jobs:
      - job: syntax_test
        pool:
          vmImage: ubuntu-16.04
        steps:
          - script: make -C test -j4 syntax_tests_run
            displayName: 'syntax test'
  - stage: Test
    dependsOn: Precheck
    jobs:
      - template: .ci/azure_pipelines/template-make-test.yml
        parameters:
          name: default
  - stage: ConfigDisabledTest
    dependsOn: Precheck
    jobs:
      - template: .ci/azure_pipelines/template-make-disabled-test.yml
        parameters:
          name: disabled
  - stage: ConfigNoFeatureTest
    dependsOn: Precheck
    jobs:
      - template: .ci/azure_pipelines/template-make-nofeature-test.yml
        parameters:
          name: nofeature

依存するステージがない複数のステージを並列にしたい場合は以下のように記述します。
dependsOn がないと Test1 → Test2 の順で逐次実行されますが、「dependsOn: []」とすることで Test1/Test2 が並列実行されます。
dependsOn がないと1つ前に書かれているステージに暗黙的に依存すると考えてるとよさそうです。
stages:
- stage: Test1

- stage: Test2
  dependsOn: []

最後に
Multi-stage pipelines にしたことでステージ単位でグルーピングでき、見た目がわかりやすくなったと思います。また、依存関係もステージ単位でできようになり楽になりました。

今回は以上です。では。



宣伝

0 件のコメント:

コメントを投稿