如何在本地或远程部署MSBuild ZIP包而不需要涉及IIS?

7

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

想法是一切都在源代码控制下,包括应用程序文件、应用程序配置以及 IIS 配置。我的应用程序允许解决方案在构建后自动部署(添加 sln/proj 文件的后置构建步骤),在开发机器上。它将使 CI 服务器在其机器上自动部署以进行测试,并将成功构建推送到 QA/Test/生产服务器。我使用 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\websites\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.

我正在尝试让第一个命令使用其现有结构解压文件。 但似乎对应用程序池有些不满意(我不想让它触及)。

第二个命令我在试图避免"auto",但是也无法成功。

我很难找到关于这个过程的信息。

目前我唯一能想到的方法是不使用msdeploy,而是创建自己的任务来集成文件结构并进行文件同步(不太理想)。


你在第二个命令中收到了什么错误? - Richard Szalay
错误:对于给定的操作,源(sitemanifest)和目标(contentPath)不兼容。 错误计数:1。(我的问题中第二个代码块)。 - Jon
1个回答

1

我最终是通过编码来解决这个问题,而不是解决它。

我采用了zip包:

  1. 在临时位置解压
  2. 找到最终路径(通常从archive.xml中获取)
  3. 检查是否正在合并文件夹或进行干净安装(即首先删除目标文件夹)。
  4. 复制/推送文件到最终位置(通常使用msdeploy)。

我将我的解决方案开源:https://github.com/twistedtwig/AutomatedDeployments


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接