18

我正在考虑一个很好的 php/mysql web 开发工作流程。

有人有一些提示吗?

4

2 回答 2

12

这是我们所做的:

  1. 每个人都在他们的分支中处理他们的项目(代码、测试等)
  2. 当一切看起来不错时,它被合并到 Trunk
  3. phpUnderControl重建 Trunk,运行我们所有的phpUnit测试,构建文档,更新数据库等
  4. 如果一切都通过了,我们合并到稳定
  5. Stable 像 Trunk 一样被完全重建
  6. 稳定被手动提升到我们的生产服务器

我们有一些自定义脚本来处理我们的数据库升级和我们对生产的推动。对于我们的数据库,我们将所有增量保存在一个文件夹中,脚本会根据可用增量检查当前数据库级别,并在需要时应用它们。

为了升级到生产,我们有另一个脚本,它会拉下所有生产数据,然后运行 ​​rsync 来推送更改。

您没有提及您对服务器的控制级别,但总体开发过程与一般开发相同。

于 2009-01-11T03:46:48.443 回答
7

我认为每个人所做的这些事情都略有不同,具体取决于具体的应用。这是我们的设置:

发布前:

  • 每个人都承诺/trunk
  • 当我们想要发布一个版本时,我们将主干复制到/tags/yymmddhhiiss.
  • 我们稳定标签。

稳定后,我们运行部署脚本:

  • 在生产服务器上,签出新标签。
  • 转储数据库。
  • 停止守护进程并关闭 Web 应用程序。
  • 切换符号链接/current以指向新签出的标签。
  • 运行迁移脚本。
  • 重新启动守护程序和应用程序。

如果我们需要快速推送一个小的更改,我们将它合并到当前标签,然后我们可以在服务器上运行一个更简单的修补程序过程:

  • 停止守护进程并关闭 Web 应用程序。
  • svn update
  • 重新启动守护程序和应用程序。

请注意,有些工具旨在构建/自动化这些流程。Phing就是其中之一,Symfony有自己的批处理系统,它曾经是一个名为pake的独立项目。好像这还不够,Zend Framework 即将创建自己的变体。这真的有点乱,但 Phing 可能是使用最广泛的。您还可以使用非 php 特定的东西,例如AntCapistrano。我们只是使用 shell 脚本,它基本上满足了同样的需求。

我们也有一个持续的构建运行,它从主干中检出并运行所有测试。目前我们只有一个基本的 shell 脚本集合,但我们正在考虑切换到PhpUnderControlxinc

迁移步骤也许值得解释一下。Theese 包含对数据库的更改,以及必须为新版本运行的其他任务。目前我们的迁移有点简单;我们只是有一个包含一堆.php.sql脚本的文件夹,并且在迁移期间,这些是按顺序运行的。我们跟踪已运行哪些更改的方法是migrations在创建新标签后立即清空文件夹。不过,使用数据库记录已运行的更改可能会更聪明。为此,我们考虑采用类似ruckusing的方法。

于 2009-01-11T12:24:28.743 回答