Lab Management ワークフローのカスタマイズ
発行: 2016年7月
ラボ環境で既定のテンプレート (LabDefaultTemplate) を使用して、アプリケーションをビルド、ラボ環境への新しいビルドの配置、および新しいビルドのテストの実行を自動化できます。 ラボの既定のテンプレートを使用する方法については、「SCVMM 環境のビルド、配置、およびテストのワークフローを作成する」と「標準環境のビルド、配置、およびテストのワークフローを作成する」を参照してください。 ただし、ビルド、配置、およびテストの各プロセスは、さまざまな要件によって若干異なることがあります。 たとえば、通常のビルドの場所からテスト バイナリをコピーする必要があるワークフローもあれば、一時的な場所からテスト バイナリをコピーする必要のあるワークフローもあります。 また、SCVMM ライブラリにラボ環境を保存してテスト担当者がそれを配置できるようにする必要がある場合もあれば、ラボ環境を保存する必要のない場合もあります。 ラボの既定のテンプレートは Windows Workflow 4.0 に基づいており、完全に拡張およびカスタマイズ可能であるため、LabDefaultTemplate を固有の要件に合わせてカスタマイズできます。 このトピックでは、ラボの既定のテンプレートをカスタマイズするための一般的な手順について説明します。
必要条件
- Visual Studio Enterprise, Visual Studio Test Professional
次に、ラボの既定のテンプレートのカスタマイズが便利な場合のシナリオを示します。
ビルドの格納場所以外のテスト バイナリの場所を指定するためのカスタマイズ
配置後にマシンの再起動が必要なアプリケーション インストーラーをサポートするためのカスタマイズ
ソース管理ファイルを読み取るためのカスタマイズ
ビルド エージェント アカウントを使用してビルドの格納場所にアクセスするためのカスタマイズ
ラボ サービス アカウントを使用して他の場所にアクセスするためのカスタマイズ
ワークフローのカスタマイズの基本概念
ワークフローのカスタマイズに必要な次の 3 つの主要な概念があります。
テンプレート テンプレートは、ワークフローの一部としてアクティビティまたは手順のシーケンスを定義します。 テンプレートは Windows Workflow Foundation 4.0 に基づいており、ソース管理に .xaml ファイルとして格納されます。 テンプレートをワークフロー エディターに読み込むには、.xaml ファイルをダブルクリックします。 エディターでは、ワークフローを決定するさまざまなアクティビティやシーケンスを参照できます。 この場合、他のプログラミング言語と同様に、さまざまなスコープ、条件付きロジック、ループなどで変数を使用してテンプレートをプログラミングできます。 Windows Workflow Foundation では、ニーズに合わせてラボの既定のテンプレートをカスタマイズできます。
アクティビティ アクティビティは、ワークフローのビルド ブロックであり、ラボの既定のテンプレートでは多くのアクティビティを使用します。 ツールボックスの [Team Foundation Lab Management のアクティビティ] という見出しの下には、追加のアクティビティが表示されます。 ワークフローでアクティビティを使用するには、アクティビティをツールボックスから Visual Studio ワークフロー エディターまたはテンプレート内の適切な場所にドラッグします。 アクティビティのプロパティを参照すると、入力パラメーターと出力パラメーターを確認できます。 各 Lab Management の利用状況に関する詳細については、「Lab Management ワークフロー アクティビティ」を参照してください。 製品に付属するアクティビティが要件に合わない場合は、新しいアクティビティを作成できます。
引数 ユーザーから取得する必要のある入力について新しい入力引数を作成し、これらの値をアクティビティに渡すことができます。 ワークフロー エディター ウィンドウの下部にある [引数] タブをクリックすると、既存の引数が表示されます。 新しい引数を作成すると、ビルド定義の [プロセス] タブの [ビルド プロセス パラメーター] セクションにそれらの引数が表示されます。
これらの概念について、カスタマイズが必要な次の 2 つの例を取り上げて考えてみます。 最初の例では、テンプレート内の既存のアクティビティの入力引数を変更する方法について説明し、2 つ目の例ではツールボックスから新しいアクティビティを追加する方法について説明します。 これらの例では、要件に従ってラボの既定のテンプレートをカスタマイズするための十分なコンテキストを提供します。
カスタマイズを開始する前に
ラボの既定のテンプレートのカスタマイズを開始する前に、いくつかの一般的な手順を実行する必要があります。 これらの手順を次の図に示します。
カスタマイズの準備をするには
チーム エクスプローラーで、チーム プロジェクトの [ソース管理] ノードをダブルクリックします。
ソース管理エクスプローラーのソース管理ツリーを展開し、$/<Project_Name>/BuildProcessTemplates フォルダーを見つけます。
このフォルダーを C:\Sources などのローカル フォルダーにマップします。
LabDefaultTemplate.11.xaml ファイルを右クリックし、[最新バージョンの取得] をクリックします。
LabDefaultTemplate.11.xaml ファイルのコピーを作成し、そのコピーに LabDefaultTemplate_customize.11.xaml などの新しい名前を付けます。
この新しいファイルをソース管理に追加します。
この新しいファイルをダブルクリックします。 ファイルが Visual Studio ワークフロー エディターで開きます。
次に、作成したラボの既定のテンプレートのコピーをカスタマイズします。
ビルドの格納場所以外のテスト バイナリの場所を指定するためのカスタマイズ
既定のワークフロー テンプレートである LabDefaultTemplate は、テスト バイナリの場所が、ビルドが格納されている場所と同じであることを前提にしています。 ただし、場合によっては、テスト コードが製品コードと同じ場所にビルドされないこともあります。 この場合は、テスト バイナリが別の場所から選択されるようにテンプレートをカスタマイズできます。 このカスタマイズでは、次の図に示す 3 つの手順を実行します。
テスト バイナリ パスを指定するためのワークフロー入力引数の定義
入力引数を定義するには
ワークフロー エディター ウィンドウの下部にある [引数] タブをクリックします。
[引数の作成] をクリックします。 テキスト ボックスに引数の名前を入力します。たとえば、「TestBinariesLocation」とします。 [方向] ボックスで [入力] をクリックします。 [引数の型] ボックスで [文字列] をクリックします。
ExecuteRemoteTestRun アクティビティへの引数値の受け渡し
このアクティビティでは、リモートのテストの実行を作成し、テストの実行が完了するまで待機した後に、テストの実行の統計情報でビルド情報を更新します。
引数値を渡すには
ワークフロー エディターで、[テストの実行] アクティビティまでスクロールします。 アクティビティの表示名は "テストの実行" ですが、アクティビティの種類は ExecuteRemoteTestRun になります。
アクティビティを右クリックし、[プロパティ] をクリックします。 右下隅に [プロパティ] ウィンドウが開き、このアクティビティの入力引数と出力引数が表示されます。 このアクティビティの入力引数の 1 つは TestDirectory で、テスト バイナリの場所のパスを設定します。
[プロパティ] ウィンドウで、[TestDirectory] をクリックします。 行の終わりにある省略記号 (...) をクリックします。
[式エディター] で、「TestBinariesLocation」と入力し、[OK] をクリックします。
[ファイル] メニューの [LabDefaultTemplate_customize.11.xaml の保存] をクリックします。
ソース管理エクスプローラーのメニュー バーで、[チェックイン] アイコンをクリックします。
これで、カスタマイズされた .xaml ファイルを使用して、新しいビルド定義を作成できます。 新しい入力引数 TestBinariesLocation がビルド定義の [プロセス] タブの [その他] セクションに表示され、ここで値を割り当てることができます。
配置後にマシンの再起動が必要なアプリケーション インストーラーをサポートするためのカスタマイズ
ラボの既定のテンプレートは、アプリケーションの配置後にラボ環境を再開しません。 配置後に再起動が必要なアプリケーションをサポートするようにテンプレートをカスタマイズできます。 ラボ環境にアプリケーションを手動で配置した場合は、アプリケーションがインストールされているコンピューターのみを再起動します。 Visual Studio Lab Management は、環境内の仮想マシンの操作をサポートしていません。 したがって、1 つのコンピューターを再起動するには、ラボ環境内のすべてのコンピューターを再起動する必要があります。
警告
配置スクリプトでコンピューターを再起動しないようにしてください。配置スクリプトで仮想マシンが再起動されると、配置スクリプトを実行しているビルド エージェントは、ビルド コントローラーとの接続を失い、ワークフローが停止する可能性があります。
新しいビルドの配置後に仮想マシンを再起動するには、3 つのアクティビティを LabDefaultTemplate に追加する必要があります。
環境の停止
環境の開始
他のワークフローの処理を続行する前に仮想マシンが起動するまで待機
環境の停止
環境の停止アクティビティを既定のワークフロー テンプレートに追加するには、ツールボックスから StopLabEnvironment アクティビティをワークフロー テンプレートにドラッグし、アクティビティの変数を初期化します。
環境を停止するには
ワークフロー エディターで、表示名が [アプリケーションの配置成功] のアクティビティまでスクロールします。
[表示] メニューの [ツールボックス] をクリックします。 左側にツールボックスが表示され、Team Foundation ビルドのアクティビティが一覧表示されます。 Team Foundation Lab Management のアクティビティの一覧が表示されるまで、アクティビティのリストをスクロールします。
ツールボックスで、[StopLabEnvironment] アクティビティをクリックします。 ワークフロー エディターにそのアクティビティをドラッグし、[アプリケーションの配置成功] アクティビティの前に配置します。
アクティビティを右クリックし、[プロパティ] をクリックします。 [プロパティ] ウィンドウに、このアクティビティの入力引数と出力引数が表示されます。 環境の URI を表す LabEnvironmentUri という名前の変数が、ワークフローに既に存在することを確認します。
[変数] タブをクリックします。 変数の一覧が表示されます。
[LabEnvironmentUri] 行の [既定] 列で、[VB の式を入力してください] をダブルクリックします。 テキスト ボックスに、「LabEnvironmentUri」と入力します。 エディターには、パラメーターの既存の使用が表示され、入力せずに一覧から値を選択できます。
環境の開始
環境の開始アクティビティをラボの既定のテンプレートに追加するには、ツールボックスから [StartLabEnvironment] アクティビティをワークフロー テンプレートにドラッグし、アクティビティの変数を初期化します。
環境を開始するには
ツールボックスで、[StartLabEnvironment] アクティビティをクリックします。 ワークフロー エディターにそのアクティビティをドラッグし、[アプリケーションの配置成功] アクティビティの前、ただし [StopLabEnvironment] アクティビティの後に配置します。
アクティビティを右クリックし、[プロパティ] をクリックします。 [プロパティ] ウィンドウに、このアクティビティの入力引数と出力引数が表示されます。 ここでも、環境の URI を参照する LabEnvironmentUri という名前の変数が、ワークフローに既に存在することを確認してください。
[変数] タブをクリックします。 変数の一覧が表示されます。
[LabEnvironmentUri] 行の [既定] 列で、[VB の式を入力してください] をダブルクリックします。 テキスト ボックスに、「LabEnvironmentUri」と入力します。 エディターには、パラメーターの既存の使用が表示され、入力せずに一覧から値を選択できます。
他のワークフローの処理を続行する前に仮想マシンが起動するまで待機
仮想マシンが起動するまでの待機時間を追加するには、ツールボックスから [Delay] アクティビティをワークフロー テンプレートにドラッグし、アクティビティの変数を初期化します。 このアクティビティは、ツールボックスの [プリミティブ] タブにあります。
仮想マシンの起動を待機するには
ツールボックスで、[プリミティブ] タブをクリックします。
[Delay] アクティビティをクリックします。 ワークフロー エディターにそのアクティビティをドラッグし、[アプリケーションの配置成功] アクティビティの前、ただし [StartLabEnvironment] アクティビティの後に配置します。
アクティビティを右クリックし、[プロパティ] をクリックします。 [プロパティ] ウィンドウに、このアクティビティの入力引数と出力引数が表示されます。 ワークフローには、待機時間を表す Duration という名前の変数が既にあります。
[プロパティ] ウィンドウで、[Duration] を選択して、省略記号 (...) をクリックします。
式エディターで、待機時間 (たとえば 10 分) を「TimeSpan.FromMinutes(10)」という形式で入力します。
このテンプレートを変更したら、ソース管理にチェックインし、そのテンプレートを使用して、インストール後に再起動が必要となるアプリケーションを配置する新しいビルド定義を作成します。
ソース管理ファイルを読み取るためのカスタマイズ
カスタム アクティビティを作成し、それらのアクティビティをワークフロー テンプレートで使用する場合は、ラボ サービス アカウントを使って通信するビルド エージェントがそれらのアクティビティにアクセスできるか確認します。 これらのアクティビティはカスタム アセンブリとしてソース管理システムにチェックインする必要があるため、ラボ サービス アカウントに、カスタム アセンブリがチェックインされるパスを読み取るためのアクセス許可があるか確認する必要があります。 ラボ サービス アカウントの詳細については、「方法: ラボ サービス アカウントを構成する」を参照してください。tf permissions コマンドを使用して、ラボ サービス アカウントにアクセス許可を付与することができます。 たとえば、ラボ サービス アカウント mydomain\labAccount にパス $/MyProject/CustomAssemblies での読み取りアクセス許可を付与するには、次のようなコマンドを実行します。C:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE>tf permission /user:mydomain\labAccount /collection:http://aseemb-tfs11:8080/tfs/Collection0 /allow:read $/MyProject/CustomAssemblies
ビルド エージェント アカウントを使用してビルドの格納場所にアクセスするためのカスタマイズ
ラボのワークフローを実行するビルド エージェントは、ラボ サービス アカウントを使用してビルドの格納場所にアクセスします。 ビルド エージェントでビルド エージェント アカウントを使用するようにするには、ラボの既定のテンプレートをカスタマイズします。 テンプレートで、配置スクリプトを実行するアクティビティ RunDeploymentScript を見つけます。 このアクティビティは、ラボ サービス アカウントを使用してアクセスする場所を定義する SharedLocationForNetUse プロパティを公開します。 <mtlwa:RunDeploymentScript DisplayName="Running Deployment Script" ScriptDetails="[scriptDetails]" ThrowOnError="True" SharedLocationForNetUse="[BuildLocation]" />ラボ サービス アカウントではなく、ビルド エージェント アカウントで格納場所にアクセスするには、テンプレートからこのプロパティを削除するか、次の例に示すようにこのプロパティの値を null ({x:Null}) に設定します。mtlwa:RunDeploymentScript DisplayName="Running Deployment Script" ScriptDetails="[scriptDetails]" ThrowOnError="True" SharedLocationForNetUse="{x:Null}" />
ラボ サービス アカウントを使用して他の場所にアクセスするためのカスタマイズ
ラボ サービス アカウントで実行されているビルド エージェントからビルドの格納場所以外の他の場所を読み取る必要がある場合は、SharedLocationForNetUse プロパティの値を既定値の [BuildLocation] から目的の場所に変更します。 たとえば、ラボ サービス アカウントで実行されているビルド エージェントから \\contoso\scripts ディレクトリにアクセスする場合は、次のようにする必要があります。 <mtlwa:RunDeploymentScript DisplayName="Running Deployment Script" ScriptDetails="[scriptDetails]" ThrowOnError="True" SharedLocationForNetUse="\\contoso\scripts" />
参照
Lab Management ワークフロー アクティビティ
アプリケーションのライフサイクルでのラボ環境の使用
ビルド プロセスの定義
ビルド定義の作成または編集
開発者向け .NET 4 の Windows Workflow Foundation (WF) 入門