web-dev-qa-db-ja.com

msdeployとVisual Studio 2012を使用して、一度ビルドして複数の環境に展開する

複数のソリューションの構成、アプリの設定、接続文字列の集中化に取り組み、コマンドラインからmsdeployを使用してWebアプリを展開するよう切り替えます。理想的には、パッケージを一度構築し、パッケージが各環境にデプロイされるときに最新の構成を取得したいと考えています。最適なアプローチについてのアドバイスが必要です。

  1. Parameters.xmlおよびSetParameters.xmlファイルを使用して、設定と接続文字列を動的に交換します。 http://vishaljoshi.blogspot.com/2010/07/web-deploy-parameterization-in-action.html を参照してください
  2. Machine.configまたはサーバーレベルのweb.configファイルを使用して、一般的なアプリ設定と接続文字列を保存します。
  3. https://github.com/sayedihashimi/package-web からpackageweb NuGetパッケージを使用します。これにより、msdeployでweb.config変換を使用できるようになります。
  4. ファイルまたはconfigSource属性とSetParametersを使用して、異なる構成ファイルを指すようにしますが、Webルートからの相対でなければなりません。
  5. 公開プロファイルを使用します。 公開プロファイルを使用した既存のパッケージの展開 を参照してください

ありがとう

37

オプション#1を使用すると、十分に機能します。このアプローチを使用して、約30〜40のサイトおよびアプリケーションに展開します。

オプション#2は、あなたまたは開発者にとって頭痛の種になると思います。設定のあるセクションがデプロイメントの設定から削除されていることを確認するか、ローカル設定で追加できないようにサーバーでロックする必要があります。

オプション#3の場合、変換された構成ファイルを取得するには、複数のビルドを行う必要があります。また、展開するサイトが多数ある場合は、あまり実現できません。

オプション#4は機能しますが、ここで制限に直面する可能性があります。セクション全体が別のファイルにあるか、すべてがメインファイルにあるため、間にはありません。

オプション#5はおもしろそうに見えますが、使用したことがないため、あまり説明できません。

7
Ted Elliott

オプション#1 /#3について少し詳しく説明し、比較することができます。以前の返信は、PackageWebで複数回ビルドする必要があると述べているので正確ではなく、1回だけビルドする必要があります。

オプション1:Parameters.xmlおよびSetParameters.xml

このアプローチでは、Webプロジェクトにparameters.xmlファイルを作成し、追加のWeb配置パラメーターを宣言します。

Web配置パッケージをビルドすると、parameters.xmlで宣言されたパラメーターがパッケージに作成されます。このWebデプロイパッケージが作成されると、web.configファイルはビルド構成に基づいて変換されます(および 現在はプロファイル固有の変換も可能 )。

そのパッケージとsetparameters.xmlを使用して、Web配置パラメーター値を指定してパッケージを公開できます。異なるsetparameters.xmlファイルを作成し、それを同じパッケージとともに使用して、複数の宛先に公開できます。この手法を使用して公開するには、VSが生成するdeploy.cmdを使用するか、正しいパラメーターセットでmsdeploy.exeを呼び出します。

オプション3:PackageWeb

PackageWebはパッケージプロセスを拡張するため、Web配置パッケージを作成すると、web.config変換がパッケージと変換を実行できるアセンブリに含まれます。

これに加えて、Web展開パッケージを作成すると、publish-interactive.ps1ファイルが生成されます。このファイルを使用して、パッケージを公開できます。プロンプトが表示されます。適用されるweb.configトランスフォーム、Webデプロイパラメータ値、およびWebデプロイエンドポイント情報自体。パブリッシュを実行すると、指定した値はpublish-configuration.ps1.readmeに保存されます。 .readmeを削除すると、publish-interactive.ps1はそのファイルの値を使用して公開を自動化します。 設定に使用するファイルを指定 を使用することもできます。

Web配置パッケージがVSによって作成されたときにparameters.xmlファイルを作成した場合、Web配置パラメーターがパッケージに含まれることになります。 PackageWebはそれらを選択し、それらについてもプロンプトを表示します。

では、これらのアプローチの違いは何ですか?

オプション#1では、パッケージに入るweb.configはすでに変換されています。ファイルを再び変換する機会はありません。どちらのアプローチでも、ニーズに合わせてWeb展開パラメーター値を指定できます。あるenvから別のenvに大きなXMLチャンクを変更する場合、web.config変換が有益な場合があります。したがって、PackageWebの方が適している場合があります。

オプション#1では、SetParameters.xmlファイルを手動で作成する必要があります。 PackageWebでは、WhatIfオプションを使用してプロセスを実行できます。値の入力を求められ、設定ファイルが作成されます。

両方のアプローチを簡単に自動化できます。 PackageWebは本質的にparameters.xml/setparameters.xmlテクニックに基づいて構築され、機能のスーパーセットを提供します。

最小限の可動部品でできるだけシンプルにしたい場合は、必要に応じてmsdeploy.exeを直接呼び出すことができるため、オプション#1をお勧めします。

発行の自動化を単純化したい場合、標準コマンドプロンプトよりもPowerShellを使用する場合は、PackageWebを試してください。

PackageWebの http://sedodream.com/2012/03/14/PackageWebUpdatedAndVideoBelow.aspx に5分間のビデオがあります。 Webデプロイパッケージを公開している場合は、試してみることをお勧めします。 PackageWebで学習した内容を後でより正式な方法で使用する可能性があるため、ニーズに合わない場合はお知らせください。

19

#5を使用し、非常にうまく機能します。プロファイルの公開にMSBuildを使用すると、柔軟性が大幅に向上します(アイテムは特に便利です)。

デプロイメントパイプラインでは、Webサイトパッケージ、ビルド/就職ターゲット、および公開プロファイルのみがデプロイメントステージで利用可能になります。プロジェクトファイルを含むソースコードは、ビルド/テストステージでのみ使用されます。

参考までに、環境固有のサーバーの詳細/資格情報、スキップ句、およびパラメーター値を一緒に保持するという問題にすぐに出くわすため、特に公開プロファイルを使用しました。 WPP /パブリッシュプロファイルはpubxmlファイル内のこれらすべてを追跡し、MSBuildの機能により、一般的ではあるが「ノイズの多い」タスクのためのニースのコンベンションオーバー設定の「ヘルパー」が可能になります。

5
Richard Szalay

TeamCityで実行されているmsbuildを組み合わせて OctopusDeploy で使用できるNuGetパッケージを作成することで、この問題を解決しました。

Octopusを使用すると、アプリケーションを(一度構築された)nugetパッケージにパッケージ化して、複数の環境にプッシュできます。構成は、標準のms変換を使用して、環境ごと、またはマシンごとに変換できます。以下の関連するOctopusのドキュメントへのリンク。

タコの包装

構成変換の構成

2
Dav Evans