ALM Rangers

Visual Studio ALM Rangers: VM Factory の誕生

**Willy-Peter Schaub
Brian Blackman
Paul Meyer

コード サンプルのダウンロード

今回は、Virtual Machine Factory (VM Factory) について詳しく調べ、その考え方とメリットについて解説します。

この記事は、Visual Studio ALM Rangers が、複雑な現実世界の環境で起こる問題を解決に導くガイダンスを提供するシリーズの 1 つです。Rangers の目標は、ソリューションとアプリケーション ライフサイクル管理 (ALM) プロセス全体の整合性と品質の向上を支援することです。

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

VM Factory (rangersvsvmfactory.codeplex.com、英語) は、ソフトウェア ソリューションの参照実装で、ほぼ完全に自動化されていて整合性のあるファクトリ方針を採用して、仮想環境の作成を自動化する関連ガイダンスです。VM Factory の目的は、特に Visual Studio、Team Foundation Server (TFS)、Lab Management、およびこれらに関連する前提条件向けに、仮想化に関する規範的なガイダンスを開発することです。主な目的は、図 1 で対応する番号と共に示しているように、(1) 柔軟なスキーマ駆動型の自動化、(2) 1 回のクリックで簡単に実行できる仮想マシン (VM) 作成のシナリオ、(3) 物理環境、仮想環境のインストールおよび構成を自動化する再利用可能なファクトリ、(4) 整合性があり、反復可能な環境、(5) 事前構成済みの環境を再利用する能力という、5 つを実現することです。

VM Factory Objectives
図 1 VM Factory の目的

VM Factory が追求しないものは、ビルドおよび構成にかかる時間の短縮です。これはアンチ パターンと呼ばれます。

VM Factory は、人間よりもはるかに効率がよく統制が取れていますが、環境を生成する時間の大半はインストールに実際にかかる時間が占めています。このような時間は、自動化で大幅に短縮することはできません。Rangers のエコシステムが、分散型で、他のチームとは切り離され、帯域幅が狭い環境といった制約を受けていることから VM Factory の構想が生まれました。詳細については、MSDN マガジン 2011 年 9 月号の記事「Visual Studio ALM Rangers - 仮想チームから得られるヒント」(msdn.microsoft.com/magazine/hh394152) を参照してください。インターネットから VM を共有およびダウンロードすることは実現可能で、広く受け入れられている手法ですが、コストの問題で帯域幅を十分広くできない場合は困難になります。VM Factory は、VM を数日~数週間かけてダウンロードするのではなく、ローカル リソースを使用して同じイメージをリモートに再作成できるようにします。ローカル リソースに限界があっても、このように再作成されるイメージは、ユーザーが最小限の操作を行うだけで (または、まったく操作しないで) 提供されます。

整合性のあるイメージを提供することが主なメリットの 1 つで、Rangers が VM Factory を使用する主な理由でもあります。このイメージのスキーマは、バージョンが変わると次のバージョンへと移動します。つまり、ある問題を解決するために新しいバージョン (v1.1) を作成し、その後新しいバージョンのソフトウェア (v2) を含めるために別のビルドを作成するときは、問題を解決するソリューションと新しいソフトウェアが現在のバージョンから次のバージョンへと移ります。整合性のあるイメージを提供することは、その次のバージョン (v3) が、数か月~数年ビルドされない場合に特に有効です。バージョンとバージョンの間にそのように長い期間が空くと、別のチームがプロジェクトに割り当てられる可能性があります。イメージに整合性があれば、VM Factory タスク シーケンスの構成と構造のセットアップは、新しいチームが作業できる "生きた" ドキュメントとして機能します。

さらに、VM Factory は、オンデマンドのイメージ作成もサポートします。これにより、デスクトップ コンピューターとポータブル コンピューターの両方に必要なディスク記憶域が少なくなり、記憶域から取り出したイメージが最新かどうかについての "不安" もなくなります。

