4

msdeploy がサイトのサブ アプリケーション (たとえば、既定の Web サイト) のアプリケーション プール情報を同期しないという問題があります。

基本的に、複数の開発ブランチの夜間ビルド プロセスの一部として webdeploy/msdeploy パッケージを作成し、これらのブランチ固有のパッケージをスモーク テスト用のサーバーにデプロイできることを望んでいました。すべてがもっともらしいようですが、残念ながら、展開されたパッケージの iisApp が使用する予定のアプリ プールを設定する方法が見つかりません。アプリ プール自体の作成をサポートする appPoolConfig プロバイダーを含むパッケージを作成および展開できますが、展開するアプリケーションにアプリ プールを設定できない場合、これは役に立ちません。

ところで、似ているように見える他の質問をほとんど繰り返しているような気がします。appPoolconfig または appPoolExtension を使用するためのさまざまな回答が提供されていますが、私はこれらで運がありませんでした。私の読書から appPoolConfig は、アプリケーションに「割り当てられた」アプリプールではなく、アプリプール自体を同期するために使用されます。ちなみに、このタイプの同期操作はうまく機能します。そして appPoolExtension に関しては、生成されたパッケージに違いが見られないため、スイッチを入れたときに実際に何をするのか途方に暮れています。

最下位レベルのツールだけで動作するように、WPP/webdeploy/msbuild を使用せずに msdeploy のみを使用する簡単な一連の手順を使用して、問題を再現できます。

Windows 8 (注: Win 2008 R2 でも問題を再現できます)、IIS および Web Deploy 3.0 がインストールされています。

  1. 既定の Web サイトが存在し、.NET 4.0 がインストールされていると仮定して、TestPool という名前の新しいアプリケーション プールを作成します。
  2. Default Web Site の下に TestApp という名前の新しいアプリケーションを作成し、そのアプリケーション プールを手順 1 で作成した TestPool に割り当てます。
  3. msdeploy へのパス アクセスでコマンド プロンプトを開きます。
  4. タイプ >

    msdeploy -verb:sync -source:iisApp="Default Web Site/TestApp" -dest:package=c:\temp\testapp.zip,encryptPassword="password" -enableLink:AppPoolExtension
    
  5. パッケージができたので、既定の Web サイトの下から TestApp を削除し、最初のアプリケーション作成の一部として作成された残りの物理フォルダーを削除します。
  6. IIS で使用可能なプールとして構成された TestPool アプリケーション プールがまだあると仮定して、次のように入力します >

    msdeploy -verb:sync -source:c:\temp\testapp.zip,encryptPassword="password" -dest:iisApp="Default Web Site/TestApp" -enableLink:AppPoolExtension
    
  7. IIS マネージャーに移動し、既定の Web サイトで TestApp を選択します。[基本設定...] をクリックすると、アプリケーション プールは必要なテスト プールではなく、既定の Web サイトに設定された既定のプールになります。

どんな助けでも大歓迎です。

編集: 上記の手順のバリエーションを実行し、msdeploy コマンド ラインの両方で "iisApp" を "appHostConfig" に変更しただけで、アプリケーション プールの設定が保持されるため、msdeploy の観点からは成功です。ただし、これが解決策である場合、VS 2012 公開プロセスに issApp ではなく appHostConfig を使用するように通知するにはどうすればよいでしょうか?

編集:私自身の編集への回答として、この回答は機能しました: https://stackoverflow.com/a/12741525/739097。これは、IIS を使用せずにビルド サーバーでパッケージ作成を統合する方法について別の質問をしますが、ここでの私の考えでは、必要な IIS 設定、動的パラメーターなどに基づいて最初にテンプレート パッケージを作成しますが、基本的にコンテンツは空です。ビルド プロセスは、コンテンツのみのパッケージを作成し、これをテンプレート パッケージと同期して、展開用の最終パッケージを作成します。

4

2 に答える 2

4

あなたの質問は編集によって多面的になりましたが、一度に 1 つのことに取り組みます。

appHostConfigサイトやアプリケーション プールなどのグローバル IIS オブジェクトを作成できるのはプロバイダーだけです。

iisAppcreateAppは、 (ディレクトリをアプリケーションとしてマークできる) とcontentPath(ファイル/フォルダを同期する)を単純に組み合わせたものです。

appHostConfigプロバイダーではなくプロバイダーをパッケージ化/同期するには、次のiisApp2 つのことを行う必要があります。

  1. 有効な URL で IIS を使用するようにプロジェクト ファイルにマークを付けます (定義することにより、MSBuild ファイルをオーバーライドしてこれらのプロパティを調べることができますWebPublishPipelineWAPProjectSettings) 。
  2. IncludeIisSettings=trueパブリッシュ プロファイルでa を宣言する

ただし、はい、これには IIS をビルド サーバーにインストールする必要があります (または、少なくともビルド サーバーが IIS インスタンスにアクセスできるようにする必要があります)。結局のところ、MSDeploy はWeb 同期フレームワークです。

可能なことは、Web サイトの定義を含む手動で生成されたパッケージと、コンテンツを含むビルド中に生成された別のパッケージを持つことです。ただし、アプリ プールに詳細オプションが含まれていて、パッケージが展開ターゲットと同じバージョンの IIS によって生成されていない場合、エラーが発生する可能性があるため、これには注意してください。

于 2013-04-16T06:34:18.437 に答える
1
<pre>
<code>
msdeploy.exe -source:package='mysite.zip' -dest:auto,computerName='https://myserver:8172/MsDeploy.axd',userName='myuser',password='mypwd',authtype='basic' -verb:sync -enableLink:AppPoolExtension -allowUntrusted -setParam:"IIS Web Application Name"="mysite"
</code>
</pre>
于 2013-07-04T06:51:16.460 に答える