a2 Tech blog

試したこと・調べたこと・感じたことを発信するITエンジニアの日記です。仕事とは直接関係ないけど興味あることを模索していきます。

VSTSでBuild Agentを設定してサンプルアプリケーションをビルドしてみる

f:id:ninna2:20170409020434j:plain:w360

Visual Studio Team Service(VSTS)は、“プライベートGit”としてチームで利用出来ますし、Visual Studioとの連携も強力です。また、Azureを用いれば、簡単に“CI/CD”を行うことも可能です。今回はVSTSBuild Agentを設定する方法を記載します。次回あたりにはCoded UI TestをVSTSから実行していきたいと思っており、そのための準備としてBuild Agentの設定をしました。ビルドサーバを独自のものを用意したいという場合には参考になると思います。

Build Agentについて詳しい説明は公式ページに記載されています。

www.visualstudio.com

“Communication to deploy to target servers"あたりに記載されている図がわかりやすいと思います。下記に引用させてもらいました。

https://www.visualstudio.com/en-us/docs/build/concepts/agents/_img/agent-connections.png

概要

記事自体が長くなってしまったので、最初に手順をざっとまとめて書いておきます。

  1. 準備
  2. VSTSのプロジェクト作成とリポジトリ作成
  3. VS2017からサンプルアプリケーションのPush
  4. VSTSのビルド定義(Hosted)
  5. Azure VMの作成
  6. VSTSにBuild Agentの設定
  7. VSTSのビルド定義の変更(Hosted⇒Build Agent)
  8. ビルド実行

準備

必要なものを列挙しておきます。無料枠や試用版で試してみることも可能だと思います。

今回はVSTSを使うのでAzure上のVirtual MachineをBuild Agentとして設定します。オンプレミスの場合は、Team Fundation Server(TFS)と別途用意したビルドサーバになるかと思います。調達と時間の関係でVSTSとAzureを選択しましたが、基本設定方法は変わらないはずです。クラウドは必要な時にリードタイムを考えずに用意できるのですごく便利ですね。

Visual Studio 2017ですが、Coded UI Test(CUIT)をやりたいのであれば、Enterpriseが必要です。今回の内容だけであれば、ビルドが出来れば良いだけなのでCommunity版でも可能だとおもいます。AzureをBuild Agentにする場合は、Visual StudioがインストールされたVMを使えば良いのでそれで代替も出来ます。

ビルド対象のアプリケーションを作成するのは今回のテーマではないので、下記のサンプルアプリケーションを利用します。

code.msdn.microsoft.com

次回やろうと思っているUIテストがやりやすいサンプルアプリケーションを探しました。テスト実施関係のサンプルとしては、電卓(Calculator)がよく用いられますね。多分、仕様がそれほど難しくなく、誰しもが仕様の共通認識を持っているので、題材にされることが多いのかと思います。あとテストケースが比較的立てやすくわかりやすいのもあるのかと思ってます。題材はビルドが出来ればなんでも良いので電卓(Caluculator)でなく各自作成したアプリケーションでもオッケーです。

準備はこれぐらいにして、さっそくはじめていきましょう。

VSTSのチームプロジェクト作成

VSTSでプロジェクトを作成して、ソースコード管理が使えるようにして下さい。私はGit派なので、Gitを使います。過去記事に初期設定について書いているので、参考にセットアップしてもらえればと思います。

ninna2.hatenablog.com

プロジェクトが作成出来ていて、ソースコード管理が使えるようになっていればオッケーです。Gitの場合は、initializeしておくとよいです。

サンプルアプリケーションをPush

VSTSのプロジェクトおよびリポジトリが用意出来たら、Visual Studio 2017を起動してリポジトリをクローンします。Visual Studioチームエクスプローラから、作成したVSTSプロジェクトに接続して今回の作成したリポジトリをクローンします。VSTSVisual Studioの連携はすごく簡単にできますので細かい説明は割愛します。本来はブランチを作成したりしてソースコード管理をもう少し厳密にやっていくのですが、今回はmasterだけ使っていきます。

