部署/更新Web生产代码的最佳方法

将开发环境中的代码部署或更新到现场生产的最佳方法是什么?

我习惯于先使用好旧的filezila; 删除然后上传新的代码到生产服务器,但是这带来了各种各样的问题,停机是主要的。

我也一直在考虑使用Mercurial或Git等VCS。 这是推送实时代码的最佳方法吗?

感谢您的任何见解。

使用像mercurial,git或bzr这样的分布式VCS是一个好主意。

您可以有单独的分支进行生产(甚至可以为特定客户的分支进行自定义)。

我看到的好处:

  • 容易推动修复
  • 容易恢复,如果需要的话
  • 变化的历史
  • 如果有人做了一个修复生产环境,你会看到

无论您的开发生态系统(Rails,Java)还是VCS(GIT,SVN),将代码部署到任何环境的最关键的方面都是持续集成

这里有一些要考虑的事情:

  • 维护一个源代码库。 很明显。 我在一家Java商店工作,我们使用SVN。 不pipe使用什么VCS,能够标记/版本化代码以确保跨环境部署正确的代码非常重要。 请记住,您不是从开发部署到生产部门,而是将代码从源代码pipe理拉到构build机器,并为您的每个环境构build特定的包。
  • 自动化构build过程。 我们将应用程序部署为WAR文件,并使用Ant来创build我们的部署包。
  • 在构build期间执行unit testing。 在unit testing失败的情况下放弃部署是非常重要的。
  • 使用持续集成服务器。 我们用哈德森,并取得了巨大的成功。 这使我们不仅可以部署到所有环境(DEV,SIT,UAT,PROD),而且还可以安排一天中的构build和部署,以确保整个交付过程的健康。

根据你的生产环境的实施,这可能相当微不足道或相当复杂。 以下是一些可以帮助你开始的资源:

  • 持续交付的video
  • 一本关于持续交付的书

这两个资源应该给你足够的想法来创build你自己的过程。

我们使用一个与Webistrano结合的Git仓库。

Git允许开发人员以分散的方式pipe理他们的代码,并具有VCS的所有优点。

Webistrano允许开发人员或合适的pipe理人员将代码推送到开发平台,然后通过点击进入Web界面进入生产平台。 它是为RoR环境devise的工具,但它可以在几乎任何环境下进行less量定制。 Webistrano的另一个优点是它允许在部署失败的情况下进行简单的回滚,这是一个非常好的function。

作为一名系统pipe理员,我无法再离开webistrano。 它使我不再担心开发人员(或系统pipe理员)在部署期间对生产服务器做愚蠢的事情。 它是自动化和直接的。 另一个很大的优势是开发人员不需要系统pipe理员以干净的方式推送代码,他们只需点击一下即可。

更多关于Webistrano的信息: 在这里 。