kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

Visual Studio Team Services CI/CDアドベントカレンダー:ビルドタスクの実行条件を指定する(17日目)

はじめに

これはVisual Studio Team Servicesアドベントカレンダー17日目の記事です。

qiita.com

ビルドタスクを定義してもちょっと特定の時は動いてほしくない、という場合はあります。例えば、masterブランチのビルドをCIで実施するけど、手動で実行したときはテストしたくない、というケースはありえます。

そんなときのために、ある条件を満たすと特定のビルドステップを実行しない、という機能がありますので、紹介します。

ビルド定義での条件設定

ビルドタスクの実行条件はControl Optionsをクリックして展開される、Runt this taskで設定します。標準でCustom conditionsが選択されていますが、他の物を指定することもできます。

f:id:kkamegawa:20171217101334p:plain

  • 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がかかったときはテストタスクを実行してほしいけど、手動で実行したときはテストをしなくてもいい、という条件を設定します。

f:id:kkamegawa:20171217101335p:plain

and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI'))

保存して、手動でQueue Buildをクリックします。

f:id:kkamegawa:20171217101336p:plain

VsTest - testAssembliesタスクにチェックが入っておらず、実行されていないことが分かります。

f:id:kkamegawa:20171217101337p:plain

masterにコミットしたときに実行されるCIではVsTest - testAssembliesにチェックが入っていて、実行されていることが分かります。

Custom Conditionsの式は以下の形式です。

論理式(判定結果, 論理式())

論理式にはand, orなどが指定できます。variablesと比較する場合、variables['値']で実行時の値と比較可能です。

docs.microsoft.com

なお、この条件は以下のように重ねることができます。

and(and(success(),...)

参考文献

公式ドキュメントはこちらにあります docs.microsoft.com