构build一次,并使用msdeploy和Visual Studio 2012部署到多个环境

为多个解决scheme集中configuration,应用程序设置和连接string,同时切换到从命令行使用msdeploy来部署Web应用程序。 理想情况下,我想要构build一次包,并获取最新的configuration,因为包被部署到每个环境。 我需要一些最好的方法build议。

  1. 使用Parameters.xml和SetParameters.xml文件dynamic交换设置和连接string。 请参阅http://vishaljoshi.blogspot.com/2010/07/web-deploy-parameterization-in-action.html
  2. 使用machine.config或服务器级别的web.config文件来存储常见的应用程序设置和连接string。
  3. 使用https://github.com/sayedihashimi/package-web中的packageweb NuGet包,它可以使用msdeploy使用web.config转换。
  4. 使用文件或configSource属性以及SetParameters指向不同的configuration文件,但是必须相对于web根目录。
  5. 使用发布configuration文件 请参阅使用发布configuration文件部署现有包

谢谢

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

我认为选项#2会让你或开发者头疼。 您将必须确保部署中的设置部分从configuration中删除,或者将其locking在服务器上,以使本地configuration无法添加它们。

对于选项#3,你将不得不做多个版本来获得转换的configuration文件。 如果你有大量的网站部署,这也不是很可行。

选项#4可以工作,但是这里可能会遇到限制。 它要么整个部分是在一个单独的文件或全部在主文件,所以没有中间。

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

我可以详细说一下选项#1 /#3并比较它们。 以前的回复是不准确的,说你必须用PackageWeb多次构build,你只需要构build一次。

选项1:Parameters.xml和SetParameters.xml

在这种方法中,您将在您的Web项目中创build一个parameters.xml文件,该文件将声明其他Web部署参数。

构buildWeb Deploy包时,会在包中创build在parameters.xml中声明的参数。 当创build这个web部署包时,web.config文件将根据构buildconfiguration( 现在也可能是特定于configuration文件的转换 )进行转换 。

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

选项3:PackageWeb

PackageWeb扩展了包过程,以便在创buildWeb部署包时,包中会包含web.config变换以及可以执行变换的程序集。

除此之外,当您创buildWeb部署包时,将生成publish-interactive.ps1文件。 你可以使用这个文件来发布你的包。 它会提示你; 要应用的web.config转换,Web部署参数值以及Web部署端点信息本身。 当您运行发布时,您给出的值将保存到publish-configuration.ps1.readme 。 您可以删除.readme和publish-interactive.ps1将使用该文件中的值来自动发布。 您也可以指定要用于设置的文件 。

如果您在VS创buildWeb部署包时创build了一个parameters.xml文件,则会导致包中包含Web部署参数。 PackageWeb将挑选出来并提示你。

那么这些方法有什么区别呢?

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

使用选项#1,您必须手动创buildSetParameters.xml文件。 使用PackageWeb,您可以使用WhatIf选项运行整个过程。 系统会提示您input值,并为您创build设置文件。

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

如果您希望尽可能简单地使用最less的移动部件,我会推荐选项#1,因为如果需要,您可以直接调用msdeploy.exe。

如果你想简化自动发布,你更喜欢PowerShell的标准命令提示符然后尝试PackageWeb。

我在PackageWeb上有一个5分钟的video,位于http://sedodream.com/2012/03/14/PackageWebUpdatedAndVideoBelow.aspx 。 如果你正在发布web部署包,我鼓励你们尝试一下。 如果它不能满足您的需求,请让我知道,因为我们可能会以更正式的方式使用我们在PackageWeb中学到的东西。

我们使用#5,它工作得很好。 使用MSBuild发布configuration文件提供了一堆灵活性(项目是特别有用的)。

在我们的部署pipe道中,只有网站包,构build/部署目标和发布configuration文件可用于部署阶段。 源代码(包括项目文件)仅在构build/testing阶段使用。

仅供参考,我们特意使用了发布configuration文件,因为您将很快遇到保持特定于环境的服务器详细信息/凭据,跳过子句和参数值的问题。 WPP /发布configuration文件跟踪pubxml文件中的所有这些东西,MSBuild的function允许一些很好的常规configuration“助手”,但是“嘈杂”的任务。

我最终通过在TeamCity上运行的msbuild来创build可以被OctopusDeploy使用的NuGet包来解决这个问题。

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

八达通包装

configurationconfiguration转换