代码/ Web应用程序部署的最佳实践?

时间:2011-02-15 15:04:46

标签: coldfusion web-deployment

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

一个陷阱清单,不做这个清单会有所帮助。

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

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

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

  3. 如果部署或应用程序以任何方式失败,则允许更轻松的回滚...

  4. 我从未在一家拥有部署流程的公司工作,除了从开发到生产的非常手动的ftp文件。

    你在公司,部门等方面做了什么?

    谢谢...

    是的,我是一名冷冻程序员,但文件是文件,这应该是语言无关的问题。

4 个答案:

答案 0 :(得分:6)

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

规划

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

开发

还记得电子系统吗?好。现在当你对代码进行更改时(你正在提交源控制权吗?),你将这些变化与这个电子系统中的某些东西联系起来 - 通常是门票。我喜欢Trac,但也听过Atlassian's suite的好消息。这为您提供可追溯性。所以你可以断言已经做了什么以及如何做。然后你可以使用这个系统和源代码控制创建一个构建 - 所有改变所需的位 - 以及在源代码控制中构建的标记 - 这是你改变了什么的列表。更好的是,让构建包含所有内容,这样它就可以轻松地在其自身上部署独立实体。然后为...提供构建。

验证

也许是许多商店忽视的最重要的一步 - 这是他们自己的危险。生产中发现的缺陷在修复过程中会更加昂贵,然后才会在过程中发现它们。验证通常是许多商店中发生这种情况的唯一步骤 - 所以请确保你这样做

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

如果一切顺利(我们通常需要至少3个版本),则构建验证。这就是......

部署

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

结论

了解而言,您真正想要的是将变更组合在一起的合理方式。这就是构建的概念所在。它实际上应该是SDLC中各步骤之间的区分。如果你已经拥有它,那么理解给定系统状态的能力变得微不足道。

答案 1 :(得分:1)

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

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

  1. 使用SVNAnt或类似于目录
  2. 查看修订版
  3. 将这些文件复制(可能先拉链)到备份目录
  4. 将所有文件FTP到您的网络服务器
  5. 创建报告以通过电子邮件发送给说明部署的团队
  6. 真的,你几乎可以做任何你想花时间使用Ant的东西。 Maven有点结构化(更新),你可以看到对差异here的讨论。

    希望有所帮助!

答案 2 :(得分:1)

简而言之......

你应该从一些源代码控制解决方案开始 - 可能是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这样的持续集成解决方案。我还建议阅读&#34; Pragmatic Project Automation: How to Build, Deploy, and Monitor Java Applications&#34;。

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

答案 3 :(得分:0)

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

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

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