次の方法で共有


Lab Management ワークフローのカスタマイズ

更新 : 2010 年 10 月

Visual Studio Lab Management のエンド ツー エンドのワークフローを使用して、アプリケーションのビルド、仮想環境への新しいビルドの配置、および新しいビルドでのテストの実行を行うことができます。 既定のワークフロー テンプレートとして、すぐに使用できる LabDefaultTemplate が付属しています。 LabDefaultTemplate の使用方法の詳細については、「方法: アプリケーションを仮想環境に配置する」を参照してください。 ただし、ビルド、配置、およびテスト (BDT: Build-Deploy-Test) プロセスは、さまざまな要件によって若干異なることがあります。 たとえば、通常のビルドの場所からテスト バイナリをコピーする必要があるワークフローもあれば、一時的な場所からテスト バイナリをコピーする必要のあるワークフローもあります。 また、ライブラリに環境を保存して各テスト担当者がそこから配置できるようにする必要がある場合もあれば、環境を保存する必要のない場合もあります。 既定のワークフロー テンプレートは Windows Workflow 4.0 に基づいており、完全に拡張およびカスタマイズ可能であるため、LabDefaultTemplate を固有の要件に合わせてカスタマイズできます。

ここでは、ワークフロー テンプレートのカスタマイズに関する一般的な手順を説明し、カスタマイズが役に立つ次の 5 つのシナリオ例を取り上げます。

  • ビルドの場所以外のテスト バイナリの場所を指定する。

  • インストール後に再起動が必要となるアプリケーションの配置をサポートする。

  • ソース管理ファイルを読み取る。

  • ビルド エージェント アカウントを使用してビルドの格納場所にアクセスする。

  • ラボ サービス アカウントを使用して他の場所にアクセスする。

ワークフローのカスタマイズの基本概念

ワークフローのカスタマイズに必要な次の 3 つの主要な概念があります。

  • テンプレート テンプレートは、ワークフローの一部としてアクティビティまたは手順のシーケンスを定義します。 テンプレートは Windows Workflow Foundation 4.0 に基づいており、ソース管理に .xaml ファイルとして格納されます。 テンプレートをワークフロー エディターに読み込むには、.xaml ファイルをダブルクリックします。 エディターでは、ワークフローを決定するさまざまなアクティビティやシーケンスを参照できます。 この場合、他のプログラミング言語と同様に、さまざまなスコープ、条件付きロジック、ループなどで変数を使用してテンプレートをプログラミングできます。 Windows Workflow Foundation では、ニーズに合わせてラボの既定のテンプレートをカスタマイズできます。

  • アクティビティ アクティビティは、ワークフローのビルド ブロックであり、ラボの既定のテンプレートでは多くのアクティビティを使用します。 ツールボックス[Team Foundation Lab Management のアクティビティ] という見出しの下には、追加のアクティビティが表示されます。 ワークフローでアクティビティを使用するには、アクティビティをツールボックスから Visual Studio ワークフロー エディターまたはテンプレート内の適切な場所にドラッグします。 アクティビティのプロパティを参照すると、入力パラメーターと出力パラメーターを確認できます。 各 Lab Management アクティビティについては、「Team Foundation Lab Management のアクティビティ」を参照してください。 製品に付属するアクティビティが要件に合わない場合は、新しいアクティビティを作成できます。

  • 引数 ユーザーから取得する必要のある入力について新しい入力引数を作成し、これらの値をアクティビティに渡すことができます。 ワークフロー エディター ウィンドウの下部にある [引数] タブをクリックすると、既存の引数が表示されます。 新しい引数を作成すると、ビルド定義の [プロセス] タブの [ビルド プロセス パラメーター] セクションにそれらの引数が表示されます。

これらの概念について、カスタマイズが必要な次の 2 つの例を取り上げて考えてみます。 最初の例では、テンプレート内の既存のアクティビティの入力引数を変更する方法について説明し、2 つ目の例ではツールボックスから新しいアクティビティを追加する方法について説明します。 これらの例では、要件に従って LabDefaultTemplate をカスタマイズするための十分なコンテキストを提供します。

カスタマイズを開始する前に

LabDefaultTemplate ワークフロー テンプレートのカスタマイズを開始する前に、いくつかの一般的な手順を実行する必要があります。 これらの手順を次の図に示します。

既定のワークフロー テンプレートのフォルダー位置

カスタマイズの準備をするには

  1. チーム エクスプローラーで、チーム プロジェクトの [ソース管理] ノードをダブルクリックします。

  2. ソース管理エクスプローラーのソース管理ツリーを展開し、$/<Project_Name>/BuildProcessTemplates フォルダーを見つけます。

  3. このフォルダーを C:\Sources などのローカル フォルダーにマップします。

  4. LabDefaultTemplate.xaml ファイルを右クリックし、[最新バージョンの取得] をクリックします。

  5. LabDefaultTemplate.xaml ファイルのコピーを作成し、そのコピーに LabDefaultTemplate_customize.xaml などの新しい名前を付けます。

  6. この新しいファイルをソース管理に追加します。

  7. この新しいファイルをダブルクリックします。 ファイルが Visual Studio ワークフロー エディターで開きます。

