部署:MSI包与脚本

时间:2009-12-29 22:36:50

标签: deployment windows-installer

我的任务是调查我们的部署,并了解它们可以简化的地方。现在我们有4种不同的配置(Debug / Dev,Test,Staging,Release)和4 * .config文件。我们的任务将根据活动配置使用适当的* .config预构建时间覆盖app / web.config。创建了一个MSI,我们在发布之夜对该组件进行了全面部署。

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

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

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

3 个答案:

答案 0 :(得分:2)

MSI专业人士:

  • 应用程序/服务/站点像大多数其他Windows应用程序一样安装和注册,并显示在“添加/删除程序”中
  • 一些内置支持重新安装,升级
  • 对安装Windows服务/ IIS站点/低级Windows功能有一些内置支持

MSI缺点:

  • 一旦你“陷入困境”,似乎真的很神秘
  • 似乎比使用自定义脚本更难定制

脚本专业人士:

  • 更容易自定义,但某些步骤可能需要大量/神秘的脚本(使用IIS,低级别的计算机管理)
  • 不必处理MSI的低级怪异

脚本缺点:

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

我遇到的有助于MSI的一件事是WiX(http://wix.sourceforge.net/),但即便是WiX在很多方面看起来也很神秘。我们使用MSBuild和WiX的组合来进行自动构建和部署/安装,它对我们来说没问题。

总的来说,我可能更倾向于在脚本上进行MSI / WiX(或其他安装工具包)部署。 MSI是在Windows上进行安装的标准方式,一旦你开始工作,你通常不需要做太多改变。在将最终的MSI包放在一起之前,MSBuild或其他一些构建框架(NAnt等)可用于设置部署(重命名文件,执行字符串替换等)。

答案 1 :(得分:1)

运行一家构建网络应用程序五年的开发公司,我们一直在努力解决这个问题并尝试了一系列解决方案。以下是一些提示:

  • 始终用您的代码替换整个网络目录(除非您有网站生成的内容,例如CMS)。执行此操作非常快,如果文件遗留下来,增量部署可能会引入幻像错误。
  • 让您的构建过程(Nant,MSBuild,无论如何)修改每个环境的.config文件,并为您推送的内容构建。或者,您可以使用注册表设置,以便.config文件相同,但这意味着每个环境都有一台专用计算机。可能是也可能不是问题。
  • 不要改变生产。如果你需要进行更改(网站上的拼写错误),那么在开发中进行更改是首要任务,这样你就不会在下次推送时覆盖它们。
  • 如果您没有使用MSI,请确保您有回滚过程。在更改之前保留网站的副本确实有助于在推出期间出现无法解释的问题。

我不知道这些提示指向MSI或脚本。我认为这是你最熟悉的问题。 MSI很难定制,但易于运行和管理。 Microsoft拥有许多工具来管理组织或服务器场中MSI的部署。脚本可能需要自定义工具和自定义工具或生产端的大量手动工作。

我们使用Nant和自定义部署工具运行脚本。这些天(VS2008)构建部署包更容易。

答案 2 :(得分:1)

你最好的选择是让一个像样的MSI构建者来完成这项工作 - 我在谈论InstallShield等(有几个,所以要四处看看)。虽然这些费用总是很高,但它们可以为您节省大量的时间/金钱/痛苦。话虽如此,痛苦并没有完全消除,只是减少了:)

您需要做的任何棘手事情都可以作为msi中的自定义任务完成 - 您甚至可以使用Visual Studio附带的安装程序构建器(如果您使用的是VS)执行此操作。

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

msiexec /i "MyInstaller.msi" CONFIG=test

您可以非常轻松地安装脚本,但如前所述,您还需要编写卸载脚本。使用安装脚本可以阻止您在获得完成后获得产品的Windows认证。但这并不意味着您不应该使用安装脚本,它们可能非常适合您的需求。或者,您可以通过在msi中将脚本作为自定义操作运行来查看使用组合脚本/ msi方法。