将多个解决方案/项目转换为单个msdeploy包的建议?

时间:2012-10-19 14:55:43

标签: msbuild continuous-integration teamcity msdeploy webdeploy

我们的主网站是10个独立的ASP.NET项目和应用程序的集合。目前,要在新服务器上进行完整部署,需要运行十个单独的msdeploy作业;每个应用程序都是构建,配置(使用配置转换)和打包,但我们没有任何解决方案将所有软件包部署为单个操作。

我可以看到可能在这种情况下工作的几种可能性,但是很想听到任何成功或失败的人在设置类似内容时:

  1. 一个包含packages和deploy.cmd脚本的文件夹,其中包含一个“主脚本”,可以依次调用每个应用程序脚本并将该应用程序部署到目标服务器。

  2. 使用登台服务器,我们使用生产配置从TeamCity部署每个软件包的最新版本,然后使用msdeploy将该服务器捕获到一个巨大的msdeploy ZIP软件包中,然后将其部署到每个生产服务器上作为单个msdeploy步骤。

  3. 创建一个巨大的Visual Studio解决方案,它引用我们代码库中的每个项目(可能通过svn:externals?),编译并交叉引用它们ALL,因此支持使用单个msbuild作业创建一个巨大的单片包,包含我们的整个代码库,从源代码管理的最新版本构建,并为目标环境配置。

  4. 我已经研究了Troy Hunt's excellent "You're Deploying it Wrong" seriesScott Hanselman's "Web Deployment Made Awesome"文章,但我认为我正在寻找超越这些方法的一个步骤,这些方法包含多个项目和应用程序,而不必从源代码构建它们一步 - 任何想法?

2 个答案:

答案 0 :(得分:2)

我们公司的情况非常相似,我们使用WIX创建了一个安装包。我们的配置转换发生在安装时,所以现在我们创建一个构建,然后通过MSI安装包将它部署到每个服务器。 WIX非常灵活,但也有陡峭的学习曲线。我们使用自己的自定义操作修改我们的配置,但也可以通过其他方式完成。

我们使用Team Foundation Server和MSBuild来完成构建。这非常简单,但确实需要做一些工作才能正确设置与我们一样多的项目和解决方案。

我们研究过的其他选项,甚至尝试过:

  • InstallShield - 不够灵活。
  • 编写我们自己的C#Install - WIX已经考虑过我们所做的一切 我们试图完成这个为什么要重新发明轮子?
  • 只是说要全部解决并手动安装 - 2或 WIX和MSBuild的3个月开发时间很容易支付 我们将在去年手工完成工作的时间。

我认为Visual Studio中内置的部署工具是针对单个应用程序而设计的,只需几个部署。听起来您需要外部工具和开发工作来更快地部署,并且无需手动执行操作。这就是我们投资上述解决方案的原因,并且它确实得到了回报。

答案 1 :(得分:-1)

我会选择Installshield。

  • Installshield最新版本支持创建webdeploy包。
  • 您可以为单个项目中的所有应用定义IIS配置,如果要为所有Web应用单独或单个版本创建包,则可以创建发布。
  • Installshield项目有一个对象模型,您可以在其中基本上自动化构建脚本中的每个任务,项目也是简单的xml文件,您也可以根据需要在自动化脚本中进行修改
  • 开发人员可以单独修改更新WixXML项目,您可以通过构建脚本将这些项目构建作为合并模块添加到您的installshield项目中,并对installshield项目xml进行一些调整(至少在2011版本中,此部分不受支持)通过installshield但可以完成)
  • 您甚至不需要为遵循相同模式的Web应用程序组修改Visual Studio项目,既不手动修改您的installshield项目以为这些情况添加新的Web应用程序,您也可以为新的Web应用程序创建包无干预设置一次基于根VS构建输出的installshield项目自动化任务的构建脚本