Lab Management 内での仮想化によって、ソフトウェアのビルド、配置、およびテストのための自動ワークフローが提供されますが、このような仮想環境を作成するには、手動で多くの操作を実行する必要があります。現時点では、Microsoft System Center Virtual Machine Manager (VMM) 用に、VM およびテンプレートのライブラリをセットアップしなければなりません。さらに、Lab Management のトポロジ内で作業する必要もあります。

VM Factory を使用すると、VM および VM テンプレートを作成するのに必要な労力が大幅に削減されます。さらに重要なことに、VM Factory では、VM または VM テンプレートに使用されている OS やアプリケーションを簡単に変更できます。タスク シーケンスを変更して、イメージの自動再作成を実行するだけの簡単な操作です。VM Factory では、タスク シーケンスは基礎となるイメージと認識され、Lab Management のソース VM として機能します。

VM を作成するときに、実行するタスク シーケンスを選択するよう求められます。Visual Studio ALM Rangers Lab Management 用のタスク シーケンスは 2 つあります。どちらも、この後詳しく解説します。

VM Factory のアーキテクチャ概要

図 2 で対応する番号と共に示しているように、VM Factory のアーキテクチャは、(1) 最小要件 (VM Factory 専用の RAM が最低 1 GB、空きディスク領域が 100 GB など) を満たしている Windows プラットフォームでホストできます。アーキテクチャは、Microsoft Solution Accelerators (bit.ly/tp5QX4) の 1 つである (2) Microsoft Deployment Toolkit (MDT) を基盤とします。MDT は、(3) OS とアプリケーションの配置を定義および管理するための、共通の管理コンソールと包括的なツールやガイダンスを提供します。(4) タスク シーケンスを使用して、OS と Microsoft Office や Visual Studio などのアプリケーションの配置に必要なインストールと構成の手順のシーケンスを定義し、(5) Windows PowerShell スクリプトなどのカスタム スクリプト (後ほど説明します) を使用して、(6) 使用する OS およびアプリケーションのメディアを参照します。現状の VM Factory は、すべてのメディアが VM Factory に物理的に存在していると仮定しますが、Rangers では、柔軟性を大幅に高め、既存のリソースを再利用するために、MSDN ダウンロードなどの別のメディア ソースも参照できるオプションを模索しています。

VM Factory Architecture
図 2 VM Factory のアーキテクチャ

各 VM Factory には、(7) ライトタッチ CD ブート ISO イメージがあります。これにより、新しいインストールの開始、および VM Factory でホストしている配置共有への接続が可能になります。ブート プロセスおよびインストール プロセス中に、(8) 適切なタスク シーケンスが選択されます。タスク シーケンスは、ライトタッチの指示によるインストール中に (9) ターゲット コンピューターに適用されるソフトウェア、構成、およびスクリプトを定義します。

Visual Studio ALM Rangers VM Factory は、定義済みの VM Factory タスク シーケンスを備えた、事前設定済みの MDT インスタンスです。これらのタスク シーケンスは、コンピューターの新規配置用の MDT タスク シーケンスのテンプレートを土台にし構築しています。このタスク シーケンスによって、ベアメタルから新しいコンピューターを作成するのに必要なすべての手順を定義します (VM Factory の場合は、仮想ベアメタルからの作成です)。手順は、ドライブのフォーマットと OS のインストールから始まり、アプリケーションのインストール (または、それ以降の手順) へと続きます。