クローン出来たら、サンプルアプリケーションをクローン先のディレクトリにコピーします。クローン先のディレクトリは、デフォルトに従って[C:\Users[UserName]\Source\Repos]としています。各自の設定で読み替えて下さい。こんな感じのソースコード構成になるはずです。

C:\Users\[UserName]\Source\Repos\SamplePrj
  ∟ \Simple Calculator
    ∟ MyCalculatorv1
    ∟ MyCalculatorv1.sln

コピー出来たら、変更をPushします。これでビルド対象のサンプルアプリケーションの準備が出来ました。

f:id:ninna2:20170522142931p:plain

まずはHostedでのビルド定義の作成

最終的には、Build Agentでビルドを実行することを目指すのですが、その前にHostedでビルド出来るようにVSTSのビルド定義を行なっておきます。それをベースに、後からBuild Agentでビルドする設定に変更していきます。

VSTSにアクセスして、今回作成したりプロジェクトを開きます。まず、サンプルアプリケーションのコードがPush出来ているのか確認しておきましょう。"Code"からリポジトリを開きPushしたりソースコードが格納されていればOKです。

f:id:ninna2:20170522143302p:plain

ビルド定義をおこなっていきます。"Build & Release"から"Builds"とたどっていきます。"+ New definition"をクリックして、ビルド定義を追加していきます。

f:id:ninna2:20170522144242p:plain

Templateは、"Visual Studio"を選択し"Apply"。Nameは任意の名前を入力し、Solutionは“Simple Calculator/MyCalculatorv1.sln”を指定します。

f:id:ninna2:20170522144921p:plain

“Get sources"の設定は、今回作成したリポジトリが指定されていることを確認します。設定を変更する必要はないかと思います。

f:id:ninna2:20170522145613p:plain

NuGet、Copy Files、Publish Build Artifactsは不要なので削除します。代わりにCopy and Publish Build Artifactの追加します。Copy and Publish Build Artifactsの設定を入力していきます。"Copy Root"は。"…“から今回の対象アプリケーションのrootフォルダ(Simple Calculator)を指定、"Contents"は”**\bin"と入力、"Artifact Name"には"drop"と入力、"Artifact Type"には"Server"と入力します。

f:id:ninna2:20170522150201p:plain

ビルド定義としては最後ですが、"Variables"タブから、BuildConfigurationを"release"から"debug"に変更しておきます。

f:id:ninna2:20170522150946p:plain

これで定義変更は出来たので保存とビルド実行(Save & Queue)を行います。ビルド成功すればOKです。これで"Hosted"でのビルド定義は設定完了です。

Build Agent用のAzure VMの作成

VSTSから一度離れて、Azure PortalからをBuild Agentとして利用するためのAzure VMを追加していきます。VMの作成には、開発用やテスト用の環境を素早くプロビジョニングするためのDevTest LabsというAzureの機能を使って構築しています。どんなものかはMicrosoftの公式を読んで下さい。

azure.microsoft.com

メニューからDevTest Labsを選択して新規に作成します。ラボ名、サブスクリプション、場所(リージョン)を入力するだけでサクッと出来ます。

DevTest Labsが出来たら、DevTest LabsにVMを追加します。ここで追加するVMをBuild Agentとして使用するので、Visual Studioが入っているVMイメージを使います。具体的には、Visual Studio Enterprise 2017 (version 15.2) on Windows Server 2016 (x64)”というVMイメージを元に作成を行います。プランは好きなもので構いませんが、とりあえず"DS1_V2"ぐらいでも試すだけなら問題ありません。本格的にビルドサーバとしてフル活用していく場合は、もう少しマシンパワーが必要になるかと思います。

f:id:ninna2:20170522154753p:plain

こんな形でBuild AgentとしてVMが1台追加できればOKです。

f:id:ninna2:20170522160646p:plain

ビルドサーバの設定

