使用msdeploy& Ex构建一次并部署到多个环境Visual Studio 2012

时间:2012-11-01 03:21:02

标签: msbuild msdeploy

为多个解决方案集中配置,应用程序设置和连接字符串,同时还从命令行切换到使用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. 使用file或configSource属性以及SetParameters指向不同的配置文件,但必须是来自Web根目录的相对属性。
  5. 使用发布配置文件。看到 Deploying an existing package using publish profiles
  6. 由于

4 个答案:

答案 0 :(得分:19)

我可以对选项#1 /#3进行详细说明并进行比较。之前的回复并不准确说明你必须使用PackageWeb多次构建,你只需要构建一次。

选项1:Parameters.xml和SetParameters.xml

在此方法中,您将在Web项目中创建一个parameters.xml文件,该文件将声明其他Web Deploy参数。

构建Web Deploy包时,会在包中创建在parameters.xml中声明的参数。创建此Web部署包后,将根据构建配置(和now potentially a profile specific transform as well)转换web.config文件。

您可以使用该包和setparameters.xml来发布指定Web Deploy参数值的包。您可以创建不同的setparameters.xml文件,并将其与相同的包一起使用以发布到多个目标。要使用此技术发布,您可以使用VS生成的deploy.cmd或使用正确的参数集调用msdeploy.exe。

选项3:PackageWeb

PackageWeb扩展了包过程,因此在创建Web Deploy包时,web.config转换包含在包中以及可以执行转换的程序集中。

除此之外,在创建Web部署包时,还会生成publish-interactive.ps1文件。您可以使用此文件发布您的包。它会提示你;要应用的web.config转换,Web部署参数值以及Web部署端点信息本身。当您通过发布时,您提供的值将保存到publish-configuration.ps1.readme。您可以删除.readme和publish-interactive.ps1将使用该文件中的值来自动化发布。您还可以specify the file to be used for settings

如果在VS创建Web部署包时创建了parameters.xml文件,则会导致包中包含Web部署参数。 PackageWeb会选择那些并提示你这些。

那么这些方法之间有什么区别?

使用选项#1,进入包的web.config已经被转换。您将无法再次转换文件。使用这两种方法,您可以指定Web部署参数值,以便满足您的需求。如果要将大块XML从一个env修改为另一个env,那么web.config转换可能是有益的。所以PackageWeb可能是更好的选择。

使用选项#1,您必须手动创建SetParameters.xml文件。使用PackageWeb,您可以使用WhatIf选项运行该过程。系统将提示您输入值,它将为您创建设置文件。

您可以轻松地自动执行这两种方法。 PackageWeb基本上构建在parameters.xml / setparameters.xml技术之上,并提供了一套超级功能。

如果你想用最少的移动部件保持尽可能简单,我建议选择#1,因为你可以根据需要直接调用msdeploy.exe。

如果您希望简化发布的自动化,并且您更喜欢PowerShell到标准命令提示符,那么请尝试使用PackageWeb。

我在http://sedodream.com/2012/03/14/PackageWebUpdatedAndVideoBelow.aspx的PackageWeb上有一段5分钟的视频。如果您要发布Web部署包,我建议您尝试一下。如果它不符合您的需求,请告诉我,因为我们可能会以更正式的方式使用我们在PackageWeb中学到的东西。

答案 1 :(得分:7)

我们使用选项#1,它运作得很好。我们使用这种方法部署到大约30-40个站点​​和应用程序。

我认为选项#2会给您或开发人员带来麻烦。您必须确保在部署时从配置中删除带有设置的部分,或者将它们锁定在服务器上,以便本地配置无法添加它们。

对于选项#3,您将不得不进行多次构建以获取转换后的配置文件。如果要部署大量站点,这也不太可行。

选项#4可以工作,但是你可能会遇到限制。它要么是整个部分都在一个单独的文件中,要么全部在主文件中,所以没有介于两者之间。

选项#5看起来很有趣,但我没有使用它,所以我不能说太多。

答案 2 :(得分:5)

我们使用#5并且效果很好。使用MSBuild发布配置文件提供了一系列灵活性(项目特别有用)。

在我们的部署管道中,只有网站包,构建/部署目标和发布配置文件可用于部署阶段。源代码(包括项目文件)仅在构建/测试阶段使用。

仅供参考,我们专门使用发布配置文件,因为您将很快遇到保持特定于环境的服务器详细信息/凭据,跳过子句和参数值的问题。 WPP /发布配置文件跟踪pubxml文件中的所有这些内容,并且MSBuild的功能允许一些很好的常规配置“帮助程序”用于常见但“嘈杂”的任务。

答案 3 :(得分:2)

我最终使用在TeamCity上运行的msbuild组合来解决这个问题,以创建可由OctopusDeploy使用的NuGet包。

Octopus允许将打包到nuget包(内置一次)的应用程序推送到多个环境中。可以使用标准ms变换在每个环境甚至每个机器的基础上转换配置。链接以下相关的八达通文档。

Packaging for Octopus

Configuring config transforms