【问题标题】:Best Practices for Code/Web Application Deployment?代码/Web 应用程序部署的最佳实践?
【发布时间】:2011-02-15 15:04:45
【问题描述】:

我很想听听有关如何最好地将代码从开发服务器移动到生产服务器的想法。

一个陷阱列表,不要做这个列表会有帮助。

任何有助于自动化步骤的工具。

  1. 根据这些文件列表备份现有代码

  2. 记录这些文件从开发到生产的部署

  3. 在部署或应用程序以任何方式失败时允许更轻松地回滚...

我从来没有在一家有部署过程的公司工作过,除了一个非常手动的从开发到生产的 ftp 文件。

你在你的公司、部门等做过什么?

谢谢...

是的,我是一个 Coldfusion 程序员,但文件就是文件,这应该是与语言无关的问题。

【问题讨论】:

  • IMO,这与语言无关。如何部署 ASP.NET/MVC / SQL Server 2008 / IIS7 / Windows Server 2008 项目的答案将与 PHP / MySQL / Apache / Linux 项目截然不同。
  • 很公平,但是上帝,大声笑,分散我的问题的注意力有那么重要吗?我只是想帮助了解人们如何部署他们的代码,并确保他们不会搞砸。
  • “分散注意力”?如果你这么说。我只是认为你会得到更多帮助来寻求更准确的答案。
  • 没关系,我只是觉得你的回答会分散我的问题的焦点,让我无法回答,并更多地陷入 windows 与 linux 无休止的无意义争论。但我承认我很好奇,你如何处理 linux 中的代码/Web 应用程序部署?我为我的粗鲁道歉。我只是想向别人学习...

标签: coldfusion web-deployment


【解决方案1】:

好的,我会咬的。这个问题的技术方面,其他答案已经涵盖。但真正的问题是过程问题。真正的重点应该是确保有意义的software development life cycle (SDLC) - 规划、开发、验证和部署。我将依次介绍每个。您想要的是每个阶段的可重复活动。

规划

阐明和记录要交付的内容。通常门票或用户故事就足够了。有时你会做更多的事情,比如客户签署的书面需求文档,这会被翻译成各种工件,例如written use cases - 最终你想要的是记录在电子系统中的东西,你可以在其中将代码的更改与它相关联.这导致我...

发展

还记得那个电子系统吗?好的。现在,当您对代码进行更改(您承诺进行源代码控制对吗?)时,您会将这些更改与该电子系统中的某些内容相关联——通常是票证。我喜欢Trac,但也听说过Atlassian's suite 的好消息。这为您提供了可追溯性。因此,您可以断言已完成什么以及如何完成。然后你可以使用这个系统和源代码管理来创建一个 build - 任何更改所需的所有位 - 以及内置源代码管理的 tag - 这是你的更改列表.更好的是,构建包含所有内容,以便它是可以轻松部署的独立实体。然后将构建交付给...

验证

也许是许多商店忽略的最重要的一步 - 后果自负。在生产过程中发现的缺陷比在流程早期发现时的修复成本要高得多。在许多商店中,验证通常是唯一发生这种情况的步骤 - 所以请确保您的商店这样做。

这不应该由程序员来做!这就像狐狸看鸡舍一样。无论谁在做,都应该遵循某种计划。我们使用Test Link。这意味着每个构建都以相同的方式进行验证,因此您可以识别 回归 错误。而且,此构建的部署方式应与您在生产中的部署方式相同。

如果一切顺利(我们通常需要至少 3 次构建),则构建已验证。这就是……

部署

这应该不是事件,因为您正在按照与测试相同的步骤进行经过验证的构建。可能首先它会到达一个暂存服务器,那里有一个自动复制过程,但关键是此时这不应该成为问题,因为您使用相同的过程进行了验证。

结论

就知道什么在哪里而言,您真正想要的是一种将更改组合在一起的合乎逻辑的方式。这就是 构建 的想法出现的地方。它确实是应该在 SDLC 中的步骤之间进行分隔的单元。如果你已经拥有了,那么理解给定系统状态的能力就变得微不足道了。

【讨论】:

  • 很好的答案。然而,很多时候,除了程序员之外没有其他人可以做这项工作。但在我工作过的公司中,团队的结构和人数差异很大。但谢谢你措辞得体的回答。
【解决方案2】:

查看Ant 或Maven - 这些是Java 世界中使用的构建和部署工具,可以帮助您复制/ftp 文件、备份甚至从SVN 中签出代码。

您可以使用这些工具自动执行部署步骤,例如 Ant 将允许您将一组任务声明为部署的一部分。所以你可以,例如:

  1. 使用SVNAnt 或类似于目录的方式签出修订版
  2. 将这些文件复制(可能先压缩)到备份目录
  3. 将所有文件 FTP 到您的网络服务器
  4. 创建报告以通过电子邮件发送给团队,说明部署情况

真的,您几乎可以做任何您希望花时间使用 Ant 的事情。 Maven 更加结构化(并且更新),您可以看到关于差异的讨论here。

希望有帮助!

【讨论】:

  • 我听说过这些工具,您觉得如何使用它们,以及您自己的经验中遇到的任何问题?
  • 设置这些过程需要时间,我们实际上正在重新进行部署以使用 Ant,但我非常有信心它会正常工作。一旦设置,它确实使可重复的部署变得轻而易举。我们使用 Ant 进行 JUnit 自动化测试,效果很好。 Ant 非常成熟并得到了很好的支持。
【解决方案3】:

简而言之……

您应该从一些源代码控制解决方案开始 - 可能是 Subversion 或 Git。一旦到位,您就可以创建一个脚本来生成源代码的干净构建并将其部署到您的生产服务器。

您可以使用简单的批处理脚本或使用 Ant 之类的工具来实现更多控制。下面是一个使用 Subversion 的批处理文件的简单示例:

svn copy svn://path/to/your/project/trunk -r HEAD svn://path/to/your/project/tags/%version%
svn checkout svn://path/to/your/project/trunk -r HEAD //path/to/target/directory

Ant 使自动运行单元测试和同步目录等操作变得容易。例如:

<sync todir="//path/to/target/directory" includeEmptyDirs="true" overwrite="true">
  <fileset dir="${basedir}">
    <exclude name="**/*.svn"/>
    <exclude name="**/test/"/>
  </fileset>
</sync>

这实际上只是一个起点。下一步可能是像Hudson 这样的持续集成解决方案。我还建议阅读“Pragmatic Project Automation: How to Build, Deploy, and Monitor Java Applications”。

ColdFusion 的一个特定问题是确保在需要时清除应用程序范围(以更新任何单例组件)。这里的一种常见方法是使用一个 URL 参数,该参数导致 onRequestStart() 调用 onApplicationStart()。您可能还需要clear the trusted cache。

【讨论】:

    【解决方案4】:

    我们使用一个名为 AnthillPro 的系统:http://www.anthillpro.com

    它是商业软件,但它允许我们跨多个服务器和操作系统完全自动化我们的部署过程(我们目前将它用于 ColdFusion 和 Java,但它可以用于大多数语言。它有大量的第 3 方集成:

    http://www.anthillpro.com/html/products/anthillpro/tool-integrations.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 2017-07-06
      • 2015-08-05
      • 2014-10-12
      • 2015-02-03
      相关资源
      最近更新 更多