配置コマンド ファイルを作成し、実行する
作成者: Jason Lee
このトピックでは、Microsoft Build Engine (MSBuild) プロジェクト ファイルを単一手順の反復可能なプロセスとして使用して配置を実行できるようにするコマンド ファイルをビルドする方法について説明します。
このトピックは、Fabrikam, Inc. という架空の会社のエンタープライズ配置要件を題材にしたチュートリアル シリーズの一部です。このシリーズでは、サンプル ソリューション (連絡先マネージャー ソリューション) を使用して、現実的なレベルの複雑さを持った、ASP.NET MVC 3 アプリケーション、Windows Communication Foundation (WCF) サービス、データベース プロジェクトなどを含んだ Web アプリケーションを取り上げます。
これらのチュートリアルの中核となる配置方法は、「ビルド処理について理解する」で説明した分割プロジェクト ファイルのアプローチを基にして、ビルド プロセスを 2 つのプロジェクト ファイル (すべての配置先環境に適用されるビルド命令を含んだファイルと、環境に特化したビルド設定や配置設定を含んだファイル) で制御するものになっています。 ビルド時には、環境に特化したプロジェクト ファイルが環境に依存しないプロジェクト ファイルにマージされ、ビルド命令の完全なセットが形成されます。
プロセスの概要
このトピックでは、これらのプロジェクト ファイルを使用してターゲット環境への反復可能な配置を実行するコマンド ファイルを作成して実行する方法について説明します。 基本的に、このコマンド ファイルには、単に次のような MSBuild コマンドを含める必要があります。
- 環境に依存しない Publish.proj ファイルを実行するように MSBuild に指示します。
- どのファイルに環境に特化したプロジェクト設定が含まれているか、およびそのファイルを検索する場所を Publish.proj ファイルに指定します。
MSBuild コマンドを作成する
「ビルド処理について理解する」で説明されているように、環境に特化したプロジェクト ファイル (Env-Dev.proj など) は、ビルド時に環境に依存しない Publish.proj ファイルにインポートされるように設計されています。 これら 2 つのファイルを組み合わせることで、ソリューションをビルドして配置する方法を MSBuild に指示する一連の手順がすべて提供されます。
Publish.proj ファイルでは、Import 要素を使用して環境に特化したプロジェクト ファイルをインポートします。
<Import Project="$(TargetEnvPropsFile)"/>
そのため、MSBuild.exe を使用して Contact Manager ソリューションをビルドして配置する場合は、次の手順を実行する必要があります。
- Publish.proj ファイルで MSBuild.exe を実行します。
- TargetEnvPropsFile という名前のコマンドライン パラメーターを指定して、環境に特化したプロジェクト ファイルの場所を指定します。
これを行うには、MSBuild コマンドは次のようになります。
msbuild.exe Publish.proj /p:TargetEnvPropsFile=EnvConfig\Env-Dev.proj
ここでは、反復可能な単一手順の配置に移行するのが簡単な手順です。 必要なのは、MSBuild コマンドを .cmd ファイルに追加することだけです。 Contact Manager ソリューションでは、Publish フォルダーに、正確にこれを行う Publish-Dev.cmd という名前のファイルが含まれています。
%windir%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe Publish.proj /fl /p:TargetEnvPropsFile=EnvConfig\Env-Dev.proj
echo
pause
Note
/fl スイッチは、MSBuild.exe が呼び出された作業ディレクトリに msbuild.log という名前のログ ファイルを作成するように MSBuild に指示します。
Contact Manager ソリューションを配置または再配置するのに必要なのは、Publish-Dev.cmd ファイルを実行することだけです。 このファイルを実行すると、MSBuild は次のことを行います。
- ソリューション内のすべてのプロジェクトをビルドします。
- Web アプリケーション プロジェクトの配置可能な Web パッケージを生成します。
- データベース プロジェクトの .dbschema ファイルと .deploymanifest ファイルを生成します。
- Web パッケージを Web サーバーに配置します。
- データベースをデータベース サーバーに配置します。
配置を実行する
ターゲット環境のコマンド ファイルを作成したら、そのファイルを実行するだけで配置全体を完了できます。
Contact Manager ソリューションをテスト環境に配置するには
開発者ワークステーションで Windows エクスプローラーを開き、Publish-Dev.cmd ファイルの場所を参照します。
ファイルをダブルクリックして実行します。
[ファイルを開く - セキュリティ警告] ダイアログ ボックスが表示されたら、[実行] をクリックします。
構成設定とテスト サーバーが正しく設定されている場合、MSBuild がプロジェクト ファイルの処理を完了すると、コマンド プロンプト ウィンドウに "ビルドに成功しました" というメッセージが表示されます。
この環境にソリューションを初めて配置した場合は、テスト Web サーバー コンピューター アカウントを ContactManager データベースの db_datawriter ロールと db_datareader ロールに追加する必要があります。 この手順については、「Web 配置発行のデータベース サーバーを構成する」を参照してください。
Note
データベースの作成時にのみ、これらのアクセス許可を割り当てる必要があります。 既定で、ビルド プロセスでは、すべての配置でデータベースが再作成されるわけではありません。代わりに、既存のデータベースが最新のスキーマと比較され、必要な変更のみが加えられます。 その結果、ソリューションを初めて配置するときに、これらのデータベース ロールをマップするだけで済みます。
Internet Explorer を開き、Contact Manager アプリケーションの URL (たとえば
http://testweb1:85/ContactManager/
) を参照します。アプリケーションが期待どおりに動作し、連絡先を追加できることを確認します。
まとめ
MSBuild の手順を含むコマンド ファイルを作成すると、マルチプロジェクト ソリューションを特定の宛先環境に迅速かつ簡単にビルドして配置できます。 ソリューションを複数の宛先環境に繰り返し配置する必要がある場合は、複数のコマンド ファイルを作成できます。 各コマンド ファイルで、MSBuild コマンドは同じユニバーサル プロジェクト ファイルをビルドしますが、環境に特化した異なるプロジェクト ファイルを指定します。 たとえば、開発者環境またはテスト環境に発行するコマンド ファイルには、次の MSBuild コマンドが含まれる場合があります。
msbuild.exe Publish.proj /p:TargetEnvPropsFile=EnvConfig\Env-Dev.proj
ステージング環境に発行するコマンド ファイルには、次の MSBuild コマンドが含まれる場合があります。
msbuild.exe Publish.proj /p:TargetEnvPropsFile=EnvConfig\Env-Stage.proj
Note
環境に特化したプロジェクト ファイルを、実際にお使いのサーバー環境に合わせてカスタマイズする方法については、「ターゲット環境の配置プロパティを構成する」のガイダンスを参照してください。
MSBuild コマンドでプロパティをオーバーライドしたり、他のさまざまなスイッチを設定したりして、環境ごとにビルド プロセスをカスタマイズすることもできます。 詳細については、「MSBuild コマンド ライン リファレンス」を参照してください。