我很想听听关于如何最好地将代码从开发服务器移动到生产服务器的想法。
一个陷阱列表,不要做这个列表会很有帮助。
任何有助于自动化步骤的工具。
给定这些文件列表,备份现有代码
记录这些文件从开发到生产的部署
如果部署或应用程序以任何方式失败,则允许更轻松地回滚...
我从来没有在一家有部署过程的公司工作过,除了一个非常手动的从开发到生产的 ftp 文件。
你在你的公司、部门等做了什么?
谢谢...
是的,我是一个 Coldfusion 程序员,但文件就是文件,这应该是与语言无关的问题。
我很想听听关于如何最好地将代码从开发服务器移动到生产服务器的想法。
一个陷阱列表,不要做这个列表会很有帮助。
任何有助于自动化步骤的工具。
给定这些文件列表,备份现有代码
记录这些文件从开发到生产的部署
如果部署或应用程序以任何方式失败,则允许更轻松地回滚...
我从来没有在一家有部署过程的公司工作过,除了一个非常手动的从开发到生产的 ftp 文件。
你在你的公司、部门等做了什么?
谢谢...
是的,我是一个 Coldfusion 程序员,但文件就是文件,这应该是与语言无关的问题。
好的,我会咬的。这个问题的技术方面,其他答案已经涵盖。但真正的问题是过程问题。真正的重点应该是确保有意义的软件开发生命周期(SDLC) - 规划、开发、验证和部署。我将依次介绍每个。您想要的是每个阶段的可重复活动。
阐明和记录要交付的内容。通常门票或用户故事就足够了。有时您会做更多事情,例如客户签署的书面需求文档,然后将其转换为各种工件,例如书面用例- 最终您想要的是记录在电子系统中的内容,您可以在其中将代码更改与它相关联. 这导致我...
还记得那个电子系统吗?好的。现在,当您对代码进行更改(您承诺进行源代码控制对吗?)时,您会将这些更改与该电子系统中的某些内容相关联——通常是票证。我喜欢Trac,但也听说过关于Atlassian 套件的好消息。这为您提供了可追溯性。因此,您可以断言已完成什么以及如何完成。然后你可以使用这个系统和源代码控制来创建一个构建- 任何更改所需的所有位 - 以及在源代码控制中构建的标签- 这就是你的更改列表。更好的是,构建包含所有内容,以便它是可以轻松部署的独立实体。
也许是许多商店忽略的最重要的一步——后果自负。在生产过程中发现的缺陷比在流程早期发现时的修复成本要高得多。在许多商店中,验证通常是唯一发生这种情况的步骤 -所以请确保您的商店这样做。
程序员不应该这样做!这就像狐狸看鸡舍一样。无论谁在做,都应该遵循某种计划。我们使用测试链接。这意味着每个构建都以相同的方式进行验证,因此您可以识别回归错误。而且,这个构建应该以与您在生产中相同的方式部署。
如果一切顺利(我们通常需要至少 3 个构建),则构建被验证。这会...
这应该不是事件,因为您正在按照与测试相同的步骤进行验证构建。可能首先它会到达一个临时服务器,那里有一个自动复制过程,但关键是此时这不应该成为问题,因为您使用相同的过程进行了验证。
就知道什么在哪里而言,您真正想要的是一种将更改组合在一起的合乎逻辑的方式。这就是构建的想法出现的地方。它确实是应该在 SDLC 中的步骤之间进行分隔的单元。如果你已经拥有了,那么理解给定系统状态的能力就变得微不足道了。
简而言之...
你应该从一些源代码控制解决方案开始——可能是 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这样的持续集成解决方案。我还建议阅读“实用项目自动化:如何构建、部署和监控 Java 应用程序”。
ColdFusion 的一个特定问题是确保在需要时清除应用程序范围(以更新任何单例组件)。这里的一种常见方法是使用一个 URL 参数,该参数导致 onRequestStart() 调用 onApplicationStart()。您可能还必须清除受信任的缓存。
查看Ant或Maven - 这些是 Java 世界中使用的构建和部署工具,它们可以帮助您复制 / ftp 文件、备份甚至从 SVN 中检查代码。
您可以使用这些工具自动执行部署步骤,例如 Ant 将允许您将一组任务声明为部署的一部分。所以你可以,例如:
实际上,您几乎可以做任何您希望花时间使用 Ant 的事情。Maven 更加结构化(并且更新),您可以在此处查看对差异的讨论。
希望有帮助!
我们使用一个名为 AnthillPro 的系统:http ://www.anthillpro.com
它是商业软件,但它允许我们跨多个服务器和操作系统完全自动化我们的部署过程(我们目前将它用于 ColdFusion 和 Java,但它可以用于大多数语言。它有大量的第 3 方集成:
http://www.anthillpro.com/html/products/anthillpro/tool-integrations.html