6

我目前对我的团队采用的部署方式感到非常困扰......它非常过时,我知道它不能很好地工作。但是我不知道如何改变它,所以请给一些建议......

这是我们当前的设置:

  • 2 个网络服务器
  • 1个数据库服务器
  • 1台测试服务器

当前部署适配

  1. 我们在测试服务器上开发和工作,每个更改都手动上传到测试服务器。
  2. 当更改或功能完成后,我们将更改提交到 SVN 存储库。
  3. 提交更改后,我们将更改上传到第一个网络服务器,每分钟都会运行一个 cronjob 来在服务器之间同步文件。

非常烦人的是,每当我们在同步作业开始时上传文件时,同步的文件就会出现损坏,因为它只上传了一半。另一件事是,每当出现部署故障时,将很难恢复。这些基本上都是我面临的问题,我该怎么办?

此外,由于第一个网络服务器上有文件需要随时同步到其他服务器,所以 cronjob 是有原因的。

P/S:对不起,我忘了提,SVN 服务器是托管的。我们没有太多的控制权,但我相信我可以编辑钩子......

4

3 回答 3

7

使用像Phing这样的部署框架来管理网络服务器的部署并摆脱 cron 作业。基本上,生产系统上的发布不应该自动发生,但只有在您确定当前构建没有损坏之后。它不应该依赖于开发系统。

由于 Phing 使用 XML 和 PHP 来配置和控制部署过程,您可以对过程进行版本控制。这是一个额外的好处,因为您可以保持部署连接到应用程序的特定构建。

为防止生产网站受到部署过程的影响,请考虑将新构建上传到单独的目录中,然后仅对其进行符号链接。如果出现任何问题,您可以轻松地符号链接到以前的版本。

还可以考虑使用 CI 服务器

于 2010-04-13T10:52:27.910 回答
1

我在最后一个地方做了同样的事情。我们所拥有的是:

  • 每个网站一个存储库
  • 每个网站都有一个专门用于实时站点(即/branches/live)和测试站点(即/branches/testing)的分支
  • 2 个可以与 SVN 通信的网络服务器
  • 可以与 SVN 通信的测试服务器
  • 所有服务器都安装了 SVN 命令行客户端

每个网络服务器都是独立运行的,所以他们并不真正了解彼此——这留给了负载均衡器。每台服务器都有一个每 3 小时运行一次的 cronjob,并将每个网站分支的最新版本导出到文件系统上的正确文件夹中。live

在我们的测试服务器上,它是每个网站的分支结帐,没有 cronjob。testing每当开发人员想要在上线之前发布一些内容供用户测试时,他们都会更新这些文件夹。

在开发过程中,trunk对网站进行了提交。当更改准备好进行测试时,它们被合并到测试分支中,并在测试服务器上手动更新结帐。当更改准备好上线时,它们被合并到实时分支中,并且服务器将在一天结束时更新。

在 3 年中,我们只遇到过一个问题,即开发人员犯了错误的事情,不得不回滚网站。

于 2010-04-13T11:03:49.067 回答
0

作为部分修复,在网站上创建一个 URL,当您访问它时触发 rsync 命令,以便您可以控制 rsync 何时运行(显然,您需要确保使用此 URL 访问服务器 1,而不是暴露此 URL对公众)。更好的是,使用 curl 在您使用的任何上传脚本的末尾调用 rsync URL。

于 2010-04-13T10:45:53.893 回答