Web パッケージを配置する

作成者: Jason Lee

このトピックでは、インターネット インフォメーション サービス (IIS) Web 配置ツール (Web 配置) 2.0 を使用して、Web 配置パッケージをリモート サーバーに発行する方法について説明します。

Web パッケージをリモート サーバーに配置するには、主に次の 2 つの方法があります:

  • MSDeploy.exe コマンド ライン ユーティリティを直接使用できます。
  • ビルド プロセスで生成される [プロジェクト名].deploy.cmd ファイルを実行できます。

使用する方法に関係なく、最終的な結果は同じです。 基本的に、すべての .deploy.cmd ファイルは、事前に定義された値で MSDeploy.exe を実行するため、パッケージを配置するためにできるだけ多くの情報を提供する必要はありません。 これにより、デプロイ プロセスが簡略化されます。 一方、MSDeploy.exe を直接使用すると、パッケージのデプロイ方法に対する柔軟性が大幅に向上します。

どの方法を使用するかは、デプロイ プロセスに対して必要な制御量や、Web 配置リモート エージェント サービスと Web 配置ハンドラーのどちらを対象としているかなど、さまざまな要因によって異なります。 このトピックでは、各アプローチを使用する方法について説明し、どのような場合にそれぞれのアプローチが適しているのかを説明します。

このトピックのタスクとチュートリアルでは、次のことを前提としています:

[プロジェクト名].deploy.cmd ファイルを実行することは、Web パッケージを配置する最も簡単な方法です。 特に、.deploy.cmd ファイルを使用すると、MSDeploy.exe を直接使用するよりも次のような利点があります:

  • Web デプロイ パッケージの場所を指定する必要はありません。.deploy.cmd ファイルは、その場所を既に認識しています。
  • SetParameters.xml ファイルの場所を指定する必要はありません。.deploy.cmd ファイルはその場所を既に認識しています。
  • ソースと宛先の MSDeploy プロバイダーを指定する必要はありません。.deploy.cmd ファイルは、使用する値を既に認識しています。
  • MSDeploy 操作の設定を指定する必要はありません。.deploy.cmd ファイルは、一般的に必要な値を MSDeploy.exe コマンドに自動的に追加します。

.deploy.cmd ファイルを使用して Web パッケージを配置する前に、次のことを確認する必要があります:

  • .deploy.cmd ファイル、[プロジェクト名]. SetParameters.xml ファイルと Web パッケージ ([プロジェクト名].zip) が同じフォルダーにある。
  • Web 配置 (MSDeploy.exe) は、.deploy.cmd ファイルを実行するコンピューターにインストールされます。

.deploy.cmd ファイルでは、さまざまなコマンド ライン オプションがサポートされています。 コマンド プロンプトからファイルを実行する場合、これが基本的な構文です:

[project name].deploy.cmd [/T | /Y]
                          [/M:<computer name>]
                          [/A:<Basic | NTLM>]
                          [/U:<user name>]
                          [/P:<password>]
                          [/L]
                          [/G:<true | false>]
                          [Additional MSDeploy.exe flags]

/T フラグまたは /Y フラグを指定して、試用版の実行かライブ デプロイのどちらを実行するかを示す必要があります (同じコマンドで両方のフラグを使用しないでください)。 次の表では、それぞれのフラグの目的について説明します。

フラグ 説明
/T –whatif フラグを使用して MSDeploy.exeを呼び出します。これは、使用版の実行を示します。 パッケージを展開するのではなく、パッケージを展開した場合に何が起こるかについてのレポートが作成されます。
/Y –whatif フラグを指定せずに MSDeploy.exeを呼び出します。 これにより、パッケージがローカル コンピューターまたは指定した移行先サーバーに展開されます。
/M 宛先サーバー名またはサービス URL を指定します。 ここで指定できる値の詳細については、このトピックの「エンドポイントに関する考慮事項」セクションを参照してください。 /M フラグを省略すると、パッケージはローカル コンピューターに展開されます。
/A MSDeploy.exe がデプロイを実行するために使用する認証の種類を指定します。 指定できる値は NTLMBasic です。 /A フラグを省略した場合、認証の種類は、Web 配置リモート エージェント サービスへのデプロイでは NTLM に、Web 配置ハンドラーへのデプロイでは Basic に既定で設定されます。
/U ユーザー名を指定します。 これは、基本認証を使用している場合にのみ適用されます。
/P パスワードを指定します。 これは、基本認証を使用している場合にのみ適用されます。
/L パッケージをローカル IIS Express インスタンスに展開する必要があることを示します。
/G tempAgent プロバイダー設定を使用してパッケージを展開することを示します。 /G フラグを省略すると、既定値は false になります。

Note

ビルド プロセスで Web パッケージが作成されるたびに、これらの配置オプションについて説明する [プロジェクト名].deploy-readme.txt という名前のファイルも作成されます。

