特定のビルドを配置する

作成者: Jason Lee

このトピックでは、Web パッケージとデータベース スクリプトを、以前の特定のビルドからステージング環境や運用環境などの新しい移行先にデプロイする方法について説明します。

このトピックは、Fabrikam, Inc という架空の会社のエンタープライズ展開要件に基づく一連のチュートリアルの一部です。このチュートリアル シリーズでは、サンプル ソリューションである Contact Manager ソリューションを使用して、ASP.NET MVC 3 アプリケーション、Windows Communication Foundation (WCF) サービス、データベース プロジェクトなど、現実的なレベルの複雑さの Web アプリケーションを表します。

これらのチュートリアルの中心にある配置方法は、「プロジェクト ファイルの 理解」で説明されている分割プロジェクト ファイルのアプローチに基づいています。この方法では、ビルドと配置のプロセスが 2 つのプロジェクト ファイルによって制御されます。1 つは、すべての移行先環境に適用されるビルド命令を含み、もう 1 つは環境固有のビルドと配置設定を含みます。 ビルド時に、環境固有のプロジェクト ファイルが環境に依存しないプロジェクト ファイルにマージされ、ビルド手順の完全なセットが形成されます。

タスクの概要

これまで、このチュートリアル セットのトピックでは、単一ステップまたは自動プロセスの一部として Web アプリケーションとデータベースをビルド、パッケージ化、デプロイする方法に重点を置いてきた。 ただし、一般的なシナリオでは、ドロップ フォルダー内のビルドの一覧からデプロイするリソースを選択する必要があります。 つまり、最新のビルドがデプロイするビルドではない可能性があります。

前のトピック「 配置をサポートするビルド定義の作成」で説明した継続的インテグレーション (CI) シナリオについて考えてみましょう。 Team Foundation Server (TFS) 2010 でビルド定義を作成しました。 開発者が TFS にコードをチェックインするたびに、Team Build によってコードがビルドされ、ビルド プロセスの一部として Web パッケージとデータベース スクリプトが作成され、単体テストが実行され、リソースがテスト環境にデプロイされます。 ビルド定義の作成時に構成したアイテム保持ポリシーに応じて、TFS は特定の数の以前のビルドを保持します。

ビルド定義の作成時に構成したアイテム保持ポリシーに応じて、T F S は特定の数の以前のビルドを保持します。=======

次に、テスト環境でこれらのビルドのいずれかに対して検証と検証テストを実行し、ステージング環境にアプリケーションをデプロイする準備ができたとします。 それまでの間、開発者は新しいコードをチェックインしている可能性があります。 ソリューションをリビルドしてステージング環境にデプロイする必要がなく、最新のビルドをステージング環境にデプロイする必要はありません。 代わりに、テスト サーバーで検証および検証した特定のビルドをデプロイする必要があります。

これを実現するには、特定のビルドで生成された Web パッケージとデータベース スクリプトを見つける場所をMicrosoft Build Engine (MSBuild) に指示する必要があります。

OutputRoot プロパティのオーバーライド

サンプル ソリューションでは、Publish.proj ファイルによって OutputRoot という名前のプロパティが宣言されています。 名前が示すように、これはビルド プロセスによって生成されるすべてのものを含むルート フォルダーです。 Publish.proj ファイルでは、OutputRoot プロパティがすべてのデプロイ リソースのルートの場所を参照していることがわかります。

Note

OutputRoot は、一般的に使用されるプロパティ名です。 また、Visual C# および Visual Basic プロジェクト ファイルでは、このプロパティを宣言して、すべてのビルド出力のルートの場所を格納します。