次に、作成した既定のワークフロー テンプレートのコピーをカスタマイズします。

ビルドの格納場所以外のテスト バイナリの場所を指定するためのカスタマイズ

既定のワークフロー テンプレートである LabDefaultTemplate は、テスト バイナリの場所が、ビルドが格納されている場所と同じであることを前提にしています。 ただし、場合によっては、テスト コードが製品コードと同じ場所にビルドされないこともあります。 この場合は、テスト バイナリが別の場所から選択されるようにテンプレートをカスタマイズできます。 このカスタマイズでは、次の図に示す 3 つの手順を実行します。

ツールボックスからの LabManagement アクティビティのドラッグ

テスト バイナリ パスを指定するためのワークフロー入力引数の定義

入力引数を定義するには

  1. ワークフロー エディター ウィンドウの下部にある [引数] タブをクリックします。

  2. [引数の作成] をクリックします。 テキスト ボックスに引数の名前を入力します。たとえば、「TestBinariesLocation」とします。 [方向] ボックスの [入力] をクリックします。 [Argument type] (引数の型) ボックスの [String] をクリックします。

ExecuteRemoteTestRun アクティビティへの引数値の受け渡し

このアクティビティでは、リモートのテストの実行を作成し、テストの実行が完了するまで待機した後に、テストの実行の統計情報でビルド情報を更新します。

引数値を渡すには

  1. ワークフロー エディターで、[テストの実行] アクティビティまでスクロールします。 アクティビティの表示名は "テストの実行" ですが、アクティビティの種類は ExecuteRemoteTestRun になります。

  2. アクティビティを右クリックし、[プロパティ] をクリックします。 右下隅に [プロパティ] ウィンドウが開き、このアクティビティの入力引数と出力引数が表示されます。 このアクティビティの入力引数の 1 つは TestDirectory で、テスト バイナリの場所のパスを設定します。

  3. [プロパティ] ウィンドウで、[TestDirectory] をクリックします。 行の終わりにある省略記号 (...) をクリックします。

  4. 式エディターで、「TestBinariesLocation」と入力し、[OK] をクリックします。

  5. [ファイル] メニューの [LabDefaultTemplate_customize.xaml の保存] をクリックします。

  6. ソース管理エクスプローラーのメニュー バーで、[チェックイン] アイコンをクリックします。

これで、カスタマイズされた .xaml ファイルを使用して、新しいビルド定義を作成できます。 新しい入力引数 TestBinariesLocation がビルド定義の [プロセス] タブの [その他] セクションに表示され、ここで値を割り当てることができます。

配置後にマシンの再起動が必要なアプリケーション インストーラーをサポートするためのカスタマイズ

既定のワークフロー テンプレートである LabDefaultTemplate は、アプリケーションの配置後に仮想環境を再起動しません。 配置後に再起動が必要なアプリケーションをサポートするようにテンプレートをカスタマイズできます。 仮想環境にアプリケーションを手動で配置した場合は、アプリケーションがインストールされている仮想マシンのみを再起動します。 Visual Studio Lab Management は、環境内の個々の仮想マシンの操作をサポートしていません。 したがって、1 つの仮想マシンを再起動するには、仮想環境内のすべての仮想マシンを再起動する必要があります。

ヒント

配置スクリプトで仮想マシンを再起動しないようにしてください。 配置スクリプトで仮想マシンが再起動されると、配置スクリプトを実行しているビルド エージェントは、ビルド コントローラーとの接続を失い、ワークフローが停止する可能性があります。

新しいビルドの配置後に仮想マシンを再起動するには、3 つのアクティビティを LabDefaultTemplate に追加する必要があります。

  1. 環境の停止

  2. 環境の開始

  3. 他のワークフローの処理を続行する前に仮想マシンが起動するまで待機

環境の停止

環境の停止アクティビティを既定のワークフロー テンプレートに追加するには、ツールボックスから StopLabEnvironment アクティビティをワークフロー テンプレートにドラッグし、アクティビティの変数を初期化します。

