【发布时间】:2010-11-17 23:06:32
【问题描述】:
我已经阅读了与此问题相关的许多关于 SO 的问题,但我真的找不到任何适合我们情况的好建议。我继承了这个工作流程,我正在努力让它变得更好。
我们的设置
- PHP 代码库(尤其是 Kohana)
- 代码库支持约 60 个站点,每个站点都有独特的模板(即 60 个 QA [质量保证] 域)
- 每个站点都有不同资产和资源的 A 记录(即每个域有 8 个 A 记录)
- 3 名开发人员
- 3 位设计师
- 开发人员拥有用于本地开发的生产服务器的 VMware 映像
- 设计师不
- 用于 QA 的共享物理开发服务器,提交后更新始终将此服务器保持在主干的当前 HEAD
- 生产服务器,根据实时功能更新为不同版本的混合搭配
我们的工作流程
- 开发人员在本地工作,直到完成给定功能,然后将整个功能提交到主干以进行内部 QA。
- 设计人员仅对 CSS/图像/模板进行小幅更改。他们直接提交到主干,QA 自己的更改,并更新生产服务器上的相应文件,一般来说,在他们的 QA 之后立即进行。
- 当功能准备好上线时,生产服务器会手动更新到与该功能相关的每个文件的正确修订号。有时这很简单,有时却很麻烦(很多
svn log调用以查找上游依赖项)。
我们的问题
- 三个不同的开发人员在开发不同的功能,需要不同数量的 QA,我们发现自己经常遇到上游依赖问题。
- 在任何给定时间,我们都无法以编程方式确定哪些功能在生产服务器上,哪些不在。
svn status -u会告诉我们哪些文件不是最新的,但这通常不是一个清晰的功能图。
我所知道的
- 我们的一些问题可以通过生产分支得到缓解。我们至少可以监控哪些功能被添加到生产环境中以及何时添加,尽管这并不能解决上游依赖问题。
- 功能分支是一种选择,我们过去曾尝试过。由于我们的软件每个分支需要 60 个 QA 域,我们在那里遇到了流程管理问题。例如,为每个功能分支创建 480 个(60 个域 x 每个域 8 条记录)A 记录。
- 开发人员分支也是一种选择,但我们的功能 QA 时间会有所不同。在我需要提交其他内容之前,我不能肯定地说之前的功能会超出 QA 范围。
上游依赖示例
- 开发人员 A 在管理和前端都添加了新的幻灯片功能。
- 开发者 B 在管理和前端都添加了新的反馈功能。
- 这两个功能都与位置模型/控制器逻辑交织在一起,因此对这些关联文件进行了更改以考虑这两个新功能。
- 幻灯片功能进入 QA,但由于一些开发监督或范围蔓延而受阻。
- 反馈功能进入 QA 并顺利通过。
- 我们希望按照时间线将反馈功能推送到生产环境,但我们不能直接这样做,因为这两个功能都需要更改位置模型/控制器。也就是说,我们不能只做一个
svn update file1 file2 file3。 - 注意: 这是一个简单的例子,可以通过反向合并来解决。通常我们的问题比这复杂。
多站点结构信息
- 我们有许多预定义的结构主题,包括视图、图像、CSS 文件、JS 文件等。
- 每个网站都分配有一个主题。
- 出于品牌和可扩展性的原因,每个站点都可以使用自定义视图覆盖主题视图或包含其他特定于站点的 CSS/JS 文件。
我敢肯定还有其他一些人也遇到过类似的问题,我希望从互联网上的聪明人那里得到一些见解。如果我说的话看起来很清楚,请随时提出问题!
【问题讨论】:
-
问个问题,QA 代表什么?
-
听起来主要问题是您的软件应该是模块化的,但您试图在文件层而不是应用程序层实现这一点。您应该使这种可定制性成为应用程序的显式部分,可通过配置文件进行控制,并且只维护可以一次推送到所有服务器的单一版本的代码库。这应该会大大简化事情。
-
@Brad lmao,我将这篇文章转发给我们的 QA 负责人,她认为没有一个开发人员知道 QA 是什么。大声笑。
-
@deceze/BBonifield:我也认为这会有所帮助,当谈到高效的生产工作流程时,我的工作场所仍然生活在...... 80 年代(?)。我强迫自己工作了很长时间,直到每个项目基本上都有一个代码库和子类/配置/等。只有当一个功能完成并被认为值得时,我才会将它添加到我们的代码库中。我想这取决于执行此操作所涉及的工作量,如果它甚至是现有代码的可能性。
-
@BBonifield 当我看到您正在对生产服务器上的单个文件进行 svn 更新、混合版本时,我就会升起一个大红旗。也就是说,我可以通过在所有文件上发出一个简单的
svn up来完全搞砸你的整个生产服务器。这简直太糟糕了。您应该能够在任何时候从您的存储库中部署特定目录的最新版本并使其正常工作。任何比这更复杂的事情都会导致过早脱发(如您所见)。我猜你的问题是如何达到这个状态?