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

Wha*_*ool 37 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包中的packageweb它允许使用带有msdeploy的web.config转换.
  4. 使用file或configSource属性以及SetParameters指向不同的配置文件,但必须是来自Web根目录的相对属性.
  5. 使用发布配置文件 请参阅 使用发布配置文件部署现有包

谢谢

Say*_*imi 19

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

选项1:Parameters.xml和SetParameters.xml

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

构建Web Deploy包时,会在包中创建在parameters.xml中声明的参数.创建此Web部署包时,将根据构建配置(现在可能还有特定于配置文件的转换)转换web.config文件.

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

选项3:PackageWeb

PackageWeb延伸封装过程,以便在创建Web部署包中的web.config变换被包含在包中,以及能够执行所述变换的组件.

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

如果在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.

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

  • "您可以创建不同的setparameters.xml文件".你如何/在哪里创建它们?默认行为是您在项目中有一个parameters.xml文件,该文件确定哪些参数最终出现在创建的一个setparameters.xml文件中.我们可以在项目中包含多个文件,然后添加一个MSBuild步骤将它们复制到包文件夹,以便它们在MSDeploy运行时可用.有没有其他内置/自动方式来实现这一目标? (2认同)

Ted*_*ott 7

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

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

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

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

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

  • 选项#3(PackageWeb)的FYI您不必多次构建.它将所有web.config转换嵌入到生成的包中.请参阅下面的答案. (3认同)

Ric*_*lay 5

我们使用#5并且效果很好.使用MSBuild发布配置文件提供了一堆灵活性(Items特别有用).

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

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