Azure Pipelines 便利なYAMLスキーマ集【CI・CD】

Azure DevOps

Azure DevOpsのAzure Pipelinesの便利な機能を集めました。


Gitのcloneを最小にする事で高速化

Gitにはcloseする時にdepthを指定する事で取得する履歴の深さを指定できます。–depth 1 は最新だけを取得し履歴を一切取得しないので高速にcloneする事が出来ます。CI、CDでは履歴は不要なので–depth 1を指定すると良いでしょう。

git clone --depth 1 https://github.com/meltybk/samples.git

Azure PipelinesではcheckoutのfetchDepthで指定する事が出来ます。

    steps:
      - checkout: self
        fetchDepth: 1

Gitのsubmoduleをinitする

Gitでsubmoduleを利用しているのであればcloneする時にsubmoduleも一緒にcheckoutするかどうかを選べます。

defaultではsubmoduleはcheckoutしないので、submoduleを利用するには指定が必要です。

    steps:
    - checkout: self
      submodules: true

trueだと1階層分しかsubmoduleをcheckoutしません。submoduleのsubmoduleも取得するのであればrecursiveを指定します。

scriptでsubmodule update –init を実行

steps、submodulesを利用する以外にもscriptを使う方法もあります。

全てのsubmoduleをcheckoutすると時間がかかるので、Azure Pipelinesで利用するsubmoduleだけを取得する事で実行時間を短縮する為に利用しています。

    steps:
      - checkout: self
        fetchDepth: 1
      - script: |
          git submodule update --init --depth 1 externals/googletest

strategyで設定を変えてjobの複製実行

Debug、Releaseビルドを実行するのに同じ設定をコピペで増やすのはメンテナンス性が下がります。そこでstrategyを利用する事で同じコードを使いまわす事が出来ます。

strategyで設定した変数を元にstepsの項目が複製されて実行されます。Debug、Releaseは構成名です。configurationは変数名です。それぞれ自由に名前を付けられます。今回はconfigurationにDebug、Releaseを割り当てています。変数は複数設定する事が可能です。

  - job: Linux
    pool:
      vmImage: ubuntu-latest
    strategy:
      matrix:
        Debug:
          configuration: Debug
        Release:
          configuration: Release
    steps:
      - bash: |
          cmake -S externals/googletest -B externals/googletest/out/build/clang-linux -G "Ninja" -DCMAKE_BUILD_TYPE=$(configuration) -DCMAKE_MAKE_PROGRAM=ninja -DCMAKE_TOOLCHAIN_FILE=../../cmake/platform/clang.cmake
          cd externals/googletest/out/build/clang-linux
          ninja -f build-$(configuration).ninja gtest
        displayName: CMake and Build GoogleTest
      - bash: cmake -G "Ninja" -DCMAKE_BUILD_TYPE=$(configuration) -DCMAKE_MAKE_PROGRAM=ninja -DCMAKE_TOOLCHAIN_FILE=cmake/platform/clang.cmake
        displayName: 'Configure clang-linux'

パッケージのインストール

デフォルトのパッケージだけでは足りない時用に追加でパッケージをインストールする事が出来ます。

Linux

Linuxはbreaコマンドを使ってパッケージをインストールします。

    steps:
      - bash: brew install ninja

Windows

Windowsではchocoコマンドを使ってパッケージをインストールします。

    steps:
      - script: choco install ninja