これらのフラグに加えて、追加の .deploy.cmd パラメーターとして Web 配置操作の設定を指定できます。 指定した追加の設定は、基になる MSDeploy.exe コマンドに渡されます。 これらの設定の詳細については、「Web 配置操作の設定」を参照してください。

.deploy.cmd ファイルを実行して、ContactManager.Mvc Web アプリケーション プロジェクトをテスト環境にデプロイするとします。 「Web 配置発行用の Web サーバーの構成 (リモート エージェント)」の説明に従って、Web 配置リモート エージェント サービスを使用するようにテスト環境を構成します。 Web アプリケーションをデプロイするには、次の手順を完了する必要があります。

.deploy.cmd ファイルを使用して Web アプリケーションをデプロイするには

  1. Web アプリケーション プロジェクトのビルドとパッケージ化」の説明に従って、Web アプリケーション プロジェクトをビルドしてパッケージ化します。

  2. Web パッケージ展開のパラメーターの構成」の説明に従って、テスト環境の正しいパラメーター値が含まれるように、ContactManager.Mvc.SetParameters.xml ファイルを変更します。

  3. コマンド プロンプト ウィンドウを開き、ContactManager.Mvc.deploy.cmd ファイルの場所に移動します。

  4. 次のコマンドを入力して、Enter キーを押します:

    ContactManager.Mvc.deploy.cmd /Y /M:TESTWEB1 /A:NTLM
    

次の点に注意してください。

  • /Y フラグは、使用版の実行を行うのではなく、パッケージを実際にデプロイすることを示します。
  • /M フラグは、パッケージを TESTWEB1 という名前のサーバーに展開することを示します。 この値から、MSDeploy.exe は、http://TESTWEB1/MSDeployAgentService. にある Web 配置リモート エージェント サービスへのパッケージのデプロイを試行します
  • /A フラグは、NTLM 認証を使用することを示します。 そのため、ユーザー名とパスワードを指定する必要はありません。

.deploy.cmd ファイルを使用してデプロイ プロセスを簡略化する方法を説明するには、上記のオプションを使用して ContactManager.Mvc.deploy.cmd を実行するときに生成および実行される MSDeploy.exe コマンドを確認します。

msdeploy.exe 
-source:package='C:\Users\matt.FABRIKAM\Desktop\ContactManager-03\ContactManager\
 Publish\Out\_PublishedWebsites\ContactManager.Mvc_Package\ContactManager.Mvc.zip' -dest:auto,computerName='TESTWEB1.fabrikam.net', authtype='NTLM',
 includeAcls='False' 
-verb:sync 
-disableLink:AppPoolExtension 
-disableLink:ContentExtension 
-disableLink:CertificateExtension 
-setParamFile:"C:\Users\matt.FABRIKAM\Desktop\ContactManager-03\ContactManager\
 Publish\Out\_PublishedWebsites\ContactManager.Mvc_Package\
 ContactManager.Mvc.SetParameters.xml"

.deploy.cmd ファイルの使用して Web パッケージを展開する方法の詳細については、「方法: deploy.cmd ファイルを使用して展開パッケージをインストールする」を参照してください。

MSDeploy.exe の使用

一般に、 .deploy.cmd ファイルを使用するとデプロイ プロセスが簡略化されますが、MSDeploy.exe を直接使用することが望ましい場合があります。 次に例を示します。

  • 管理者以外のユーザーとして Web 配置ハンドラーにデプロイする場合は、.deploy.cmd ファイルを使用できません。 これは、「エンドポイントの考慮事項」で説明されているように、Web Deploy 2.0 のバグが原因です。
  • 別の場所にある異なる SetParameters.xml ファイルに手動で切り替えたい場合は、MSDeploy.exe を直接使用することをおすすめします。
  • 複数の MSDeploy.exe コマンドライン引数をオーバーライドする場合は、MSDeploy.exe を直接使用することもできます。

MSDeploy.exeを使用する場合は、次の 3 つの重要な情報を提供する必要があります:

  • データの送信元を示す –source パラメーター。
  • データの移動先を示す –dest パラメーター。
  • 実行する操作 を 示す –verb パラメーター。

MSDeploy.exe は、Web 配置プロバイダーを使用してソースデータと転送先データを処理します。 Web 配置には、使用できるアプリケーションとデータ ソースの範囲を表す多くのプロバイダーが含まれています。たとえば、SQL Server データベース、IIS Web サーバー、証明書、グローバル アセンブリ キャッシュ (GAC) アセンブリ、さまざまな構成ファイル、その他の多くの種類のデータのプロバイダーがあります。 –source パラメーターと –dest パラメーターの両方で、–source:[providerName]=[location]という形式でプロバイダーを指定する必要があります。 WEB パッケージを IIS Web サイトに展開する場合は、次の値を使用する必要があります:

  • –source プロバイダーは常に package です。 次に例を示します。

    -source:package='[path to web package]'
    
  • –dest プロバイダーは常に auto です。次に例を示します。

    -dest:auto='[server name or service URL]'
    
  • –verb は常に sync です。

    -verb:sync
    