環境を停止するには

  1. ワークフロー エディターで、表示名が [アプリケーションの配置成功] のアクティビティまでスクロールします。

  2. [表示] メニューの [ツールボックス] をクリックします。 左側にツールボックスが表示され、Team Foundation ビルドのアクティビティが一覧表示されます。 Team Foundation Lab Management のアクティビティの一覧が表示されるまで、アクティビティのリストをスクロールします。

  3. ツールボックスで、[StopLabEnvironment] アクティビティをクリックします。 ワークフロー エディターにそのアクティビティをドラッグし、[アプリケーションの配置成功] アクティビティの前に配置します。

  4. アクティビティを右クリックし、[プロパティ] をクリックします。 [プロパティ] ウィンドウに、このアクティビティの入力引数と出力引数が表示されます。 環境の URI を表す LabEnvironmentUri という名前の変数が、ワークフローに既に存在することを確認します。

  5. [変数] タブをクリックします。 変数の一覧が表示されます。

  6. [LabEnvironmentUri] 行の [既定] 列で、[VB の式を入力してください] をダブルクリックします。 テキスト ボックスに、「LabEnvironmentUri」と入力します。 エディターには、パラメーターの既存の使用が表示され、入力せずに一覧から値を選択できます。

環境の開始

環境の開始アクティビティを既定のワークフロー テンプレートに追加するには、ツールボックスから [StartLabEnvironment] アクティビティをワークフロー テンプレートにドラッグし、アクティビティの変数を初期化します。

環境を開始するには

  1. ツールボックスで、[StartLabEnvironment] アクティビティをクリックします。 ワークフロー エディターにそのアクティビティをドラッグし、[アプリケーションの配置成功] アクティビティの前、ただし [StopLabEnvironment] アクティビティの後に配置します。

  2. アクティビティを右クリックし、[プロパティ] をクリックします。 [プロパティ] ウィンドウに、このアクティビティの入力引数と出力引数が表示されます。 ここでも、環境の URI を参照する LabEnvironmentUri という名前の変数が、ワークフローに既に存在することを確認してください。

    [変数] タブをクリックします。 変数の一覧が表示されます。

    [LabEnvironmentUri] 行の [既定] 列で、[VB の式を入力してください] をダブルクリックします。 テキスト ボックスに、「LabEnvironmentUri」と入力します。 エディターには、パラメーターの既存の使用が表示され、入力せずに一覧から値を選択できます。

他のワークフローの処理を続行する前に仮想マシンが起動するまで待機

仮想マシンが起動するまでの待機時間を追加するには、ツールボックスから [Delay] アクティビティをワークフロー テンプレートにドラッグし、アクティビティの変数を初期化します。 このアクティビティは、ツールボックス[プリミティブ] タブにあります。

仮想マシンの起動を待機するには

  1. ツールボックスで、[プリミティブ] タブをクリックします。

  2. [Delay] アクティビティをクリックします。 ワークフロー エディターにそのアクティビティをドラッグし、[アプリケーションの配置成功] アクティビティの前、ただし [StartLabEnvironment] アクティビティの後に配置します。

  3. アクティビティを右クリックし、[プロパティ] をクリックします。 [プロパティ] ウィンドウに、このアクティビティの入力引数と出力引数が表示されます。 ワークフローには、待機時間を表す Duration という名前の変数が既にあります。

  4. [プロパティ] ウィンドウで、[Duration] をクリックし、省略記号 (...) をクリックします。

  5. 式エディターで、待機時間 (たとえば 10 分) を「TimeSpan.FromMinutes(10)」という形式で入力します。

このテンプレートを変更したら、ソース管理にチェックインし、そのテンプレートを使用して、インストール後に再起動が必要となるアプリケーションを配置する新しいビルド定義を作成します。

ソース管理ファイルを読み取るためのカスタマイズ

カスタム アクティビティを作成し、それらのアクティビティをワークフロー テンプレートで使用する場合は、ラボ サービス アカウントを使って通信するビルド エージェントがそれらのアクティビティにアクセスできるか確認します。 これらのアクティビティはカスタム アセンブリとしてソース管理システムにチェックインする必要があるため、ラボ サービス アカウントに、カスタム アセンブリがチェックインされるパスを読み取るためのアクセス許可があるか確認する必要があります。 ラボ サービス アカウントの詳細については、「方法: テストおよびワークフローの統合用のサービス アカウントを構成する」を参照してください。ラボ サービス アカウントにアクセス許可を付与するには、tf permissions コマンドを使用します。 たとえば、ラボ サービス アカウント mydomain\labAccount にパス $/MyProject/CustomAssemblies での読み取りアクセス許可を付与するには、次のようなコマンドを実行します。C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE>tf permission /user:mydomain\labAccount /collection:http://aseemb-tfs10: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" />

参照

参照

A Developer's Introduction to Windows Workflow Foundation (WF) in .NET 4 (開発者向け .NET 4 の Windows Workflow Foundation (WF) 入門)

その他の技術情報

Team Foundation Lab Management のアクティビティ

アプリケーションのライフサイクルでの仮想ラボの使用

ビルド処理の定義

基本的なビルド定義の作成

履歴の変更

日付

履歴

理由

2010 年 10 月

ワークフローをカスタマイズするときのいくつかの手順を示す 2 つの例を追加しました。

情報の拡充