<PropertyGroup>
  <!--This is where the .deploymanifest file will be written to during a build-->    
  <_DbDeployManifestPath>
    $(OutputRoot)ContactManager.Database.deploymanifest
  </_DbDeployManifestPath>    
  
  <!-- The folder where the .zip and .cmd file will be located for 
                ContactManager.Mvc Web project -->
  <_ContactManagerDest>
    $(OutputRoot)_PublishedWebsites\ContactManager.Mvc_Package\
  </_ContactManagerDest>
  
  <!-- The folder where the .zip and .cmd file will be located for 
                ContactManager.Service Web project -->
   <_ContactManagerSvcDest>
    $(OutputRoot)_PublishedWebsites\ContactManager.Service_Package\
  </_ContactManagerSvcDest>
  
  <!-- ... -->
</PropertyGroup>

プロジェクト ファイルで Web パッケージとデータベース スクリプトを別の場所 (以前の TFS ビルドの出力など) からデプロイする場合は、 OutputRoot プロパティをオーバーライドするだけで済みます。 プロパティの値は、Team Build サーバー上の関連するビルド フォルダーに設定する必要があります。 コマンド ラインから MSBuild を実行していた場合は、コマンド ライン引数として OutputRoot の値を指定できます。

msbuild.exe Publish.proj /p:TargetEnvPropsFile=EnvConfig\Env-Dev.proj 
  /p:OutputRoot=\\TFSBUILD\Drops\DeployToTest\DeployToTest_20120228.3\

ただし、実際には、ビルド ターゲットもスキップする必要があります。 ビルド 出力を使用する予定がない場合は、ソリューションをビルドする意味はありません。 これを行うには、コマンド ラインから実行するターゲットを指定します。

msbuild.exe Publish.proj /p:TargetEnvPropsFile=EnvConfig\Env-Dev.proj 
  /p:OutputRoot=\\TFSBUILD\Drops\DeployToTest\DeployToTest_20120228.3\
  /target:GatherPackagesForPublishing;PublishDBPackages;PublishWebPackages

ただし、ほとんどの場合、TFS ビルド定義にデプロイ ロジックをビルドする必要があります。 これにより、 キュー ビルド アクセス許可を持つユーザーは、TFS サーバーへの接続を使用して Visual Studio のインストールからデプロイをトリガーできます。

特定のビルドをデプロイするためのビルド定義の作成

次の手順では、ユーザーが 1 つのコマンドを使用してステージング環境へのデプロイをトリガーできるようにするビルド定義を作成する方法について説明します。

この場合、ビルド定義を実際にビルドする必要はありません。カスタム プロジェクト ファイルで配置ロジックを実行するだけです。 Publish.proj ファイルには、ファイルが Team Build で実行されている場合にビルド ターゲットをスキップする条件付きロジックが含まれています。 これを行うには、組み込みの BuildingInTeamBuild プロパティを評価します。これは、チーム ビルドでプロジェクト ファイルを実行すると自動的に true に設定されます。 その結果、ビルド プロセスをスキップし、単にプロジェクト ファイルを実行して既存のビルドをデプロイできます。