さらに、さまざまなプロバイダー固有の設定と一般的な操作設定を指定する必要があります。 たとえば、ContactManager.Mvc Web アプリケーションをステージング環境にデプロイするとします。 デプロイは Web 配置ハンドラーを対象とし、基本認証を使用する必要があります。 Web アプリケーションをデプロイするには、次の手順を完了する必要があります。

MSDeploy.exe を使用して Web アプリケーションをデプロイするには

  1. Web アプリケーション プロジェクトのビルドとパッケージ化」の説明に従って、Web アプリケーション プロジェクトをビルドしてパッケージ化します。

  2. Web パッケージ展開のパラメーターの構成」の説明に従って、ステージング環境の正しいパラメーター値が含まれるように、ContactManager.Mvc.SetParameters.xml ファイルを変更します。

  3. コマンド プロンプト ウィンドウを開き、MSDeploy.exe の場所を参照します。 これは通常、%PROGRAMFILES%\IIS\Microsoft Web Deploy V2\msdeploy.exe にあります。

  4. 次のコマンドを入力し、Enter キーを押します (改行は無視します):

    MSDeploy.exe
      -source:package="[path]\ContactManager.Mvc.zip"
      -dest:auto,
            computerName="https://stageweb1:8172/MSDeploy.axd?site=DemoSite",
            username="FABRIKAM\stagingdeployer",
            $CREDENTIAL_PLACEHOLDER$,
            authtype="Basic",
            includeAcls="False"
      -verb:sync
      -disableLink:AppPoolExtension
      -disableLink:ContentExtension
      -disableLink:CertificateExtension
      -setParamFile:"[path]\ContactManager.Mvc.SetParameters.xml"
      -allowUntrusted
    

次の点に注意してください。

  • –source パラメーターは、package プロバイダーを指定し、Web パッケージの場所を示します。
  • –dest パラメーターは、auto プロバイダーを指定します。 computerName 設定は、宛先サーバー上の Web 配置ハンドラーのサービス URL を提供します。 authtype 設定は、基本認証を使用することを示します。そのため、ユーザー名パスワードを指定する必要があります。 最後に、includeAcls="False" 設定は、ソース Web アプリケーション内のファイルのアクセス制御リスト (ACL) を宛先サーバーにコピーしないことを示します。
  • –verb:sync 引数は、宛先サーバーでソース コンテンツをレプリケートすることを示します。
  • –disableLink 引数は、アプリケーション プール、仮想ディレクトリ構成、または Secure Sockets Layer (SSL) 証明書を宛先サーバーにレプリケートしないことを示します。 詳細については、「Web 配置リンク拡張機能」を参照してください。
  • –setParamFile パラメーターは、SetParameters.xml ファイルの場所を提供します。
  • –allowUntrusted スイッチは、Web Deploy が信頼された証明機関によって発行されなかった SSL 証明書を受け入れる必要があることを示します。 Web 配置ハンドラーにデプロイしていて、自己署名証明書を使用してサービス URL をセキュリティで保護した場合は、このスイッチを含める必要があります。

Web パッケージの配置の自動化

多くのエンタープライズ シナリオでは、大規模な単一ステップまたは自動配置の一部として Web パッケージを配置する方が得策です。 .deploy.cmd ファイルを実行するか、MSDeploy.exe を直接使用して Web パッケージを配置するかに関係なく、コマンドをパラメーター化し、Microsoft Build Engine (MSBuild) のプロジェクト ファイル内のターゲットから呼び出すことができます。

Contact Manager サンプル ソリューションでは、Publish.proj ファイルの PublishWebPackages ターゲットを確認してください。 このターゲットは、PublishPackages という名前の項目リストによって識別される .deploy.cmd ファイルごとに 1 回実行されます。 ターゲットは、プロパティと項目メタデータを使用して、各 .deploy.cmd ファイルの引数値の完全なセットを構築し、Exec タスクを使用してコマンドを実行します。

<Target Name="PublishWebPackages" Outputs="%(PublishPackages.Identity)">
  ...
  <PropertyGroup>
    <_WhatIfSwitch>/Y</_WhatIfSwitch>
    <_WhatIfSwitch Condition=" '$(_WhatIf)'=='true' ">/T</_WhatIfSwitch>
    <_Cmd>
      %(PublishPackages.FullPath) $(_WhatifSwitch) /M:$(MSDeployComputerName) 
      /U:$(MSDeployUsername) /P:$(Password) /A:$(MSDeployAuth) 
      %(PublishPackages.AdditionalMSDeployParameters)
    </_Cmd>
  </PropertyGroup>
  <Exec Command="$(_Cmd)"/>
