【问题标题】:Recommendations for turning multiple solutions/projects into a single msdeploy package?将多个解决方案/项目转换为单个 msdeploy 包的建议?
【发布时间】:2012-10-19 14:55:42
【问题描述】:
我们的主网站是 10 个独立的 ASP.NET 项目和应用程序的集合。目前,在新服务器上进行完整部署需要运行十个单独的 msdeploy 作业;每个应用程序都被构建、配置(使用配置转换)和打包,但我们没有任何解决方案可以将所有包部署为单个操作。
我可以看到在这种情况下可能起作用的几种可能性,但我很想听听任何成功或失败的人在设置类似的东西方面的意见:
一个包含包和 deploy.cmd 脚本的文件夹,其中包含一个“主脚本”,它将依次调用每个单独的应用脚本并将该应用部署到目标服务器。
使用暂存服务器,我们使用生产配置从 TeamCity 部署每个包的最新版本,然后使用 msdeploy 将该服务器捕获到单个巨大的 msdeploy ZIP 包中,然后将其部署到每个生产服务器上作为单个 msdeploy 步骤。
创建一个庞大的 Visual Studio 解决方案,它引用我们代码库中的每个项目(可能通过 svn:externals?),编译和交叉引用它们,因此支持使用单个 msbuild 作业来创建一个巨大的包含我们整个代码库的整体包,由源代码控制中的最新版本构建并针对目标环境进行配置。
我研究了 Troy Hunt's excellent "You're Deploying it Wrong" series 和 Scott Hanselman's "Web Deployment Made Awesome" 文章,但我认为我正在寻找一种超越这两种方法的方法,它可以整合多个项目和应用程序,而不必在一个步骤中从源代码构建它们 -有什么想法吗?
【问题讨论】:
标签:
msbuild
continuous-integration
teamcity
msdeploy
webdeploy
【解决方案1】:
我们公司有一个非常相似的场景,我们使用WIX创建了一个安装包。我们的配置转换发生在安装时,所以现在我们创建一个构建,然后通过 MSI 安装包将其部署到每个服务器。 WIX 非常灵活,但学习曲线也很陡峭。我们使用自己的自定义操作修改配置,但也可以通过其他方式完成。
我们使用 Team Foundation Server 和 MSBuild 进行构建。这很简单,但确实需要一些工作才能正确设置尽可能多的项目和解决方案。
我们研究过甚至尝试过的其他选项有:
- InstallShield - 不够灵活。
- 编写我们自己的 C# 安装程序 - WIX 已经想到了我们的一切
都在努力完成,为什么要重新发明轮子?
- 只是说要解决所有问题并手动安装 - 2 或
在 WIX 和 MSBuild 中 3 个月的开发时间很容易支付
去年我们手动做事的时间。
我认为 Visual Studio 中内置的部署工具是为只需少量部署的单个应用程序而设计的。听起来您需要外部工具和开发工作来更快地进行部署,并消除手动操作的需要。这就是我们投资上述解决方案的原因,它确实得到了回报。
【解决方案2】:
我会选择 Installshield。
- Installshield 最新版本支持创建 webdeploy 包。
- 您可以为单个项目中的所有应用程序定义 IIS 配置,如果您想为所有 Web 应用程序通过单独或单个版本创建包,则可以创建版本。
- Installshield 项目有一个对象模型,您可以在其中自动执行构建脚本中的所有任务,而且这些项目是简单的 xml 文件,如果需要,您还可以在自动化脚本中进行修改
- 开发人员可以单独修改更新 WixXML 项目,您可以通过构建脚本将这些项目构建作为合并模块添加到您的 installshield 项目,只需对 installshield 项目 xml 进行一些小调整(至少在 2011 版本中,不支持这部分通过 installshield 但可以完成)
- 您甚至不需要为遵循相同模式的 Web 应用程序组修改 Visual Studio 项目,也不需要手动修改 installshield 项目来为这些情况添加新的 Web 应用程序,您可以为新的 Web 应用程序创建包而无需干预根据根 VS 构建输出为 installshield 项目自动化任务设置一次构建脚本