Team Foundation サービス

Team Foundation サービス プレビューでビルド自動化を実装する

Tim Star
Tim Omta
Mario Contreras

 

今回は、Team Foundation サービス プレビュー (以下、TFS プレビュー) でビルドの自動化を実装する方法について説明します。Visual Studio ALM Rangers では、3 月から TFS プレビューを使用して、ビルド全体をクラウドで行っています。TFS プレビューでは、ゲート チェックインやカスタムのビルド定義など、チーム ビルドのすべての機能がサポートされていますが、今回重点を置くのは、TFS プレビューの基本的なビルド機能ではありません。今回は、開発チームが Windows Azure で利用できるビルド コンピューターの構成をさらにきめ細かく制御する必要があるシナリオを想定し、オンプレミスでビルドの自動化をセットアップする方法を取り上げます。

TFS プレビューでビルドを実行する方法の詳細については、Aaron Bjork の「Visual Studio ALM + Team Foundation Server Blog」(Visual Studio ALM と Team Foundation Server に関するブログ、bit.ly/H9epDn、英語) を参照してください。

毎回のことですが、Rangers は、不足している機能に対処し、導入を妨げるものを取り除き、実世界での経験に基づいたベスト プラクティスとガイダンスを提供しながら、Visual Studio 製品グループ、Microsoft サービス、および Microsoft Most Valuable Professional (MVP) コミュニティの間の連携を推し進める専門家グループです。

TFS プレビューを Team Foundation ビルド サービスに接続する

ソフトウェア プロジェクトのビルドを自動化するには、Team Foundation ビルド サービスを使用して、オンプレミスまたはホスト型シナリオで実行されるビルド コンピューターをセットアップします。ビルド コンピューターをセットアップしたら、コンパイル対象のコード プロジェクトに関する指示やその他多数のオプションの構成方法に関する指示を含むビルド定義を Visual Studio で作成する必要があります。開発者は、まず Team Foundation ビルド サービスの配置シナリオを選択してから、ビルド コンピューターを適切にセットアップする必要があります。

インストールの準備: TFS プレビューに接続するコンピューターに Team Foundation ビルド サービスをインストールするには、次の手順を実行しておく必要があります。

  • Team Foundation Server 2012 で提供されている Team Foundation ビルド サービスを使用するようにします。Team Foundation Server 2010 のビルド エージェントとビルド コントローラーには、Windows Azure 上の Team Foundation サービス プレビューとの互換性がありません。Team Foundation Server 2012 に付属しているビルド サーバー ソフトウェアを使用する必要があります。
  • TFS プレビューをサブスクライブします。
  • TFS プレビューのプロジェクト コレクションを指定する URL を特定します。
  • お使いのユーザー資格情報を構成して、この資格情報に "コレクションレベル情報の編集" アクセス許可を付与します。このアクセス許可は、プロジェクト コレクション ビルド管理者グループの既定のアクセス許可に含まれています。
  • ファイアウォールを構成して、ホストされている仮想マシン (VM) のファイアウォールで TCP ポート 9191 経由の受信接続を許可します。これにより、TFS プレビューがビルド サービスと通信できるようになります。ビルド コンピューターのセキュリティと整合性を確保するために、Windows ファイアウォールを常に有効にしてください。

インストール、構成、および実行: 物理ホスト コンピューター上または TFS プレビューに関連付けられている VM 上に Team Foundation ビルド サービスを配置する手順は、オンプレミスの Team Foundation Server を配置する手順とほぼ同じです。この手順は、MSDN ライブラリの記事「方法: Team Foundation ビルド サービスをインストールする」(msdn.microsoft.com/ja-jp/library/ee259687.aspx) および ALM Rangers によるガイド「Team Foundation サービス向けにビルドをインストールする」(go.microsoft.com/fwlink/?LinkID=251576、英語) で説明しています。

最大の違いは、ビルドの格納場所のセキュリティを確保する方法です。物理ホスト コンピューターや VM にビルドの格納共有フォルダーを作成することはできますが、その共有フォルダーを直接インターネットに公開しないでください。ビルド サーバーの攻撃対象領域を拡大することはお勧めしません。図 1 に示すように、IIS のセキュア FTP を使用してビルドの格納フォルダーを公開することが、ビルドをインターネット経由で安全に公開する最善策と言えます。

Secured Build Drop Access
図 1 セキュリティが確保されたビルドの格納場所へのアクセス