Azure PortalからVMが作成出来たらVMにアクセスして設定を行なっていきます。DevTest Labsの場合、ロードバランサ経由になるので、パブリックIPとポートを指定してRDPする形になります。RDP接続出来たらサーバの設定を行なっていきます。

まず、Build Agentとして使用するには、Windowsリモート管理(WinRM)を使える必要があるようです。WinRMでは,接続元のホストから見て,接続先のホストが「信頼できるホストである」必要があります。その設定を行います。

PowerShellを管理者モードで起動して、下記のコマンドを実行します。

> Set-Item WSMan:\localhost\Client\TrustedHosts -Value *

PowerShellによるリモート操作も合わせて許可しておきます。

> Enable-PSRemoting

次にPowerShellのリモート実行を行うために、FireWallの設定を変更します。とりあえず無効にします(本来は正しく特定のポートだけあけるべきですが)。IEのセキュリティ設定も変更します。Server Managerから"IE Enhanced Security Configuration"の設定を"ON"から"OFF"に変更します。

最後に、Visual Studioを起動して、自分自身のMSアカウント(VSTSでプロジェクト作成した際に用いたアカウント)でサインインしておきます。

Build Agentとして用いるVMの設定はこれでOKです。

VSTSにBuild Agentの設定を行う

Build Agentの有効化を行っていきます。やっと今回の記事の本題ですね。

Build AgentのVMからVSTSのプロジェクトにアクセスして設定を行います。設定(歯車マーク)から"Agent Queue"にアクセスします。ここで新しくQueue Agentを作成していきます。"New queue"から作成し、名前はなんでもよいですが"AzureVS2017"でもしておきましょうか。作成出来たら“Download Agent”からダウンロードします。

f:id:ninna2:20170522164951p:plain

Agentの設定でPAT(Personal access token)が必要なのでセキュリティからPAT(Personal access token)を発行します。ログインアカウントのアイコンから"Security"を開き、Personal access tokenをAddします。Token情報をメモします。後で使います。

f:id:ninna2:20170522170049p:plain

VSTSの設定から一度離れて、Build AgentのVM上で作業していきます。ダウンロードしたビルドエージェント(vsts-agent-win7-x64-2.116.1.zip)を展開して、[C:\agent]に配置します。その中に入っている“config.cmd”を実行します。実行すると、VSTSのServerURLを聞かれるので入力します。次にPAT(Personal access token)を入力する必要があるので先ほどメモした内容を入力します。agetnt poolは、先ほど作成した"AzureVS2017"を指定します。

f:id:ninna2:20170522171453p:plain

config.cmdと同様の場所に格納されている“run.cmd”を実行します。“Listening for Jobs”となればOKです。コマンドプロンプトは閉じないでそのままにしておきます。

VSTSからBuild Agentが有効になっているかどうか確認をします。緑色になっていればオッケーです。

f:id:ninna2:20170522171953p:plain

VSTSのビルド定義の変更

長くなりましたがこれで最後です。有効化したBuild Agentを用いてビルドするように設定変更していきましょう。

VSTSからビルド定義を開きます。“Options”“Default agent queue”を"Hosted"から今回は作成したもの“AzureVS2017”に変更します。ビルド実行時に毎回指定することも可能ですがデフォルト値を変更しておいた方が間違いもなく便利なのでこの設定を変更しておきます。

f:id:ninna2:20170522172824p:plain

これで、ビルド実行(Save & Queue)すると、Build Agentでのビルド実行が走るはずです。Build AgentのVMコマンドプロンプトに"Running job: Build"と出ていれば、ちゃんと連携されていることがわかります。

f:id:ninna2:20170522173521p:plain

今回はVSTSからサンプルアプリケーションを自分で追加したビルドマシン(Build Agent)でビルドするように設定しました。サンプルアプリケーションを単純にビルドしただけなので、単体テストの追加や、Coded UI Testの追加など、これを少し発展させていこうかなと思っています。

わかりにく箇所もあったかもしれないですが、皆さんのお役にたてば幸いです。