Lab Management ワークフローのカスタマイズ
アプリケーションをビルド、ラボ環境に新しいビルドの新しいビルドの配置、およびテストの実行の自動化にラボ環境を持つラボの既定のテンプレート (LabDefaultTemplate) を使用できます。ラボの既定のテンプレートを使用する方法の詳細については、方法: SCVMM 環境のビルド、配置、およびテストのワークフローを作成する と 方法: 標準環境のビルド、配置、およびテストのワークフローを作成するを参照してください。ただし、各ビルド、配置、およびテストのプロセスはさまざまな条件では多少異なる場合があります。たとえば、通常のビルドの場所からテスト バイナリをコピーする必要があるワークフローもあれば、一時的な場所からテスト バイナリをコピーする必要のあるワークフローもあります。または 1 ワークフローがあるワークフローもラボ環境は決して保存してラボ環境が SCVMM ライブラリに保存されるようにしたがって、テスト担当者がこれを配置できる必要な場合があります。ラボの既定のテンプレートは Windows Workflow 4.0 に基づいており、完全に拡張およびカスタマイズ可能なので、自分の特定の要件を満たすために、LabDefaultTemplate をカスタマイズできます。このトピックでは、ラボの既定のテンプレートをカスタマイズするための一般的な手順について説明します。
要件
- Visual Studio Ultimate, Visual Studio Premium, 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 台のコンピューターを再起動すると、ラボ環境内のすべてのコンピューターを再起動する必要があります。
注意 |
---|
配置スクリプトはマシンを再起動しないことを確認します。配置スクリプトで仮想マシンが再起動されると、配置スクリプトを実行しているビルド エージェントは、ビルド コントローラーとの接続を失い、ワークフローが停止する可能性があります。 |
配置後に仮想マシンを再起動して、新しいビルド LabDefaultTemplate に 3 個のアクティビティの追加が必要です:
環境の停止
環境の開始
他のワークフローの処理を続行する前に仮想マシンが起動するまで待機
環境の停止
環境の停止アクティビティを既定のワークフロー テンプレートに追加するには、ツールボックスから 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 という名前の変数が既にあります。
[プロパティ] ペインで、[期間] を選択し、省略記号 (…) をクリックします。
式エディターで、待機時間 (たとえば 10 分) を「TimeSpan.FromMinutes(10)」という形式で入力します。
このテンプレートを変更したら、ソース管理にチェックインし、そのテンプレートを使用して、インストール後に再起動が必要となるアプリケーションを配置する新しいビルド定義を作成します。
ソース管理ファイルを読み取るためのカスタマイズ
カスタム アクティビティを作成し、ワークフロー テンプレートで使用する場合は、ラボ サービス アカウントを使用して通信するビルド エージェントがそれらのアクティビティにアクセスできることを確認します。これらのアクティビティはカスタム アセンブリとしてソース管理システムにチェックインする必要があるため、ラボ サービス アカウントに、カスタム アセンブリがチェックインされるパスを読み取るためのアクセス許可があるか確認する必要があります。ラボ サービス アカウントの詳細については、「方法: ラボ サービス アカウントを構成する」を参照してください。ラボ サービス アカウントにアクセス許可を付与するには、tf permissions コマンドを使用します。たとえば、ラボ サービス アカウント mydomain\labAccount にパス $/MyProject/CustomAssemblies での読み取りアクセス許可を付与するには、次のようなコマンドを実行します。C:\Program Files\Microsoft Visual Studio 11.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" />