部署Web应用程序到分期 – 生产与颠覆

我们正在构build一个Web应用程序,并准备开始部署到生产服务器。 我们正在使用Subversion进行版本控制,而现在我想知道最好的方法是部署到分期还是后来到生产。

现在我们在我们自己的机器上本地开发和testing两个人,并承诺到我们的SVN服务器的登台服务器。

我知道有一个post-commit.tmpl钩子可以运行脚本吗? 有没有人知道这种脚本的好资源。

任何提示,欢迎! 我们正在寻找一种简单的方法来部署,并可能将我们的代码恢复到以前的版本。

Subversion是一个版本控制系统,不是一个部署系统。 不要使用它。 既然你现在正在做一切手工(构build和testing),我也会手动部署,这也意味着你写了一些脚本,检查从颠覆版本的正确版本,并将其部署到任何你想要的环境。

如果你想自动化更多,我会推荐CI服务器或某种部署解决scheme。 我们开始使用Hudson进行testing和部署(至less在沙箱环境中)。 我们不打算把它用于生产。 因为我们还没有检入升级插件。 在研究CI服务器时,我注意到商业系统通常为发布pipe理提供更好的支持。

有几种方法可以做到这一点:

使用构build服务器

我听说过使用CCNET.net或FinalBuilder Server的团队。 基本上,会发生什么是构build脚本有推动最新版本的代码,每次有人进行检查。我不会推荐这用于生产。 这应该适用于临时环境。

我不太熟悉在Linux上构build服务器,但我知道有一些。 还有Ant,甚至可以使用这个脚本。

在临时服务器上放置一个工作副本

只要做一个检查,并映射正确的文件夹是networking应用程序的根。 团队中的某个人将不得不手动更新这个工作副本,但如果有必要,这可以让您灵活地恢复到之前的版本。

注意事项

您需要确保在将网站指向工作副本时排除.svn文件夹。

我不会推荐使用这个Subversion钩子脚本。 您几乎可以使用Linux中提供的任何脚本引擎来执行后提交脚本。 我在Google中input了“post-commit hook script linux”,并得到了一些不错的结果。

这个问题实际上是关于发布程序(和工具)的问题,而不是系统pipe理,但这是我最好的答案:

任何最近的Subversion版本都需要非常关心你的configurationpipe理需求,但是像Peter说的那样,这不是一个部署工具。 一种select是将部署构build到常规的构build基础架构中(例如“进行部署”),并与您的代码一起pipe理您的部署规则。

从configurationpipe理的angular度来看,您需要跟踪应用程序需要运行的所有东西,包括代码,外部库(特定版本),web服务器,操作系统版本等。“make deploy”应该尽力确保所有这些东西在尝试部署新版本之前存在。

像Hudson这样的工具也可以为你处理部署,但是你仍然需要告诉它做什么,我只是希望保持我的configurationpipe理过程尽可能简单。 举一个例子,让Hudson调用“make deploy”,但是在Hudson中没有其他信息存储,你需要恢复到其他机器上重新创build。

你多久会做一些需要部署的版本? 我会考虑一些东西,把你的webapp标记到tags /中,并且有一个post-commit机制,它知道tags / webapp-1.0.4需要被导出到你的webroot。 如果你的webapp很大,请考虑让钩子在/ tmp中放一个特殊的文件,cronjob会每分钟检查一次,并采取相应的措施。

如果您需要更详细的答案,请详细说明您的发布时间表,代码库大小,语言select,操作系统环境和依赖关系。

我们也使用Subversion来控制我们的源代码,但是使用Webistrano从Subversion部署到我们的服务器。

Webistrano是Capistrano的一个Web前端,它是Ruby社区中stream行的部署和自动化工具。 它允许您在Ruby脚本中描述您的部署过程(大部分function都是内置的)。 它非常灵活,易于理解。 部署和回滚部署非常简单,也可以挂钩其他需要完成的任务,如刷新caching或迁移数据库。

我能够通过创build一个新的提交后的文件,具有以下两行:

#!/bin/bash ssh -i /path/to/key-file -pSSH-PORT user@hostname svn update /path/to/project/folder/