【问题标题】:Automate Deployment for Web Applications? [closed]自动部署 Web 应用程序? [关闭]
【发布时间】:2010-09-07 22:18:21
【问题描述】:

我的团队目前正在尝试自动部署我们的 .Net 和 PHP Web 应用程序。我们希望简化部署,并避免手动操作带来的麻烦和许多令人头疼的问题。

我们需要一种解决方案,使我们能够:

- Compile the application  
  - Version the application with the SVN version number
  - Backup the existing site
  - Deploy to a web farm

我们所有的应用程序都使用 SVN 进行源代码控制,我们的 .Net 应用程序使用 CruiseControl。 我们一直在尝试使用 MSBuild 和 NAnt 部署脚本,但效果有限。我们过去也使用过 Capistrano,但希望尽可能避免使用 Ruby。

还有其他可以帮助我们的部署工具吗?

【问题讨论】:

标签: .net php deployment web-applications


【解决方案1】:

Fabric。看起来小,简单,程序。用 Python 编写,因为 Ruby 是一个禁忌(为什么?)。

【讨论】:

  • 您是否建议将此作为构建自动化工具?我知道 SSH 非常适合安全传输,但这如何使部署更容易?
【解决方案2】:

查看设置工厂(来自靛蓝玫瑰)。它的功能非常强大。它使用 Windows 安装程序 API。它可能可以满足您的需求。

【讨论】:

    【解决方案3】:

    我已经使用Visual Build Pro 多年了,它非常流畅且易于使用,并且内置了许多标准操作(如您提到的那些)。

    【讨论】:

    • 为 Kinook 的 Visual Build Pro 点赞
    【解决方案4】:

    我使用 Puppet、Makefiles 来构建 RPM,并使用 Bamboo 来为我做这件事。我的系统没有直接应用,我对 Windows 世界也不是很熟悉,但是有一些可移植的模式。

    我的 make 设置允许我为构成我的应用程序的所有内容(php 库、php 网站、perl 模块、C 应用程序等)构建 RPM。这可以手动调用,也可以通过 Bamboo 调用。我将这些 RPM 转移到 yum 存储库和 puppet 句柄中,确保在集群中安装最新(或正确)版本的软件。

    您能否自动将软件包构建到 MSI 中?我认为 Puppet 可以管理 Windows 中软件包和版本的安装。

    【讨论】:

    • Puppet for Windows 是我正在研究的东西。 Windows 的 MSI 文件比我想象的要麻烦得多。 MsDeploy 包含部署到 IIS 服务器的语义(具有关于应用程序池、acls 和网站/Web 应用程序的知识),因此将 msdeploy 调用映射到 puppet 的状态查询语言将是最优雅的解决方案。
    【解决方案5】:

    感谢大家的好意建议。我们检查了所有这些,但经过深思熟虑后,我们决定结合 CruiseControl、NAnt、MSBuild 和 MSDeploy 推出自己的产品。

    这篇文章有一些重要的信息: Integrating MSBuild with CruiseControl.NET

    我们的解决方案大致是这样工作的:

    • 开发人员构建应用的“调试”版本并运行单元测试,然后签入 SVN。
    • CruiseControl 看到更新并调用我们的构建脚本...
      • 在构建数据库上运行任何新迁移
      • 用构建服务器配置替换配置文件
      • 构建应用的“调试”配置
      • 运行所有单元和集成测试
      • 构建应用程序的“部署”配置
        • 使用当前主要/次要版本和 SVN 修订版本对 DLL 进行版本化,例如1.2.0.423
        • 将此新版本移动到我们构建服务器上的“发布”文件夹中
        • 删除不需要的文件
      • 如果需要,更新构建服务器上的 IIS

    然后,当我们验证一切都准备好上线/登台时,我们运行另一个脚本:

    • 在实时/暂存服务器上运行迁移
    • MSDeploy:存档当前实时/登台站点
    • MSDeploy:将站点从构建同步到实时/登台

    到了这个阶段还不是很顺利,但现在主要是像魅力一样工作:D

    随着我们对流程进行更改,我将尝试更新此答案,因为现在似乎有几个关于 SA 的类似问题。

    【讨论】:

    • 你的迁移是用什么写的?直接SQL?另外你如何处理配置文件?
    • 我们目前使用 Ruby 迁移。构建脚本调用 rake 并且一切都得到了照顾。但是,我们正在将我们所有的做法转移到 alt.net 中,所以我们很可能很快就会改变这一点。至于配置文件,Cruise Control 会在编译前将 dev 配置替换为自己的构建配置
    • 我假设当您对 DLL 进行版本控制时,您将签入/签出您的 AssemblyInfo 文件。如何配置 CruiseControl 以忽略 AssemblyInfo 文件的 SVC 签入?我正在寻找一个类似的解决方案,我担心这会导致无限的构建循环。
    • 我知道这是一篇旧文章,但是你有没有写过关于这个的任何东西?您的设置听起来像我想要的,但我是 MS 世界的新手,我不确定如何到达那里。
    • 吉姆,我没有,事实上我什至不再在同一家公司了。不过这是个好主意,我想写下来。像 Jenkins/CruiseControl/TeamCity 这样的持续集成解决方案值得一看,因为它们为您所追求的那种流程自动化解决了很多麻烦。
    【解决方案6】:

    我们没有使用 xcopy,而是设法使用带有 UNC 地址的 -source:dirpath 命令到带有 msdeploy 的服务器。关键是 ignoreAcls=true 并删除 msdeploy 字符串中对用户名和密码的调用:

    msdeploy -verb:sync -source:dirpath=\\build\e$\app -dest:dirpath=\\live\d$\app,ignoreAcls=true
    

    该示例将站点从我们的构建服务器的 E 驱动器部署到我们实时服务器上的 D 驱动器。在实时服务器上公开共享或此级别的磁盘访问有一些安全考虑。我们目前正在研究使用受限访问共享文件夹。

    然后,我们将此输出通过管道传输到日志文件,然后将其移至备份存档以供参考。日志文件记录了哪些文件被移动以及何时移动。使用输出管道命令继续上面的示例:

    ... > E:\archive\msdeploy.log
    

    【讨论】:

      【解决方案7】:

      我为此使用 msdeploy。它工作完美。

      关于蚂蚁;对于 .NET 平台,我们有 NAnt,您可以将它与 MSDeploy 结合使用;您可以从您的 Nant 脚本中调用 MSDeploy。

      编辑: 只是为了说清楚;你可以用 msdeploy 做任何事情。使用 Nant 不是必需的。

      【讨论】:

      • 您也可以使用微软希望您使用的 MSBuild,而不是 NAnt。使用各种 contrib 任务库非常好。
      • 我也没有使用 Nant,但这只是作为一个建议,以防真的想继续使用 Nant!
      【解决方案8】:

      Nant 存在的唯一原因是您拥有一个类似于 Ant 的框架,我们可以在其中使用 .NET 语言集编写任务。如果您不想让纯 .NET 开发人员编写自定义任务,我看不出您有任何不能使用 Ant 的理由。仅仅因为您使用 .NET 语言编写应用程序,并不意味着您必须使用 .NET 构建工具。

      【讨论】:

        【解决方案9】:

        没有人提到 Final Builder http://www.finalbuilder.com。它与 Visual build Pro 相当。用于创建自动构建部署工具的良好 GUI

        【讨论】:

          猜你喜欢
          • 2018-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-10
          • 2012-08-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多