デプロイを手動でトリガーするビルド定義を作成するには

  1. Visual Studio 2010 の [チーム エクスプローラー] ウィンドウで、チーム プロジェクト ノードを展開し、[ビルド] を右クリックし、[新しいビルド定義] をクリックします。

    Visual Studio 2010 の [チーム エクスプローラー] ウィンドウで、チーム プロジェクト ノードを展開し、[ビルド] を右クリックし、[新しいビルド定義] をクリックします。

  2. [ 全般 ] タブで、ビルド定義に名前 ( DeployToStaging など) と説明 (省略可能) を指定します。

  3. [ トリガー ] タブで、[ 手動 - チェックイン] を選択すると、新しいビルドがトリガーされません

  4. [ ビルドの既定値 ] タブの [ ビルド出力を次のドロップ フォルダーにコピー する] ボックスに、ドロップ フォルダーの汎用名前付け規則 (UNC) パス ( \TFSBUILD\Drops など) を入力します。

    [ビルドの既定値] タブの [ビルド出力を次のドロップ フォルダーにコピーする] ボックスに、ドロップ フォルダーのユニバーサル名前付け規則 (U N C) パス (\TFSBUILD\Drops など) を入力します。

  5. [ プロセス ] タブの [ ビルド プロセス ファイル ] ドロップダウン リストで、[ DefaultTemplate.xaml] を選択したままにします。 これは、すべての新しいチーム プロジェクトに追加される既定のビルド プロセス テンプレートの 1 つです。

  6. [ ビルド プロセス パラメーター ] テーブルで、[ ビルドする項目 ] 行をクリックし、 省略記号 ボタンをクリックします。

    [ビルド プロセス パラメーター] テーブルで、[ビルドする項目] 行をクリックし、省略記号ボタンをクリックします。

  7. [ ビルドする項目 ] ダイアログ ボックスで、[ 追加] をクリックします。

  8. [ 種類の項目] ドロップダウン リストで、[ MSBuild プロジェクト ファイル] を選択します。

  9. 配置プロセスを制御するカスタム プロジェクト ファイルの場所を参照し、ファイルを選択して、[OK] をクリック します

    配置プロセスを制御するカスタム プロジェクト ファイルの場所を参照し、ファイルを選択して、[OK] をクリックします。

  10. [ ビルドする項目 ] ダイアログ ボックスで、[ OK] をクリックします。

  11. [ ビルド プロセス パラメーター ] テーブルで、[ 詳細設定 ] セクションを展開します。

  12. [ MSBuild 引数] 行で、環境固有のプロジェクト ファイルの場所を指定し、ビルド フォルダーの場所のプレースホルダーを追加します。

    /p:TargetEnvPropsFile=EnvConfig\Env-Stage.proj;
    OutputRoot=PLACEHOLDER
    

    [MSBuild 引数] 行で、環境固有のプロジェクト ファイルの場所を指定し、ビルド フォルダーの場所のプレースホルダーを追加します。

    Note

    ビルドをキューに入れるたびに OutputRoot 値をオーバーライドする必要があります。 これについては、次の手順で説明します。

  13. [保存] をクリックします。

ビルドをトリガーするときは、デプロイするビルドを指す OutputRoot プロパティを更新する必要があります。

ビルド定義から特定のビルドをデプロイするには

  1. [チーム エクスプローラー] ウィンドウで、ビルド定義を右クリックし、[新しいビルドのキュー] をクリックします。

    [チーム エクスプローラー] ウィンドウで、ビルド定義を右クリックし、[新しいビルドのキュー] をクリックします。

  2. [ キューのビルド ] ダイアログ ボックスの [ パラメーター ] タブで、[ 詳細設定 ] セクションを展開します。

  3. [ MSBuild 引数] 行で、 OutputRoot プロパティの値をビルド フォルダーの場所に置き換えます。 次に例を示します。

    /p:TargetEnvPropsFile=EnvConfig\Env-Stage.proj;
       OutputRoot=\\TFSBUILD\Drops\DeployToTest\DeployToTest_20120228.3\
    

    [MSBuild 引数] 行で、OutputRoot プロパティの値をビルド フォルダーの場所に置き換えます。

    Note

    ビルド フォルダーへのパスの末尾に末尾のスラッシュを含めるようにしてください。

  4. [ キュー] をクリックします。

ビルドをキューに入れると、プロジェクト ファイルは OutputRoot プロパティで指定したビルド ドロップ フォルダーからデータベース スクリプトと Web パッケージをデプロイします。

まとめ

このトピックでは、分割プロジェクト ファイル配置モデルを使用して、特定の以前のビルドから Web パッケージやデータベース スクリプトなどのデプロイ リソースを発行する方法について説明しました。 OutputRoot プロパティをオーバーライドする方法と、TFS ビルド定義にデプロイ ロジックを組み込む方法について説明しました。

もっと読む

ビルド定義の作成の詳細については、「 基本的なビルド定義を作成 する」および「ビルド プロセスを定義する」を参照してください。 ビルドのキューに関する詳細なガイダンスについては、「ビルド をキューに登録する」を参照してください。