kkamegawa's weblog

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

Visual Studio Team Servicesのサーバービルド機能を使う(8日目)

Visual Studio Team ServicesはAppVeyorやCircleCIのようなCI機能を持っています。内蔵の範囲で使う限りは非常に簡単に使えます。外部のリポジトリにホストされているソースでもビルドできるので、ビルドエージェントを使うだけでも便利ですよ。

価格

www.visualstudio.com

2016/12より価格体系がちょっと変わったので、注意してください。4時間までのビルドが無料なのは変わらないのですが、以前のようにエージェントを用意する、VSTSのエージェントを増やすという課金ではなくなり、ビルドパイプラインの並列度をいくつまでにするかという方式になっています。

初期設定

f:id:kkamegawa:20161207212917p:plain

Build & ReleaseのBuildsをクリックすると、ビルド初期画面になります。New definitionをクリックするとビルド定義の作成が開始できるのですが、実はビルド定義の作成には割と高い権限が必要です。Securityをクリックして設定を開始します。

f:id:kkamegawa:20161207212918p:plain

このように、普通にコードをコミットするユーザーであるContributorsにはビルド定義を作る権限がありません。

f:id:kkamegawa:20161207212919p:plain

ビルド定義を作るにはBuild AdministratorsかProject Administratorsの権限が必要になります。小規模なチームであればみんな入れてしまっても構いませんが、ビルドは今後の継続的インテグレーションや継続的デリバリーにもかかわってきます。大きなプロジェクトであればビルドを運用するだけでも結構大変になります。試行錯誤が必要になるかもしれません。

ビルド定義構築

f:id:kkamegawa:20161207212920p:plain

最初にビルドするプロジェクトテンプレートを選択します。Gradle,ant,Androidといった.NET以外のアプリケーションテンプレートも用意されています。

今回は.NET Coreテンプレートを使います。

f:id:kkamegawa:20161207212921p:plain

どのリポジトリからソースを取得するか選択します。内蔵のリポジトリ以外にもGitHub,外部Git(BitBucketなどはこちら)、Subversion(!)を選択できます。

GitHubを使う場合、自身が管理しているリポジトリでなくてはなりません。具体的にはYour Repositoryの一覧で表示されているリポジトリのみが対象になります。

ビルド定義は階層で保存できます。Choose folderをクリックします。

f:id:kkamegawa:20161207212922p:plain

Create new folderをクリックします。

f:id:kkamegawa:20161207212923p:plain

フォルダ名と、フォルダの説明を入力してOKをクリックすると、フォルダが作成されます。ビルド定義画面でCreateをクリックすると、詳細な設定になります。

f:id:kkamegawa:20161207212925p:plain

.NET Coreではdotnetコマンドを実行すればビルドできます。テンプレートから作ればパッケージrestore, Build,Test, publishと一式そろっています。リポジトリ内に一つのプロジェクトだけであれば特に変更する必要はありません。

f:id:kkamegawa:20161207212926p:plain

リポジトリ内にあるプロジェクトをビルドします。

f:id:kkamegawa:20161207212927p:plain

リポジトリ内にあるテストプロジェクトをビルドしてテスト実行します。テストの作り方と使い方は別途解説します。

f:id:kkamegawa:20161207212928p:plain

IISに発行するためのzipパッケージを作ります。Linuxなどのnginxでは普通にsshでコピーすればいいはずなので、ここを変える必要があるでしょう(zipを送ってリモートで展開でもいいと思ますが)。

f:id:kkamegawa:20161207212929p:plain

最後はpublishです。これは少し悩むかもしれませんが、VSTSは継続的デリバリーを支援するRelease Management機能も持っています。ビルド結果を一度VSTS内の領域で保存しておき、Release Management機能で使用するために一度publishというタスクを使用します。

また後日解説しますが、ローカルでビルドエージェントを使った場合、オンプレミスのファイルサーバーに保存するということもできます。AzureのBlobストレージにコピーでもいいでしょう。

残念ながらOneDrive(for Business)へのコピーはないようです。dropboxはmarketplaceにzip & uploadというパッケージを提供している人がいます。

marketplace.visualstudio.com

f:id:kkamegawa:20161207212930p:plain

Saveをクリックすると、ビルド定義を保存します。わかりやすい名前で保存しましょう。

ビルドを実行する

f:id:kkamegawa:20161207212931p:plain

ビルド定義を保存後、Queue new buildをクリックすると、現在のビルド定義を使ってビルドが始まります。

ビルドはキューという、ビルドを実行するサーバー(群)を指定します。キューを指定するだけで、そのキューに登録されている空いているサーバーを自動的にVSTSが選択します。

HostedとはVSTSが提供しているビルドサーバーです。自動的に空いているサーバーでビルドされます。既定では毎回ソースやパッケージを取得するので、大きなソースであればそれだけ時間がかかります。

今までHostedはWindowsだけでしたが、Linuxも始まりましたので、何らかの理由で特殊なバージョンを使わなければならない場合や、macOSを使う場合でしょうか。

f:id:kkamegawa:20161207212932p:plain

ビルド経過はこのような画面で確認できます。ログやコードカバレッジも取得できます。カバレッジは既定では取得できませんが、後日紹介します。

f:id:kkamegawa:20161207212933p:plain

ビルドのサマリーです。開始/終了時間、テスト結果(添付ファイル込)、デプロイといった情報すべてにアクセスできます。.NET Coreのデフォルトテンプレートそのままのアプリをビルドする場合、2分程度ですね。

f:id:kkamegawa:20161207212934p:plain

VSTSでビルドする場合、artifacts(成果物)について理解が必要になります。いわゆるリリースの対象となるものは基本的にこのartifactsで管理されます。この後紹介するRelease Managementで他サーバへのデプロイするためにはこのartifacts内で管理されている必要があります。

f:id:kkamegawa:20161207212935p:plain

今回はIISのデプロイパッケージを作ったので、zipファイルが一つだけとなっています。

まとめ

VSTSのビルド機能は以前(XAMLビルドと呼ばれています)と比べて大変楽になりました。また、ビルドエージェントやビルドタスクはオープンソースで実装されています。クロスプラットフォームで動かすためにはnode.js(TypeScript)で作る必要があるとか多少ハードル高めですが、用意されているものであれば簡単に使えるので、ぜひ試してみてください。

明日はビルドの高度な設定を紹介します。