はじめに
これはVisual Studio Team Servicesアドベントカレンダー17日目の記事です。
ビルドタスクを定義してもちょっと特定の時は動いてほしくない、という場合はあります。例えば、masterブランチのビルドをCIで実施するけど、手動で実行したときはテストしたくない、というケースはありえます。
そんなときのために、ある条件を満たすと特定のビルドステップを実行しない、という機能がありますので、紹介します。
ビルド定義での条件設定
ビルドタスクの実行条件はControl Optionsをクリックして展開される、Runt this taskで設定します。標準でCustom conditionsが選択されていますが、他の物を指定することもできます。
- Only when all previous tasks have succeeded
- Even if a previous task has failed, unless the build was canceled
- Even if a previous task has failed, even if the build was canceled
- Only when a previous task has failed
- Custom conditions
それぞれ順に以下の意味になっています。
- 前のタスクが成功した時だけ実行する
- 前のタスクが失敗した時、ビルドがキャンセルされてない限り実行する
- 前のタスクが失敗した時、ビルドがキャンセルされた場合でも実行する
- 前のタスクが失敗した場合のみ
- 独自の条件を指定する
2-4番目に関しては、ビルドが失敗したとき、何らかのクリーンアップを実行するといった場合に指定するといいと思います。
本記事ではちょっとわかりにくい5番目のCustom Conditionsについて解説します。
Custom Conditionの設定
例えば、このビルド定義にはmasterへのコミットでビルドを実行する設定になっています。CIがかかったときはテストタスクを実行してほしいけど、手動で実行したときはテストをしなくてもいい、という条件を設定します。
and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI'))
保存して、手動でQueue Buildをクリックします。
VsTest - testAssembliesタスクにチェックが入っておらず、実行されていないことが分かります。
masterにコミットしたときに実行されるCIではVsTest - testAssembliesにチェックが入っていて、実行されていることが分かります。
Custom Conditionsの式は以下の形式です。
論理式(判定結果, 論理式())
論理式にはand, orなどが指定できます。variablesと比較する場合、variables['値']で実行時の値と比較可能です。
なお、この条件は以下のように重ねることができます。
and(and(success(),...)
参考文献
公式ドキュメントはこちらにあります docs.microsoft.com