Rangers は、デモ、概念実証、ハンズオン ラボ、およびテスト目的にイメージを構築するため、VM Factory に含まれるタスク シーケンスを使用しています。ここからは、これらのタスク シーケンスについて説明します。

  • Team Foundation Server のベース イメージのタスク シーケンスは、TFS クライアントとサーバーの機能の両方を含む包括的な Visual Studio イメージを定義します。また、Word 2007、Excel 2007、PowerPoint 2007、および (オプションで) Microsoft Office SharePoint Server (MOSS) 2007 も含みます。VM Factory には、x86 (Windows Server 2008) と x64 (Windows Server 2008 R2) の両方に対応するタスク シーケンスがあります。
  • Lab Management のハンズオン ラボ イメージのタスク シーケンスは、Lab Management の包括的なデモ環境を定義します。これは x64 TFS ベース イメージをベースとし、Active Directory、DHCP、および VMM も含みます。DHCP は、完全に構成済みですが、セキュリティ上の理由により無効にしています。VMM および Visual Studio Lab Management も完全構成済みのため、VMM の既定のホスト グループに、ドメインに参加する Hyper-V ホストを追加するだけです。
  • Lab Management のベース イメージのタスク シーケンスは、Visual Studio Lab Management を使用してソフトウェアをテストするためにイメージを作成するのに便利です。このタスク シーケンスは、Windows Server 2008 R2 を基盤とするイメージを定義し、Visual Studio Test Agent、Visual Studio Test Controller、Visual Studio Lab Management Agent、および Visual Studio Team Foundation Build をインストールします。ほとんどのテスト構成では、これらのエージェントを組み合わせることが求められます。

独自のファクトリをセットアップするときは、ニーズに合わせてこれらのシーケンスを変更するか、カスタムのタスク シーケンスのベースとして使用します。この方法については、この後の「管理」で説明します。

Windows PowerShell による自動化

VM Factory には、Visual Studio ALM Rangers のベース イメージのセットアップ、構成、およびチューニングを自動化するために、Rangers ファクトリ構想の一部として開発した Windows PowerShell スクリプトが含まれています。Windows PowerShell スクリプトと CMD ファイルに加え、ntrights.exe、stsadm.exe、psconfig.exe、iisreset.exe などの Microsoft サービスまたは製品アプリケーションも使用しています。

最初のファクトリ計画には Windows PowerShell スクリプトのみを採用しましたが、Rangers は、Visual Studio ALM Rangers ベース イメージ ファクトリとして MDT を採用したため、特別な構成を実行して MDT ベースのセットアップをチューニングするために Windows PowerShell スクリプトを呼び出すことにしました。これから、スクリプトに関する重要な注意事項点やいくつかのスナップショットを示します。最終的には、VM Factory のソース全体をご覧いただくことをお勧めします。

Windows PowerShell スクリプトを正しく実行するには、Windows PowerShell をインストールしておく必要があります。スクリプトは、Windows Server 2008 以降のバージョンで実行するよう設計しています。また、スクリプトには署名しておらず、システムを変更するには権限の昇格が必要になるため、Windows PowerShell コマンドの "Set-ExecutionPolicy Unrestricted" を実行する必要があります。

powergui.org (英語) からダウンロードできる PowerGUI (Windows PowerShell 用の GUI およびスクリプト エディター) を使用する場合、スクリプトはデバッグ モードでは実行されません。したがって、スクリプトは Windows PowerShell 本体で実行するか、PowerGUI では Alt キーを押しながら F5 キーを押して実行する必要があります。さらに、1-pre.ps1 スクリプトには、Windows Server 2003 Resource Kit に含まれている NTRights.exe が必要です。NTRights.exe がなければ、スクリプトの createTFSAccounts 関数最後の数行にある呼び出しを無効にして、TFSSERVICE および TFSBUILD サービス アカウントの対話型ログオン権限を手動で設定する必要があります (図 3 参照)。Windows Server 2003 Resource Kit Tools は bit.ly/fbafh (英語) からダウンロードできます。

図 3 Windows PowerShell スクリプトでの NTRights.exe の使用

