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 フラグを省略すると、認証の種類は既定で NTLM に設定され、Web 配置リモート エージェント サービスへの展開では NTLM、Web 配置ハンドラーへの展開には Basic に設定されます。
/U ユーザー名を指定します。 これは、基本認証を使用している場合にのみ適用されます。
/P パスワードを指定します。 これは、基本認証を使用している場合にのみ適用されます。
/L パッケージをローカル IIS Express インスタンスにデプロイする必要があることを示します。
/G tempAgent プロバイダー設定を使用してパッケージを展開することを指定します。 /G フラグを省略すると、既定値は false になります

Note

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

これらのフラグに加えて、Web 配置操作の設定を追加の .deploy.cmd パラメーターとして指定できます。 指定した追加の設定は、基になる 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は、 で Web 配置リモート エージェント サービスにパッケージを展開しようとします。 http://TESTWEB1/MSDeployAgentService.
  • /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 プロバイダーは常にパッケージです。 次に例を示します。

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

    -dest:auto='[server name or service URL]'
    
  • –verb は常に同期されます

    -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 パラメーターは、パッケージ プロバイダーを指定し、Web パッケージの場所を示します。
  • –dest パラメーターは、自動プロバイダーを指定します。 computerName 設定は、移行先サーバー上の Web 配置ハンドラーのサービス URL を提供します。 認証の設定は、基本認証を使用することを示します。そのため、ユーザー名パスワードを指定する必要があります。 最後に、 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 Deploy によってリモート エージェント サービスの 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 Deploy に基本認証資格情報を指定する必要があります。 この問題の詳細については、「 Enterprise 環境へのメンバーシップ データベースの展開」を参照してください。

まとめ

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

もっと読む

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