2009-12-29 81 views
4

我的任务是查看我们的部署,并查看它们可以简化的位置。现在我们有4种不同的配置(Debug/Dev,Test,Staging,Release)和4 * .config文件。我们有一个任务会根据活动配置使用适当的* .config预生成时间覆盖app/web.config。 MSI已创建,我们在发布当晚完成该组件的全面部署。部署:MSI软件包vs脚本

这并不完全理想,因为如果我们改变配置文件中的某些内容,或者在特定的视图中修复拼写,我们必须重新部署整个事情。不要提到MSI偶尔会需要重启。另一个提出的选项是,不是创建MSI,而是创建自定义部署/回滚脚本,并且有能力执行增量发布。

有没有人在这里尝试过部署两种方式?你找到了哪些优点/缺点?有没有第三种方式我们没有想到?

编辑:只是为了澄清一些事情......我们不部署给客户。所有软件都部署到我们的服务器上。 (几个网站和很多的Windows服务)。我们从不改变生产中的东西。我们实际上使用VS内置的系统来创建MSI,所以这部分并不是可怕的部分。对我而言,如果您必须更改1视图,那么重新部署整个网站就没有意义了。我们还必须部署到多个服务器。现在通过在每一个上运行MSI来完成。

+0

自己摸了这样的东西,我发现它非常f @@@ ing痛苦,所以会看这一个...... – spender 2009-12-29 22:41:27

回答

2

MSI优点:

  • 应用程序/服务/网站被安装并像其他大多数的Windows应用程序的注册,并在添加显示出来/删除程序
  • 一些内置的支持,重新安装,升级
  • 有一些内置支持安装Windows服务/ IIS网站/低级别的Windows功能

MSI缺点:

  • 一旦你
  • 似乎更加困难比使用自定义脚本

脚本利弊定制“引擎盖下”看来真是神秘:

  • 容易定制,虽然某些步骤可能需要很多/神秘的脚本(使用IIS,下级计算机管理)
  • 不必处理MSI的低级怪异

脚本缺点:

  • 蝙蝠脚本是不是最读写的语言。 (Powershell更好,但是你必须担心Powershell是否安装在目标机器上)。
  • 低级别的操作需要大量的管理脚本对提交/回滚行为
  • 没有内置支持安装或滚动回(MSI有一些支持内置)

有一件事我已经发现有助于MSI的是WiX(http://wix.sourceforge.net/),但即使WiX在很多方面看起来都很神秘。我们使用MSBuild和WiX的组合来执行自动构建和部署/安装,并且它对我们来说工作正常。总的来说,我可能更倾向于通过脚本对MSI/WiX(或其他安装工具包)进行部署。 MSI是在Windows上进行安装的标准方式,一旦你得到它的工作,你通常不需要改变太多。在构建最终的MSI包之前,MSBuild或其他一些构建框架(NAnt等)可用于设置部署(重命名文件,进行字符串替换等)。

1

运行一家开发Web应用五年的开发公司,我们一直在努力,并尝试了一堆解决方案。这里有一些小贴士:

  • 总是用您的代码替换整个网络目录(除非您有网站生成的内容,如CMS)。这样做非常快,并且增量部署可以在文件留下时引入幻影错误。
  • 让您的构建过程(Nant,MSBuild,不管)为每个环境修改.config文件并构建您所推送的内容。或者,您可以使用注册表设置,以便.config文件相同,但这意味着每个环境都有专用的计算机。可能会或可能不会成为问题。
  • 不要改变生产。如果您需要进行更改(网站上的拼写错误),请在dev中更改最优先级,以便在下次推送时不会覆盖它们。
  • 如果您不使用MSI,请确保您有回滚过程。在改变之前保留网站的副本确实有助于在推出过程中出现无法解释的情况。

我不知道这些技巧指向MSI或脚本。我认为这是你最舒服的问题。微星可能很难定制,但易于运行和管理。微软拥有大量的工具来管理整个组织或农场的MSI的部署。脚本可能需要自定义工具和自定义工具,或者需要大量生产端的手动工作。

我们使用Nant和自定义部署线束运行脚本。现在(VS2008)构建部署软件包要容易得多。

+0

对于这些技巧中的一些,我发现了一些使用msi的web应用程序的部分更新总是引起问题(文件未被正确替换等),所以现在我总是替换除web.config文件(独立更新)之外的所有文件。 – slugster 2009-12-29 23:28:21

1

你最好的选择是得到一个体面的MSI生成器来完成这项工作 - 我正在谈论InstallShield等(有一对夫妇,所以请环顾四周)。虽然这些成本总是很高,但它们可以为您节省大量的时间/金钱/痛苦。话虽如此,痛苦并没有完全消除,只是减少:)

你需要做的任何棘手的事情都可以作为msi中的自定义任务完成 - 你甚至可以使用Visual自带的设置生成器工作室(如果您使用VS)。

我对你的配置文件有一个建议 - 在msi中包含所有四个,然后有一个公共属性,可以从命令行设置。然后,您可以修改该公共属性以安装相应的配置文件(并且将该属性的默认值设置为发布配置安装)。这样,您的客户只需使用msi并获取正确的配置文件,但您的测试团队可以通过更改公共属性的值来获取其配置文件;他们会用做安装的命令行是这样的:

msiexec /i "MyInstaller.msi" CONFIG=test 

你可以做很容易安装脚本,但前面已经提到,你还需要脚本卸载。如果您想完成这些工作,使用安装脚本将阻止您获得产品的Windows认证。但是,这并不意味着你不应该使用安装脚本,它们可能完全适合你的需求。或者,您可以通过将脚本作为msi内的自定义操作运行来使用组合脚本/ msi方法。