function createTFSAccounts
{
  blankline
  "Creating the 5 TFS accounts. Namely TFSREPORTS"
  ", TFSSERVICE TFSBUILD,WSSSERVICE & SQLSERVICE with"
  " all their passwords set to P@ssw0rd"
  createUser "TFSREPORTS" "P@ssw0rd"
  createUser "TFSSERVICE" "P@ssw0rd"
  createUser "TFSBUILD" "P@ssw0rd" $true
  createUser "WSSSERVICE" "P@ssw0rd"
  createUser "SQLSERVICE" "P@ssw0rd"
  $currentLocal = Get-Location
# Set-Location 'C:\Program Files (x86)\Windows Resource Kits\Tools\'
  ./ntrights.exe +r SeInteractiveLogonRight -u TFSSERVICE
  ./ntrights.exe +r SeInteractiveLogonRight -u TFSBUILD
  Set-Location $currentLocal
}

ファクトリのインストール前、およびファクトリのインストール後の Windows PowerShell スクリプトには、Active Directory Service Interface (ADSI) 型アダプターなどの、さまざまなオブジェクトおよび型アダプターを使用する関数がいくつか含まれています (図 4 参照)。

図 4 Windows PowerShell の ADSI 型アダプターの使用

#Creates a user and sets the password to never expire
function createUser([String]$accountName, [string]$password, [bool]$delegated = $false)
{ 
  $computer = [adsi] "WinNT://$hostname" 
  $user = $computer.Create("User", $accountName)     
  $user.SetPassword($password)
  $flags = 65536 -bor 64
  if ($delegated)
  {
    $flags = $flags -bor 1048576
  }
  $user.put("UserFlags",$flags)
  $user.SetInfo()                                                       
}

Windows PowerShell ADSI 型アダプターは、ユーザー アカウントの作成、パスワードの設定、および有効期限が切れない管理者パスワードを設定するために使用します。Set-ItemProperty および New-ItemProperty は、Prefetch の有効化、プログラムの優先順位の設定、Windows Server 2003 が持ついくつかの信頼性機能の無効化などを行う、VM Factory のレジストリを操作する Windows PowerShell のコマンドレットで、何回も使用します。これらの変更をレジストリに加えると、自動化のメリットを得るために行わなくてはならない、手動の構成タスクが最小限に抑えられます (図 5 参照)。

図 5 ShutdownEventTracker の操作

function ShutdownEventTracker
{ 
  new-item 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Reliability'
    -erroraction silentlycontinue
  Set-ItemProperty –Path
    'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Reliability'
    -name "ShutdownReasonOn" -Value 0
  Set-ItemProperty -Path
    'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Reliability'
    -name "ShutdownReasonUI" -Value 0
}

前述のように、完全なソース コードを参考にし、Windows PowerShell を使ったスクリーン セーバーの無効化、入力方向のファイアウォールの無効化、リモート デスクトップの有効化、IE セキュリティ強化の無効化、スーパーフェッの有効化、サーバー名の変更などのその他多くのタスクを自動化する方法について理解することをお勧めします。

管理

VM Factory の管理は簡単です。VM Factory は基本的に、事前設定済みの MDT 配置共有なので、カスタマイズおよび拡張しだいで MDT が持つあらゆる可能性を思いのままに広げることができます。MDT 配置共有を管理する主なツールは、Deployment Workbench (配置ワークベンチ) です。ヘルプについては、Deployment Workbench のヘルプ トピック ドキュメントでもまったく問題ありませんが、印刷可能なドキュメントは go.microsoft.com/?linkid=9707467 (英語) からダウンロードできます。ここからは、ツールの使い方について簡単に説明します。

Deployment Workbench を起動すると、おなじみの管理コンソールの UI が表示されます (図 6 参照)。左側のウィンドウで [Deployment Shares] (配置共有) ノードを展開します。CodePlex のガイダンスに適切に従うと、[VSTS Rangers Deployment Share] が表示されます。表示されない場合は、一番右のウィンドウで適切な操作を実行すれば開くことができます。

Deployment Workbench Administration Interface
図 6 Deployment Workbench の管理インターフェイス

