【问题标题】:Does anybody create installers to deploy internal asp.net web applications?是否有人创建安装程序来部署内部 asp.net Web 应用程序?
【发布时间】:2010-10-04 02:59:49
【问题描述】:

我总是通过 FTP(有时甚至是 xcopy)部署我的 Web 应用程序,然后自己手动运行数据库脚本。

我在 90 年代开始以这种方式进行部署,但最近,我看到了一些带有安装程序的 Web 应用程序。我开始质疑,如果我被锁定在一个过时的过程中。我是一名顾问,我的应用程序通常是内部的,所以我不担心分发和让其他人安装它们。

但我很好奇;有人创建安装程序来部署内部 asp.net Web 应用程序吗?

如果是这样,为什么? (自愿、强制或自动化过程的一部分)

你这样做有什么问题吗?

【问题讨论】:

    标签: asp.net deployment installation release-management


    【解决方案1】:

    绝对。我们用它来做我们所有的应用程序。这样,我们创建安装程序并在 qa 和 uat 环境中运行它以进行测试,我们确切地知道生产中会发生什么。没有人猜测某人可能会按照什么顺序做某事,或者他们是否错过了一步。它使事情变得容易得多。

    哦,我也忘记了自动化过程。我们有适当的系统(Ant Hill Pro),可以自动将其部署到适当的环境中。质量检查人员不必等待完成某件事,因为这一切都在凌晨 2 点完成。如果他们需要使用更新重新运行构建,开发人员会签入代码,我们按下一个按钮,它就会自动部署。无需等待构建工程师,因为他正在开会或生病或其他任何事情。

    【讨论】:

    • 这很好。我首先部署到我们的业务验证服务器,然后从验证服务器复制到生产。但这绝对是使用安装程序的正当理由。
    • 在我们开始使用安装程序之前,我从来没有意识到手动操作是多么痛苦。在所有文件都经过测试后,不必担心会丢失文件或其他东西的人为因素,这不是一件令人头疼的事情。
    • “不必担心人为因素”这也是困扰我的事情。我可以问你一个问题吗?您的 SQLScript 是否包含在您的安装程序中?还是分开的?
    • 我不认为它在安装程序中,但它是通过系统运行的。系统将所有脚本编译成一个主脚本,然后在数据库中再次运行它。我们使所有脚本“可重新运行”,我们在添加等之前检查字段是否存在,因此我们可以再次运行脚本。
    【解决方案2】:

    您总是希望有一种自动化的方式来构建和部署 - 如果您忘记了某个步骤,它会大大减少一次性错误的机会。此外,它还允许您轻松地将部署卸载给其他人,而无需教他们 100 个自定义步骤。无论项目是否为内部项目,所有应用程序都应遵循最佳实践。

    【讨论】:

    • "internal or not" 您是否建议即使对于网络主机也这样做?如果是这样,你如何运行它?你让虚拟主机为你运行它吗?
    • 您无法访问您的主机?如果没有,更重要的是要有一个处理所有部署步骤的构建,这样您就可以告诉他们只运行安装而不是复制这些文件、运行这个脚本、选中这个框等等......
    • 对于我所做的大多数内部应用程序。但我有 2 个客户端在共享虚拟主机上使用应用程序。有了这 2 个客户,我绝对无法运行类似的东西……至少我认为我没有……我一直认为我没有。
    【解决方案3】:

    我个人有点像 OP;通常我只是使用 FTP 进行部署,但通常我的应用程序是内部的,或者在其他项目的情况下,100% 由我管理。

    不过,我最近也一直在考虑这个问题,并开始考虑如何使用正确的部署来改进流程 - 必须记录详细的安装过程可能会很痛苦。

    【讨论】:

    • 是的,这样做的最大问题是整个应用程序在此过程中坏了,手动操作可能需要几分钟,并且观察每一步。
    【解决方案4】:

    我使用Powershell 并发现自动执行许多任务非常容易。一开始你可能会发现有点不同,但最后你会发现这完全取决于 .NET 库的强大功能!!!

    【讨论】:

    • 那么您有一个 PowerShell 脚本来为您自动安装吗?这也是一个有趣的想法。谢谢
    • 是的,约翰,所以我记得我对这些脚本所做的事情是:1.备份上次构建 2.删除不必要的文件 3.配置 web.config 4.获取所有 .js 文件并缩小它们 5. ZIP 和 FTP 之后,我运行另一个脚本以在所需的服务器上实际安装网站。
    【解决方案5】:

    我已使用“Web Setup Project”创建了一个 MSI,该 MSI 为内部应用安装了“Web Deployment Project”的输出。我们的服务器管理员无法完成 50 步手动安装的任务。对于我当前的应用程序,我的服务器管理员不喜欢 MSI 安装程序的“黑匣子”感觉,更喜欢获取一堆文件和 50 步部署手册。 (在这里看到一个模式?问问你的服务器管理员他想要什么。)

    Web 安装项目并没有立即明确如何安装到“默认网站”以外的任何地方,除此之外,它使安装过程可重复并创建了一种内置的回滚方式(只需运行1 版本前的安装程序)。

    这当然假设您的虚拟目录不包含任何用户修改的内容——我不相信 MSI 可以正确合并用户创建的文件和新文件。

    【讨论】:

    • “MSI 安装程序的‘黑盒子’感觉”我绝对可以看到。
    【解决方案6】:

    我们在这里使用“XCopy”部署模型,因为 Ops 人员有自己的方法在服务器上的新 Web 应用程序上设置安全性。

    但是,当我们必须安装使用较新版本 Crystal Reports 的 Web 应用程序时,我们确实需要使用安装程序,因为它必须使用密钥执行一些特殊操作,而且我们没有完整版本的服务器本身的 CR。因此,在使用第三方应用程序时请记住这一点,他们可能需要执行某种 MSI 可以轻松处理的合并模块。

    【讨论】:

    • 当你做 xcopy 的事情时,你只是单独运行 sql 脚本吗?或者您有其他流程吗?
    • 是的,应该加上那两个。通常我会通知 DBA 应用程序已准备就绪,他们会进行数据库迁移,然后我通知 Ops 人员,然后他们会创建 IIS 站点并复制文件。
    【解决方案7】:

    是的……我们有一个需要设置很多先决条件的应用程序……Web 服务、Windows 服务、用户帐户、安全性、文件夹创建、GAC 位等……我全部完成了通过可以干净地安装和卸载的自定义操作进入一个不错的 MSI。在新机器上部署时节省了大约一小时的工作时间。

    许多其他较小的应用程序只是通过将网站发布到本地文件夹然后将内容通过 ftp 传输到目标来部署的。

    【讨论】:

      【解决方案8】:

      这在很大程度上取决于您的项目规模、环境和内部用户群。我很少使用 msi 进行部署,因为我们的操作太小而无法拥有多个环境(SharePoint 除外,这完全不同)。我们开发并使用 VS 将 Web 应用程序部署到开发箱,假设它们被批准然后我们再次使用 VS 部署到 live 箱。

      唯一的附带条件是我们有多个 web.config 副本(附加了 test、dev 和 live),然后我们会根据部署位置从相关文件中删除后缀。

      这可能不是最好的方法(我知道它不是),但它很有效,并且有助于在小规模用户环境中快速部署中小型解决方案。

      【讨论】:

      • +1 感谢您的回答,但我认为对于多环境设置而言,您永远不会太小。设置起来也不困难或昂贵,尤其是在使用虚拟机时。
      • 这取决于您是否是容量紧张的资源。谁来设置这些环境?维护它们?更重要的是,一旦测试环境出现,谁将在测试环境中测试代码?提出你的论点太容易了。如果您有能力进行该设置,那么肯定会更好,当然可以!但是由于资源过多,我无法做到,而且没有其他人。
      【解决方案9】:

      F5ToDebug...

      你说如果你没有时间正确地走捷径可以吗?

      “谁来测试测试环境中的代码?”你自己说过你有 _test 的配置文件 - 为什么这不是一个合适的测试?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多