【发布时间】:2010-09-23 17:09:03
【问题描述】:
我们的项目是一个支持我们几十个网站的内容管理系统。开发小组从一个小地方开始,我们处理的是相当标准的编码/部署策略。
我们对后备箱进行了编码,并坚持使用干净的后备箱。每隔几天,我们就会标记主干并部署到测试服务器。如果一切顺利,我们将部署到生产环境并继续前进。
这在一段时间内运作良好,直到团队成长。我们经常遇到这样的情况,即标记的修订存在需要在投入生产之前修复的问题。当负责的开发人员正在处理这些修复时,我们让其他开发人员提交了对主干的更改。一旦原始开发人员的修复完成,添加的新提交将不得不顺其自然,进一步延迟构建,因为现在需要进行额外的验证。
为了解决这个问题,我们创建了一个单独的主干,严格用于发布。人们会在主干中工作,然后要求项目经理或开发负责人将他们的更改合并到发布主干中。
这工作了一段时间,直到团队变得更大、更分散。我们有 3 到 5 人的团队,在 4 个地理位置工作——一些在相同的组件上,另一些在不同的组件上,具有不同的优先级和发布时间表。这几乎是一份全职工作,对于管理构建的人来说是一场噩梦。
为了解决这个问题,我们开始使用最新的 Production 标签创建“发布分支”。人们只会承诺那些准备好进行测试并投入生产的东西。其他人会承诺使用主干,直到轮到他们合并。这将合并和解决冲突的负担从构建管理器转移到拥有代码的人身上。
这工作了大约一周,直到我们开始不得不进行几次“高优先级紧急”发布。这实际上意味着我们将:
- 从最新的生产标签创建一个分支
- 将紧急情况添加到该分支
- 标记该分支并发布到生产环境
- 将该分支中所做的所有更改合并到 QA 中的常规“发布分支”中。
这是每一天。有时一天两次。
我试图将其与一个开源项目联系起来,在该项目中,到处都有开发人员,他们甚至彼此都不认识,但他们似乎仍然过得去……但是当新项目出现时,这种比较就会分崩离析预计每周(或每天)多次“公共”消费的稳定、经过测试、值得生产的构建。例如,如果 Firefox 的日常构建是一团糟,至少用户可以回到以前的版本或使用最新的稳定版本。对于我们的用户而言,情况并非如此。如果我们的版本不完美,它们就无法工作。
背景故事完成,我现在提出问题:
给定一个环境......
- 开发人员遍布各地,开发不同的组件。
- 对某些组件的更改可能要等一周才能发布,而有些则甚至不能等一天。
- 该应用程序是关键任务,必须在发布之前对更改进行测试并保持稳定。
...您可以推荐哪些建议或替代工作流程来促进一个更健全的流程,其中大部分负担不是由一个人承担?
【问题讨论】:
标签: svn version-control deployment build-process