図 6 を参照してください。[VSTS Rangers Deployment Share] を展開すると、配置共有のコンテンツを参照できます。ここでは、ディスク上の配置共有ディレクトリの Control ディレクトリにある XML ファイルの内容が、ユーザーにわかりやすく表示されています。特に重要なのは、[Applications] (アプリケーション)、[Operating Systems] (オペレーティング システム)、および [Task Sequences] (タスク シーケンス) です。配置共有の設定に変更を加える場合は、[Update Deployment Share] (配置共有の更新) を選択します。これにより、タスク シーケンスを開始するのに使用するブート イメージが再生成されます。

Applications 定義は、配置共有におけるアプリケーションのソース ファイルの場所や、自動インストール コマンドを使用してアプリケーションをインストールする方法を表します (図 7 参照)。このコマンドは、ユーザーの操作なしに、自動的にインストールを完了します。このために、無人インストール スクリプトを作成してセットアップを準備しなくてはならない場合もありますが、その必要がある VM Factory のアプリケーション用に、Rangers が既に用意しています。

Task Sequence Task Details
図 7 タスク シーケンスのタスクの詳細

Operating Systems 定義では、MDT は、OS インストール ソースから必要な情報をすべて抽出することができます。通常、1 セットのソース ファイルに、複数のバージョンの OS のファイルが含まれます。異なるバージョンはすべて [Operating Systems] (オペレーティング システム) の下に表示され、インストールするためには [Task Sequences] (タスク シーケンス) で選択します。

先ほど説明した、VM Factory に含まれているタスク シーケンスは、[Task Sequences] (タスク シーケンス) ノード下にあります。タスク シーケンスのプロパティを表示すると、タスク シーケンス自体を変更できます。図 8 では、タスク シーケンスが複数のフェーズに分けられていることがわかります。重要なフェーズは、OS をインストールする [Install] (インストール) フェーズと、OS インストール後のタスクをすべて扱う [State Restore] (状態の復元) 段階です。ツール バーには、タスク シーケンスへの手順の追加または削除を行うオプションがあります。MDT では、これにはいくつかの方法があります。図 8 では、[Install Applications] (アプリケーションのインストール) タスクのプロパティも示しています。

Task Sequence Properties
図 8 タスク シーケンスのプロパティ

VM Factory を拡張する

VM Factory の拡張も簡単です。イメージに別のツールを追加する基本手順について見てみましょう。例として、タスク シーケンスに、Code Metrics Power Tool (microsoft.com/download/en/details.aspx?id=9422、英語) を追加します。このツールは、MetricsSetup.exe という実行可能ファイルを使ってインストールします。プロセスは、次の手順で構成されています。

  1. アプリケーションの自動インストールのコマンド ラインについての決定
  2. 配置共有へのアプリケーションのコピー
  3. MDT Deployment Workbench の起動
  4. 新しいアプリケーション定義の作成
  5. タスク シーケンスへのアプリケーションの追加
  6. 更新されたタスク シーケンスのテスト

手順 1. は、ユーザーの操作なしにこのツールをインストールする方法 (無人インストールを行う方法) を知ることが目的です。無人インストールの情報については、製品のドキュメントを参照してもかまいませんが、ヒントを得るための一般的な方法として、/? または -? という引数を追加してファイルを実行します。コマンド ラインから MetricsSetup.exe /? を実行すると、図 9 の [Usage] (使い方) ダイアログ ボックスが表示されます。テスト コンピューターでこのコマンドを実行して、自動インストールのコマンド ラインが MetricsSetup.exe /q であることを確認します。

Result of Running MetricsSetup.exe /?
図 9 MetricsSetup.exe /? の実行結果

手順 2. は、ソフトウェアを、配置共有の適切な場所に移動またはコピーすることが目的です。配置共有内の他のソフトウェアとの整合性を保つため、C:\Deploymentshare\INSTALL – Code Metrics Power Tool\Source\ というディレクトリを作成して、新しいディレクトリに実行可能ファイルをコピーします。

