Azure Pipelines 便利なYAMLスキーマ集【CI・CD】
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