7

アプリケーションのデプロイの自動化を可能にするアプリケーションを作成中です (https://github.com/twistedtwig/AutomdatedDeployments#readme)。

すべてがソース管理、アプリケーション ファイル、アプリケーション構成、および IIS 構成にあるという考えです。私のアプリケーションでは、開発マシンへのビルド後にソリューションを自動展開できます (ビルド後の setp を sln / proj ファイルに追加します)。これにより、CI サーバーがテストのためにそのマシンに自動展開できるようになり、CI サーバーは成功したビルドを QA / テスト / 実稼働サーバーにプッシュすることができます。私が msdeploy で抱えている問題の 1 つは、事前に IIS を Web サイト/アプリケーションでセットアップする必要があることです (私のアプリはこれを回避しようとしています)。

これまでのところ、構成ファイルを介してアプリケーション プール、Web サイト、およびアプリケーションを自動的に作成、更新、および削除できます。ファイルとフォルダーを正常に同期できます。最後の手順は、msbuild で /target:package スイッチを使用して、Web デプロイ用のクリーンなファイル構造を作成することでした。たとえば、次のようなコマンドを実行します。

msbuild.exe myMvcSite.csproj /target:clean /target:package /p:Configuration=Release /p:_PackageTempDir=C:\websites\mySite  /p:PackageLocation=C:\dropLocation\mySite.zip

これにより、「C_C\wbesites\mySite」の内部ファイル パスを持つ適切な zip ファイルが作成され、(私が理解しているように) 運用サーバーに同期する準備が整います。

私の問題は、この zip ファイルを展開する方法です。IIS 情報から独立させたい、つまり、ファイル/フォルダーをある場所 (開発者用のローカル マシン上、またはテスト用のリモート マシンなど) にプッシュするだけです。アプリ プールやサイトなどを使用した IIS のセットアップは、個別に処理されます。私が試したコマンド (およびその出力) の一部を以下に示します。

"C:\Program Files\IIS\Microsoft Web Deploy v2\msdeploy.exe" -verb:sync -source:package="C:\Temp\deploy\installer\test\testPackage.zip" -dest:auto
Info: Adding sitemanifest (sitemanifest).
Error: The application pool that you are trying to use has the 'managedRuntimeVersion' property set to 'v2.0'. This application requires 'v4.0'.
Error count: 1.

"C:\Program Files\IIS\Microsoft Web Deploy v2\msdeploy.exe" -verb:sync -source:package="C:\website\installer\testPackage.zip" -dest:contentpath=C:\temp\mytest
Error: Source (sitemanifest) and destination (contentPath) are not compatible for the given operation.
Error count: 1.

最初のコマンドで、ファイルをその構造で解凍しようとしています。ただし、アプリプールの件については動揺しているようです(触れたくありません)。

2番目は「自動」ビットを回避しようとしていますが、これも満足できません。

このプロセスに関する多くの情報を見つけるのに苦労しています。

現時点でこれを達成する方法を確認できる唯一の方法は、msdeploy を使用するのではなく、ファイル構造を統合し、自分自身でファイルを同期するための独自のタスクを作成することです (理想的ではありません)。

4

1 に答える 1

1

この問題を解決するのではなく、この問題を回避するようにコーディングすることになりました。

私はzipパッケージを取ります:

  1. 一時的な場所に解凍する
  2. 移動先の最終パスを見つけます (通常は archive.xml から)
  3. フォルダーをマージしているか、クリーン インストールを行っているかを確認します (つまり、最初に宛先フォルダーを削除しますか)。
  4. ファイルを最後の場所にコピー/プッシュします (通常は msdeploy を使用)。

これに対するソリューションをオープンソース化しました: https://github.com/twistedtwig/AutomatedDeployments

于 2012-09-23T11:34:09.993 に答える