</Target>

Note

サンプル ソリューションのプロジェクト ファイル モデルの概要と、一般的なカスタム プロジェクト ファイルの概要については、「プロジェクト ファイルについて」と「ビルド プロセスについて」を参照してください。

エンドポイントに関する考慮事項

.deploy.cmd ファイルを実行するか、MSDeploy.exe を直接使用して Web パッケージを配置するかに関係なく、配置のコンピューター名またはサービス エンドポイントを指定する必要があります。

Web 配置リモート エージェント サービスを使用して配置先の Web サーバーがデプロイ用に構成されている場合は、ターゲット サービスの URL を宛先として指定します。

http://[server name]/MSDeployAgentService

または、サーバー名を宛先として単独で指定することもできます。Web 配置はリモート エージェント サービスの URL を推論します。

[server name]

Web 配置ハンドラーを使用して配置先の Web サーバーがデプロイ用に構成されている場合は、IIS Web 管理サービス (WMSvc) のエンドポイント アドレスを宛先として指定する必要があります。 既定では、これは次の形式になります:

https://[server name]:8172/MSDeploy.axd

.deploy.cmd ファイルまたは MSDeploy.exe を直接使用して、これらのエンドポイントのいずれかをターゲットにすることができます。 ただし、「Web 配置発行用の Web サーバーの構成 (Web 配置ハンドラー) 」の説明に従って、管理者以外のユーザーとして Web 配置ハンドラーにデプロイする場合は、サービス エンドポイント アドレスにクエリ文字列を追加する必要があります。

https://[server name]:8172/MSDeploy.axd?site=[IIS website name]

これは、管理者以外のユーザーが IIS にサーバー レベルでアクセスできないためです。特定の IIS Web サイトにのみアクセスできます。 執筆時点では、Web 発行パイプライン (WPP) のバグのため、クエリ文字列を含むエンドポイント アドレスを使用して .deploy.cmd ファイルを実行することはできません。 このシナリオでは、MSDeploy.exe を直接使用して Web パッケージをデプロイする必要があります。

Note

Web 配置リモート エージェント サービスと Web 配置ハンドラーの詳細については、「Web 配置 に対する適切なアプローチの選択」を参照してください。 これらのエンドポイントに配置するように環境固有のプロジェクト ファイルを構成する方法のガイダンスについては、「ターゲット環境の配置プロパティを構成する」を参照してください。

認証に関する考慮事項

.deploy.cmd ファイルを実行するか、MSDeploy.exe を直接使用して Web パッケージを配置するかに関係なく、認証の種類を指定する必要があります。 Web 配置では、NTLM または Basic の 2 つの値を使用できます。 基本認証を指定する場合は、ユーザー名とパスワードも指定する必要があります。 認証の種類を選択するときに考慮すべきさまざまな要因があります:

  • Web 配置リモート エージェント サービスにデプロイする場合は、NTLM 認証を使用する必要があります。 リモート エージェント サービスは、基本認証資格情報を受け入れていません。
  • Web 配置ハンドラーに配置する場合は、NTLM 認証または基本認証を使用できます。 既定の設定は基本認証です。 基本認証はプレーン テキストで送信されるユーザー名とパスワードに依存しますが、Web デプロイ ハンドラーでは常に SSL 暗号化が使用されるため、資格情報は保護されます。
  • Web パッケージにデータベースが含まれており、Web サーバーとデータベース サーバーが別々のマシンである場合、NTLM の "ダブルホップ" 制限により、NTLM 認証を使用してデータベースをデプロイすることはできません。 デプロイ接続文字列で SQL Server 資格情報を使用するか、Web 配置に基本認証資格情報を指定する必要があります。 この問題の詳細については、「Enterprise 環境へのメンバーシップ データベースの展開」を参照してください。

まとめ

このトピックでは、.deploy.cmd ファイルを実行するか、MSDeploy.exe を直接使用して、Web パッケージをデプロイする方法について説明しました。 各アプローチが適切な場合について説明し、大規模なシングルステップまたは自動ビルド プロセスの一部としてデプロイ コマンドをパラメーター化して実行する方法について説明しました。

もっと読む

Web 配置パッケージを作成してパラメーター化する方法のガイダンスについては、「Web アプリケーション プロジェクトのビルドとパッケージ化」および「Web パッケージ配置のパラメーターの構成」を参照してください。 Team Foundation Server (TFS) インスタンスから Web パッケージをビルドして展開する方法のガイダンスについては、「自動 Web 配置用の Team Foundation Server の構成」を参照してください。 配置プロセスをカスタマイズしてトラブルシューティングする方法については、「展開からのファイルとフォルダーの除外」を参照してください。