如何在本地或远程部署msbuild zip包而不需要IIS参与

时间:2012-09-15 10:19:24

标签: msbuild msdeploy web-deployment msbuild-4.0 continuous-deployment

我正在创建一个允许应用程序部署自动化的应用程序,(https://github.com/twistedtwig/AutomdatedDeployments#readme)。

这个想法是所有东西都在源代码控制,应用程序文件,应用程序配置以及IIS配置中。我的应用程序允许解决方案在构建到dev计算机之后自动部署(向sln / proj文件添加post build setp)。它将允许CI服务器自动部署到其计算机以进行测试,以及CI服务器将成功构建推送到QA /测试/生产服务器。我使用msdeploy的一个问题是需要事先用网站/应用程序设置IIS(我的应用程序试图绕过它)。

到目前为止,我可以自动通过配置文件创建,更新和删除应用程序池,网站和应用程序。我可以很好地同步文件和文件夹。最后一步是在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

这会创建一个很好的zip文件,内部文件路径为“C_C \ wbesites \ mySite”(我理解)可以同步到生产服务器。

我的问题是如何部署此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.

第一个命令我试图让它用它拥有的结构解压缩文件。虽然看起来对应用程序池的东西感到不安,(我不想让它接触)。

第二个我试图绕过“自动”位,但这也不开心。

我很难找到有关此过程的更多信息。

我现在唯一可以看到我如何实现这一目标的方法是不使用msdeploy,而是创建我自己的任务来集成文件结构并执行同步我自己的文件(不理想)。 / p>

1 个答案:

答案 0 :(得分:1)

我最终围绕这个问题进行编码,而不是能够解决它。

我拿拉链包:

  1. 在临时位置解压缩
  2. 找到它将要进入的最终路径(通常来自archive.xml)
  3. 检查我是在合并文件夹还是进行全新安装(即首先删除目标文件夹)。
  4. 将文件复制/推送到结束位置(通常使用msdeploy)。
  5. 我开源了我的解决方案:https://github.com/twistedtwig/AutomatedDeployments