kkamegawa's weblog

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

Visual Studio Team Services CI/CDアドベントカレンダー:YAMLでビルド定義を書く(7日目)

はじめに

qiita.com

これはVisual Studio Team Servicesアドベントカレンダー7日目の記事です。今回はSprint 125で追加された新機能、YAMLビルドを紹介します。

個人的な不満

VSTSのGUIビルド定義は便利なのですが、ビルド定義を変更しても、作業項目が関連付けられないが不満でした。タスクにビルド/リリース定義を変更して、トラッキングしたいんですよね。一度フィードバックしたことはあるのですが、そのときも「要る派」と「別に要らないよ」派にわかれました。

今回追加されたYAMLであれば、YAMLファイルのコミット時に作業項目を関連付けられるので、ビルド定義の変更と作業のトラッキングができそうです。ではやってみましょう。

まだプレビュー機能なので、preview featureで有効にしてください。

YAMLでビルド定義を作成

f:id:kkamegawa:20171207060234p:plain

現在のVSTSでは複数のレポジトリを対象にできないので、ビルド対象のレポジトリにYAMLファイルを作成します。

f:id:kkamegawa:20171207060235p:plain

慣例的にymlという拡張子で、わかりやすい名前を指定します。

f:id:kkamegawa:20171207060236p:plain

こんな風にもりもり書きます。YAMLの書式はWikipediaも参考にしてください。

YAML - Wikipedia

YAMLができたらビルド定義を作成します。

ビルド定義作成

f:id:kkamegawa:20171207060232p:plain

ビルド定義作成からYAMLを選択してApplyをクリックします。

f:id:kkamegawa:20171207060233p:plain

YAMLではまだVSTSとGitHubしかサポートされていないので注意してください。対象のソースレポジトリを選択します。

f:id:kkamegawa:20171207060237p:plain

ProcessのYAML pathから対象レポジトリ内のYAMLファイルを指定します。

f:id:kkamegawa:20171207060238p:plain

ビルド定義名と、Agent queueを選択します。実はAgent Queueに関してはYAML内に記述できます。

f:id:kkamegawa:20171207060239p:plain

注意事項として、YAMLではほかのテンプレートのようにVariableが事前に定義されていないので、ASP.NET (Core)のビルドであれば、BuildConfigurationやBuildPlatformという値を定義しておかないと失敗します。

忘れやすいので注意してください。

f:id:kkamegawa:20171207060240p:plain

ビルドを実行します。

f:id:kkamegawa:20171207060241p:plain

こんな風にビルドが実行されます。

制限事項

docs.microsoft.com

YAMLビルド良さそうなのですが、現状ではまだまだ制限事項が多いです。

  • VSTSとGitHubのみサポート
  • TFVC未サポート
  • ローカルテストできない
  • ビルド結果のバッジが出ない
  • Webインターフェースで一時停止ができない
  • ビルド時に自動的に作業項目のリンクがされない(これは痛い)
  • ビルド失敗時作業項目が作られない
  • OAuth tokenが使えない
  • ビルドジョブの認証が使えない
  • Gitのサブモジュールなどが未対応

今後に期待。

YAML定義のカンニング

YAML定義一から覚えるのめんどくせーとは思います。そんなあなたのためにVSTSが教えてくれます。

f:id:kkamegawa:20171207063329p:plain

一度GUIでビルド定義を作って、View YAMLをクリックします。

f:id:kkamegawa:20171207063349p:plain

こんな風にできてます!ここからコピペすると、改行コードの都合で余計な改行が入ることがあるので、気を付けてください。

まとめ

YAMLビルドがGUIと同程度になれば、ビルド定義を完全にコードで管理することも、自動的に生成することもできるでしょう。今後が楽しみです。