14

在我的公司,我们的商业网站有 8 名 Web 开发人员(完全用 PHP 编写,但这无关紧要)。小组中的每个人都在同时从事不同的项目,每当他们完成任务时,他们就会立即部署它(因为这些天业务发展迅速)。

目前,开发发生在一个共享服务器上,所有开发人员都在同一个代码库上工作(使用 RCS 将文件“锁定”远离其他人)。当部署到期时,更改的文件被复制到“暂存”服务器,然后同步脚本将文件上传到我们的主网络服务器,从那里它被分发到其他 9 个服务器。

非常高兴的是,Web 开发团队向我们寻求帮助以改进流程(在我们抱怨了一段时间之后),现在我们设置他们的开发环境的想法如下:

  • 具有虚拟目录的开发服务器,因此每个人都有自己的代码库,
  • SVN(或任何其他 VCS)跟踪更改
  • 用于测试保存最新签入代码的中央服务器

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

你如何处理这样的情况?你有什么样的部署脚本在行动?

(作为一项特殊挑战:该网站在过去 10 年中不断发展壮大,因此项目并没有被分成小块,而是一个特定功能的文件分布在整个目录树中。)

4

7 回答 7

10

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

拥有单独的沙箱肯定会有所帮助。接下来确保该网站始终只是对特定修订版、标签或 subversion 分支的干净签出。

我们使用 git,但我们有类似的设置。我们用版本号标记特定版本(在 git 中,我们还可以向标签添加描述;对发布说明很有用!)然后我们有一个脚本,任何有权“发布”的人都可以运行它需要两个参数——将要更新哪个系统(数据中心以及我们要更新测试服务器还是生产服务器),然后是版本号(标签)。

该脚本使用 sudo 然后在共享帐户中运行发布脚本。它会检查相关版本,最小化 javascript 和 CSS 1,将代码推送到环境的相关服务器,然后重新启动需要重新启动的内容。发布脚本的最后一行连接到其中一个网络服务器并跟踪错误日志。

我们的 网站上,我们在每个页面的底部都包含一个带有当前服务器名称和版本的 html 注释——便于查看“现在正在运行什么?”

1和一堆其他类似的家政任务......

于 2009-02-05T10:35:09.453 回答
2

如果它们对共享代码库进行了巨大更改,您应该考虑对单个项目(在同一代码库上)使用分支和合并。

我们通常有一个用于测试的本地开发环境(意思是本地网络服务器)来测试未提交的代码(你根本不想提交非功能代码),但该开发环境甚至可以使用共享文件夹在单独的服务器上。

但是,提交的代码应该在投入生产之前部署到登台服务器进行测试。

于 2009-02-05T10:37:00.493 回答
1

您可能可以使用 Capistrano,尽管它更多地用于 ruby​​,有一些文章描述了如何将它用于 PHP

我认为 Phing 可以与 CVS 一起使用,但不能与 SVN 一起使用(至少我上次读到的)

还有一些模仿 Capistrano 但用 PHP 编写的项目。

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

  1. 您要部署的标记文件。

  2. 使用特定目录中的标签签出文件
  3. 将目录符号链接到当前文档根目录(容易回滚到以前的版本)
于 2009-02-05T10:35:58.687 回答
1

自然地检查存储库的SVN ,跟踪事物的Trac和部署的Apache Ant 。

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

于 2009-02-05T13:53:07.570 回答
0

你需要看看:

  • 持续集成
  • 在签入代码时运行单元测试以检查它是否没有错误
  • 如果代码包含错误,则可能会拒绝代码
  • 每晚构建
  • 仅发布最后一个没有错误的构建

您可能无法找到完美的解决方案,尤其是刚开始时不会,但是您使用所选解决方案的次数越多,每个人都会变得越自在,并且能够就改进它提出建议。

于 2009-02-05T10:21:24.113 回答
0

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

于 2009-02-05T10:23:29.303 回答
0

我昨天对另一个问题给出了类似的答案。基本上你可以在分支机构工作并在上线之前进行整合。

您必须弄清楚的最重要的事情是您正在处理文件的更改,而不是单个文件。一旦有了分支,就没有真正的当前版本,只有具有不同更改的版本。

于 2009-02-05T11:14:22.820 回答