ファイルが適切な場所に配置されたので、MDT Deployment Workbenchを起動 (手順 3.) してアプリケーション定義を追加 (手順 4.) します。MDT の初期ビュー (図 6 参照) の左側のウィンドウで [Applications] (アプリケーション) ノードを選択し、[New Application] (新しいアプリケーション) を選択します。ウィザードに従えば、新しいアプリケーション定義を作成できます。既に実行可能ファイルを適切な場所に移動してあるので、ウィザードの最初のページで、[Application without source files or elsewhere on the network] (ソース ファイルのないアプリケーション、またはネットワークの別の場所にあるアプリケーション) を選択します。

次のページで、すべてのインターフェイスで表示される [Application Name] (アプリケーション名) と、プロセスでは使用されない省略可能な追加情報をいくつか入力します。アプリケーション定義プロセス ウィザードの最後のページでは、自動インストール コマンドと、ソース ディレクトリを入力します (図 10 参照)。ウィザードの完了後、アプリケーションの一覧に新しいアプリケーションが表示されます。

New Application Wizard: Defining Command Details
図 10 New Application Wizard (新しいアプリケーション ウィザード): コマンドの詳細の定義

実際にアプリケーションをインストールするには、タスク シーケンスに手順を追加する必要があります (手順 5.)。タスク シーケンス エディターで、インストール操作を追加する場所を見つけます。ツール バーの [Add] (追加) メニューで、[General] (全般)、[Install Application] (アプリケーションのインストール) を選択して、タスク シーケンスに新しい操作を追加します。右側のプロパティ ウィンドウで [Install a single application] (1 つのアプリケーションをインストール) を選択し、[Browse] (参照) をクリックして Code Metrics Power Tool アプリケーションを選択したら、[OK] をクリックしてタスク シーケンスを保存します。これで、テスト (手順 6) の準備ができました。

最新のガイダンス

ニーズに合わせて配置共有をチューニングする方法については、これですべてです。

最新のガイダンスと配置共有のテンプレートについては、CodePlex (bit.ly/aL0mxZ、英語) を参照してください。関連ブログの目次、動画、その他の情報については、Rangers ブログ (bit.ly/qEIRPl、英語) を参照してください。

VM Factory が提供する自動化および整合性の概念と技術的な実現性が証明されたので、今後は以下のような強化を行うことを計画しています。

  • 新しいファクトリの、さらに簡単な実装と管理
  • Deployment Hydration 構想のすばらしい理念に従った、既存のファクトリの使いやすく管理されたメンテナンス
  • ファクトリ自動化のスケジュールを設定する機能
  • 各ファクトリのメディアを複製する代わりに、MSDN ダウンロードなどの既存のメディア ライブラリを使用する機能

今後も強化を予定しているこの重要なツールに、ご期待ください。

Brian Blackman は、エンジニアリングと市場における独立系ソフトウェア ベンダーに影響を与えることに特化している、Microsoft Services Partner ISV チームの主任コンサルタントです。彼は CSM、MCSD (C++)、MCTS、および Visual Studio ALM Core Ranger です。コードを記述したり、ワークショップを作成および提供したり、さまざまな研究領域や ALM 関連のすべてについてコンサルティングを行っています。

Paul Meyer は、オランダの Microsoft Services でシニア アプリケーション プラットフォーム コンサルタントを務めていて、開発プロセスとツールの使用に特化しています。数年にわたって、Visual Studio ALM Rangers プロジェクトに携わっています。

WillyPeter Schaub は、Microsoft Canada Development Center で、Visual Studio ALM Rangers のシニア プログラム マネージャーを務めています。80 年代中ごろから、ソフトウェア エンジニアリングにおける簡潔さと保守性を追求し続けています。ブログは blogs.msdn.com/b/willy-peter_schaub (英語) から、Twitter は twitter.com\wpschaub (英語) からご覧いただけます。

この記事のレビューに協力してくれた技術スタッフの Vladimir GusarovBill HeysBijan JavidiZayd KaraVijay MachirajuRobert MacLeanRui Melo、および Patricia Wagner に心より感謝いたします。