パフォーマンス、帯域幅、およびダウンロードの懸念事項の対処: ビルドの自動化では、一般に大量の I/O 操作が行われます。ほとんどのビルドではソリューションのソース コード全体がダウンロードされることを考えると、利用できる帯域幅とダウンロード容量の上限を考慮しておくことが重要です。1 回のビルドでダウンロードするファイル数を削減するため、Team Foundation Server プロキシのセットアップを検討します。このプロキシは、ソース管理のファイルのコピーをリモートの場所にキャッシュして、ネットワーク スループットを向上します。プロキシによりコピーがオンプレミスにキャッシュされるため、ビルド処理中にファイルをダウンロードする負荷が回避されます。オンプレミスでコピーをキャッシュすれば、確実に帯域幅使用量も削減できます。これはインターネット サービス プロバイダーが設けているダウンロード容量の上限に効果があるだけでなく、ビルド処理全体のパフォーマンスも向上します。

オンプレミスのビルド サーバーを構成する

クラウドの TFS プレビューを利用するオンプレミスのビルド サーバーを配置するには、Web ホスティングの考え方や業界の慣行を流用します。ほとんどの企業 Web ホスティング環境では、境界ネットワーク (別名、非武装地帯 (DMZ) またはスクリーン サブネット) を使用して、セキュリティが確保されたネットワークや領域を作り出します。境界ネットワークは、インターネットに公開されるサーバーと企業ネットワークとを分離します。

境界ネットワークを実装する方法は 2 つあります。従来の実装方法では、物理的に異なる 2 つのファイアウォールを使用し、各ファイアウォールで、ネットワーク間で送受信されるトラフィックの流れを制限します (図 2 参照)。


図 2 2 つのファイアウォールで分離される境界ネットワーク

境界ネットワークの比較的新しい実装方法として、セキュリティが確保された仮想ローカル エリア ネットワーク (VLAN) を使用し、1 つのファイアウォールですべてのネットワーク トラフィックを制御する方法もあります (図 3 参照)。

A Perimeter Network with Virtual Local Area Networks
図 3 仮想ローカル エリア ネットワークを使用する境界ネットワーク

TFS プレビューと Team Foundation ビルド サービスで通信するためのファイアウォール構成

メーカーによってファイアウォールの構成に多種多様なバリエーションがあるため、ここでは概念のレベルに限定して説明します。今回の説明の中でのファイアウォール構成で重要な点は、公開とアクセス ルールの 2 つです。

公開とは、ファイアウォールの外部とのインターフェイスやワイド エリア ネットワークで、TCP ポートとユーザー データグラム プロトコル (UDP) ポートを開いて、Web アクセス、電子メール、仮想プライベート ネットワークなどのサービスをインターネット経由で利用できるようにすることです。ビルド サーバーをセキュリティが確保された状態に保つには、次のようにファイアウォールの公開方法を定義する必要があります。

  • インターフェイス: 外部
  • ポート番号: 9191
  • TCP/UDP: TCP
  • 範囲: すべてのネットワーク (インターネット)

範囲を "すべてのネットワーク (インターネット)" に設定していることに注意してください。公開の範囲を TFS プレビューの一連の IP に制限して、インターネット上の他のクライアントやホストがこのコンピューターにアクセスしないようにすることを考えます。トラフィック制限を追加すると、セキュリティに新たな層が加わります。TFS プレビューの最新 IP を取得するには、DNS ネーム サーバーの参照を実行します。ただし、IP は随時変化する可能性があります。ファイアウォールによっては、ホストの完全修飾ドメイン名の逆引き参照を実行して、最新の IP を監視する機能があります。

アクセス ルールとは、ファイアウォールの内部インターフェイスと外部インターフェイスの間のネットワーク トラフィックに設ける制約です。ビルド サーバーをセキュリティが確保された状態に保つには、ファイアウォールのアクセス ルールを定義する必要があります (図 4 参照)。

図 4 アクセス ルールの定義

送信元 送信先 プロトコル ポート アプリケーション

内部ネットワーク

(ビルド サーバーの IP)

外部インターフェイス

(インターネット)

HTTPS 8080 TFS プレビューとのセキュリティ保護された通信

外部インターフェイス

(インターネット)

ビルド サーバー (IP) HTTPS 9191 Team Foundation ビルド サービスのエンドポイント

侵入検知: あらゆる Web ホスティング インフラストラクチャと同様、Team Foundation ビルド サービスのサーバーをインターネットに公開する際は侵入検知の実装を検討する必要があります。

TFS プレビューと Team Foundation ビルド サービスとの通信の保護: ビルド サーバーが使用するサービスを構成することによって、TFS プレビューに接続されたオンプレミスのビルド サーバー配置のセキュリティを強化できます。配置のセキュリティを最大限に強化するために、SSL を使用する HTTPS を要求するよう構成することをお勧めします。

