2009-02-05 162 views
14

在我的公司,我们有一组8位网站开发人员为我们的商业网站(完全用PHP编写,但这应该不重要)。小组中的每个人都在同一时间处理不同的项目,并且每当他们完成任务时,他们立即部署它(因为这些天业务正在快速发展)。如何将网站部署到您的网络服务器?

目前开发发生在一个共享服务器上,所有开发人员使用相同的代码库(使用RCS“锁定”远离其他文件的文件)。部署到期后,将更改后的文件复制到“登台”服务器,然后同步脚本将文件上传到我们的主网站服务器,并将其分发到其他9台服务器。

相当愉快,网络开发团队要求我们提供帮助,以提高工艺(后我们抱怨了一会儿)现在我们设立了开发环境的想法如下:

  • 一开发服务器与虚拟目录,使每个人都有自己的代码库,
  • SVN(或任何其他VCS)来追踪变化的
  • 测试拿着最新代码检查中央服务器

现在的问题是:我们如何设法将更改的文件部署到服务器上,而不会意外上传其他项目中的错误?我的第一个想法是简单地从存储库导出最新的修订版,但是这不会完全控制这些文件。

你如何管理这种情况?你有什么样的部署脚本?

(作为一个特殊的挑战:网站已有机增长在过去的10年里,这样的项目不是在小块分手了,但对于一个特定功能的文件遍布目录树)

回答

10

Cassy - 在完全按顺序完成源代码管理之前,您显然还有很长的路要走,但听起来像您在路上!

有个别的沙箱肯定会有助于事情。然后确保网站始终只是一个干净的检查特定的版本,标签或从颠覆分支。

我们使用git,但我们有一个类似的设置。我们用一个版本号来标记一个特定的版本(在git中,我们也可以添加一个描述到标签;对于发布笔记很好!),然后我们有一个脚本,任何有权访问“执行发布”的人都可以运行,需要两个参数 - 哪个系统将要更新(数据中心,如果我们正在更新测试或生产服务器),然后是版本号(标签)。

脚本使用sudo在共享帐户中运行发行脚本。它执行相关版本的签出,最小化JavaScript和CSS 1,将代码推送到环境的相关服务器,然后重新启动需要重新启动的内容。发行脚本的最后一行连接到其中一个web服务器,并尾错误日志。

ourwebsites我们在每个页面的底部包含一个html注释,其中包含当前的服务器名称和版本 - 可以很容易地看到“现在正在运行什么?

1和像一堆其他的整理工作...

+0

这是一个非常好的发布方式。好样的! – 2009-02-06 02:46:37

0

你需要看看:

  • 持续集成
  • 上的代码签入运行单元测试,以检查它是免费的错误
  • 如果它包含一个错误潜在拒绝代码
  • 有每晚构建
  • 仅释放了最后的构建,这是没有错误

您可能没有获得一个完美的解决方案,尤其不能在第一,但越用你选择的解决方案,更舒适人人将会得到并能够对改进提出建议。

+0

不幸的是,如果构建没有bug,那么就没有办法确定。其实。在目前的工作方式中没有这样的东西...... – 2009-02-05 10:33:08

+0

听起来就像你在跳枪 - 这些都是很好的工作,但他们必须先走才能跑。 – 2009-02-05 17:49:52

0

我们每天晚上检查ant的稳定性。并使用ant脚本进行部署。配置和使用非常简单。

1

你或许可以使用Capistrano的,即使是更红宝石也有一些articles,描述了如何使用它的PHP

我想Phing可以与CVS一起使用,但不能与SVN一起使用(至少我上次读过的内容)

还有一些模拟Capistrano的项目,但是用PHP编写。

否则也有一个定制的解决方案:

  1. 标记文件要部署。使用标签在
    特定目录
  2. 符号链接的目录到当前 文档根
  3. 结账文件(易回滚到 以前的版本)
2

您应该考虑使用分支与合并的如果他们对共享代码库进行了大量更改,则可以使用单个项目(在相同的代码库中)。

我们通常有一个本地开发环境用于测试未定义代码(您根本不想提交非功能代码),但是该开发环境甚至可能位于独立服务器上(用于本地web服务器)使用共享文件夹。但是,承诺代码应在部署到生产前部署到临时服务器进行测试。

0

我昨天给了similar answer另一个问题。基本上你可以在分支机构工作并在上线之前整合。

你必须让你的头脑最重要的事情是,你正在处理更改文件,而不是单个文件。一旦你有分支机构,就没有真正的当前版本,只有版本有不同的变化。

1

自然检查SVN为存储库,Trac跟踪的东西,和Apache Ant部署。

基本过程是在Subversion中管理,跟踪Trac中的存储和开发人员,并使用Ant部署脚本将您的站点推出所需的设置。 Ant允许您轻松地将项目部署到特定位置。 (开发/测试/产品)等。

相关问题