SSL を使用する HTTPS を要求するようサービスを構成するには、次の要件があります。

  • 民間証明機関 (CA) が発行した SSL 証明書
  • 登録済みのインターネット ドメイン名
  • 登録済みのドメイン名を使用してビルド サーバーの外部 IP (インターネットとインターフェイスを持つ IP) に解決される、DNS ホスト名レコードまたはエイリアス (CNAME) (民間の CA から SSL 証明書を取得するには、登録済みのドメイン名が必要)
  • ビルド サーバーでのローカル管理者特権
  • ファイアウォール上にあるビルド サーバーの外部 IP アドレスにマップされる内部 IP アドレス

このような要件を満たしたら、ファイアウォールで TCP ポート 9191 を開いてそのポートにビルド サーバーの内部 IP アドレスを転送し、Team Foundation ビルド サービスが SSL を使用するよう構成します。

Team Foundation Server 2010 ビルド サービス向けに SSL を構成する方法については、MSDN ライブラリのセクション「ビルド サーバーへの証明書のインストール」(msdn.microsoft.com/ja-jp/library/aa833872.aspx#InstallBuildCert) を参照してください。

認証の設定: ビルド サービス構成ウィザードを実行して Team Foundation ビルド サービスのインスタンスを TFS プレビューに追加するには、次の 2 つのユーザー アカウントが必要です。

  • TFS プレビュー アカウントのプロジェクト コレクションにマップされる Windows Live ID (サブスクリプション)
  • ビルド サーバーのサービス アカウントとして使用するローカル ユーザー アカウントまたはドメイン ユーザー アカウント

ビルド サービス構成ウィザードでは、初期構成の段階で Windows Live ID を使用して TFS プレビューにアクセスできるようにし、プロジェクト コレクションとビルド サーバーのマッピングを確立します。続いて、ドメイン ユーザー アカウントまたはローカル ユーザー アカウントのサービス アカウント資格情報を指定します。ドメイン ユーザー アカウントをサービス アカウントとして使用するのがセキュリティに最も適したオプションです。ドメイン ユーザー アカウントは、簡単に別のサーバー上のフォルダー共有を使用できます。

ビルドの監視: Team Foundation Server 2010 Power Tools (2011 年 12 月) リリースに付属する Build Notifications パワー ツールを使用すると、ビルドを監視できます。図 5 に、[Build Notifications Options] (ビルド通知オプション) ダイアログ ボックスを示します。Visual Studio 2012 で作業している場合は、Team Explorer 2010 SP1 と GDR の互換性に関する更新プログラムをインストールしてから、Team Foundation Server 2010 Power Tools をインストールする必要があります。同一コンピューターへの Visual Studio 2012 と Visual Studio 2010 のサイドバイサイド インストールがサポートされているため、バージョンの競合については心配することはありません。

Monitoring Build Status
図 5 ビルドの状態の監視

ホスト ビルド コントローラーによりチーム ビルド定義を構成する

TFS プレビューでは、アプリケーションのコンパイル、テスト、およびパッケージ化を実行できるビルド コンピューターのプールが提供されます。

ホスト ビルド コントローラーの構成: ホスト ビルド コントローラーを使用するのに必要な構成は、ビルド定義の [ビルドの既定値] タブでホスト ビルド コントローラーを指定することだけです (図 6 参照)。

Selecting a Hosted Build Controller
図 6 ホスト ビルド コントローラーの選択

制約の対処: TFS プレビューでは、ビルド コンピューターを完全には制御できません。つまり、プロジェクトに外部依存関係が存在する場合、その依存関係をチェックインするか、パブリックな NuGet フィードからダウンロードできるようにする必要があります。

Visual Studio 2012 と Visual Studio 2010 SP1 (GDR の互換性に関する更新プログラムが必要) の開発環境は TFS プレビューのビルド イメージにインストールされるため、これらのバージョンの Visual Studio で作成したプロジェクトだけがサポートされます。

Windows ストア アプリをビルドする場合は、ビルド サービスを Windows 8 にインストールする必要があります。Team Foundation ビルドを使用して Windows ストア アプリをビルドおよびテストする方法の詳細については、bit.ly/T3tFSt (英語) を参照してください。

単体テスト: TFS プレビューでは、ビルドの一環として単体テストをサポートしています。MSTest テストを使用した単体テストは、追加構成の必要なく機能します。NUnit や xUnit など、他の単体テスト フレームワークを使用してテストを実行するには、対応するテスト アダプターのアセンブリがソース管理にチェックインされていることを確認してから、ビルド コントローラーの [カスタム アセンブリへのバージョン コントロール パス] プロパティをこのアセンブリの場所に設定します。

複雑なビルド シナリオの特定: お使いの環境に最適なビルド構成の決定は、ビルドの複雑さによって異なります。自動配置を実行しない単純なビルド シナリオの場合は、TFS プレビューでホストされるビルド サービスで十分です。より複雑なビルド処理で、オンプレミスのビルド構成を使用します。複雑なビルド構成には、次の条件のうち少なくとも 1 つを満たすビルド テンプレートを含めることになります。

  • ワークフローに自動配置のアクティビティが含まれる。
  • Visual Studio 2010 SP1 よりも前のバージョンの Visual Studio で作成したソリューションが含まれる。
  • Visual Studio Lab Management を呼び出す。
  • オンプレミスのコンピューターと連携する。
  • Visual Studio のテスト アダプターが提供されていないテスト フレームワークを必要とする。

サードパーティ製アセンブリを必要とするソリューションは、そのアセンブリをバージョン管理にチェックインするか、ソリューションでアセンブリをパブリックな NuGet フィードからダウンロードできるようにすれば、TFS プレビューでビルドできます。

自動テストと Lab Management: 現時点では、TFS プレビューは Visual Studio Lab Management をサポートしていませんが、Visual Studio で数種類の自動テストを作成して実行できます。以下に、いくつか例を示します。

  • 単体テスト
  • コード化された UI テスト
  • Web パフォーマンス テスト
  • ロード テスト
  • 汎用テスト

ビルドの完了後に、これらのテストを実行してビルドの品質を評価できます。このようなテストは、一般にビルド確認テスト (BVT) またはスモーク テストと呼ばれます。通常、BVT は幅広い一連のテストで構成され、特定のビルドでアプリケーションの主要領域を確認するために使用します。BVT を構成するすべてのテストにビルドが合格すれば、そのビルドは成功と見なされます。

オンラインの MSDN ライブラリの記事「方法: アプリケーションのビルド後にスケジュールされているテストを構成および実行する」(bit.ly/P2EKB7、英語) では、BVT の作成と実行に必要なすべての手順について説明しています。

チーム ビルドでのコード化された UI テストの実行: コード化された UI テストを使用すると、BVT をさらに優れたものにできます。コード化された UI テストでは、テスト実行の一環としてアプリケーションを起動します。必ず、アプリケーションの起動に使用するビルド サービスのサービス アカウントを構成してください。このサービス アカウントは、そのコンピューターのアクティブ ユーザーのユーザー アカウントと同じものにする必要があります。サービス アカウントとユーザー アカウントが異なる場合、アプリケーションは起動しません。また、Team Foundation Server 管理コンソールまたは Team Foundation ビルド構成で、ビルド サービス ホストのプロパティ [ビルド サービスを次の形式で実行します] を [対話型プロセス] に設定していることを確認することも必要です。

今後の展望

今後のコラムでは、アウトソーシング モデルの一環として遠隔地の開発組織のサービスを活用しようと考えているエンタープライズ規模の開発組織向けに、共同作業を実現するように TFS プレビューをセットアップおよび構成する方法について説明します。ALM Rangers の詳細については、bit.ly/HrYqAl (英語) を参照してください。

Mario Contreras は、トロントに拠点を置く Microsoft Consulting Services のシニア コンサルタントであり、ALM コーチでもあります。また、テクニカル カンファレンスで頻繁に講演を行っています。Microsoft Canada での在職期間中、Contreras は最も大規模な Team Foundation Server 実装のいくつかでリーダーを務めました。Contreras は、Visual Studio ALM Rangers チームのアクティブ メンバーです。

Tim Omta は、フェニックスのシニア アプリケーション開発マネージャーです。彼はマイクロソフトで製品開発者とテスト開発者の両方として勤務経験があり、現在はマイクロソフトの開発者向けのプレミア サポートを通じてフィールド コンサルタントを務めています。Omta は、ALM Rangers のアクティブ メンバーです。

Tim Star は、Intertech Inc の主任コンサルタントで、トレーニング、コンサルティング、Visual Studio ALM を担当しています。MCPD、MCTS、MCT、および Visual Studio ALM External Ranger の資格を持ち、MVP を 3 度受賞しています。彼はコードを記述したり、ALM ガイダンスを作成および提供したりしています。

この記事のレビューに協力してくれた技術スタッフの Jim Lamb、Mario Rodriguez、Willy-Peter Schaub、および Patricia Wagner に心より感謝いたします。