Gitflow和测试/部署

3
我有几个问题,关于当许多开发人员在同时处理一个无法进一步分割的项目时,如何处理测试和部署,并且仍然希望每天进行部署。
目前,我们遵循Gitflow,其中我们拥有功能分支,每个人都在独立的功能上工作。功能合并到develop分支中。不时地,我们花些时间考虑用户需求/错误修复/快速功能等。
最终目标是尽快将它们部署到PROD。我的问题是,您会建议哪种过程,以便:
1)我们可以在不引入官僚主义的情况下进行部署(例如,在每个月的最后一个星期五发布)。
2)如果有人提交引入错误的代码,则不会影响已经提交正确代码的其他人。换句话说,如果程序员A尝试通过引入新错误来修复错误,并且程序员B已经修复了他的错误,那么程序员B的代码将进一步进入管道,而程序员A将需要更晚地修复错误:)
3)我们不能拥有无限的测试环境。我们也不想花费一整天设置测试环境。我们需要一个可以满足这些要求的解决方案(因此,在功能分支上进行测试不是一个选项,除非我错过了什么)
4)测试人员确切地知道他们批准进入生产的内容,毫无疑问。
顺便说一下,我们有一个相当广泛的单元/功能测试集,但是这个问题是关于过程的,因此它们并不是很相关。
另外,我已经研究了所有其他问题,没有一个真正回答了我的所有问题。如果您认为有一个可以的话,我很乐意看一看。
谢谢

https://dev59.com/ZF8e5IYBdhLWcg3w6N2W - CodeCaster
正如所讨论的,这个问题可以通过在特性分支上进行测试来解决,但这并不是一个选项。谢谢。 - Yannis
那个问答中有许多有用的注释和解释。你的实际问题是什么?“如何在不将功能合并到开发中的情况下测试功能?” - CodeCaster
这是对一个优秀问题的出色回答。但它并不能完全回答我的问题。正如我在问题中所解释的那样,我想知道人们在测试环境(受限时)和整体部署/测试策略方面做了什么。 - Yannis
1个回答

2
从流程上来看,与“标准流程”相比,您只需要多一步可选操作:如果发现错误(或可能是关键错误),则回滚所有更改(即包含错误的合并)。
以下是操作步骤:
1. 从开发分支创建一个被测试的分支(BUT)。 2. 功能分支合并到测试分支中,而不是直接合并到开发分支中。 3. 您现在有一个BUT,它要么与上一个版本相同,要么经过了上次迭代流程的充分测试。 4. 现在将所有已准备好的特性分支/bugfix合并到该分支中。 5. 进行测试。如果出现关键问题(即使包含错误的功能/bugfix对于下一个发布不可取),请通过重置撤消该功能的合并,并重新执行所有合并或通过变基并删除提交来解决问题,这基本上是相同的。请注意,这会更改分支的历史记录,因此在完成测试之前,没有人应该将此分支合并到任何地方。 6. 如果测试迭代成功完成(即没有主要错误),则将其合并到开发分支中。
这样可以满足以下需求:
我们可以在不引入繁琐程序(例如每个月最后一个星期五发布)的情况下进行部署。您仍然拥有以前的发布分支,没有问题。唯一的额外开销是,如果合并有太多错误,您可能需要撤消合并,但我看不出有其他办法。
如果某人提交了引入错误的代码,则不会影响已提交无错误代码的其他人。换句话说,如果程序员A尝试通过引入新错误来修复错误,并且程序员B已经修复了他的错误,那么程序员B的代码将进入管道,而程序员A将花费更多时间修复错误。
我们不能拥有无限的测试环境。我们也不想花费一整天设置测试环境。我们需要一个可以解决这些要求的解决方案(因此,在功能分支上进行测试不是一个选择,除非我错过了什么)。
您只需要一个测试环境。拥有多个测试环境可以帮助多个测试人员并行工作,但这是可选的。
测试人员确切地知道他们批准进入生产的内容。您可以使用标准git命令轻松确定功能分支是否是BUT历史记录的一部分,这就是您所需的。
缺点/您需要的东西:
只有经过测试人员的批准,才能将内容投入生产或与他人的工作合并。如果来自功能分支的内容质量较低,则此过程可能成为瓶颈。如果测试人员不得不取消合并的内容,他们就必须重新测试其余部分(至少我认识的测试人员会坚持这样做,并且理由充分)。因此,错误会拖慢您的速度(这并不新鲜,但在这种情况下变得非常明显)。
为了限制这种影响,您应该尽力使功能分支尽可能好:
- 在与BUT合并之前运行功能分支的自动测试 - 在与BUT合并后运行功能分支的自动测试 - 拥有许多良好的自动化测试。 - 代码审查 - 配对编程 - 自动化测试环境中的部署
基本上,任何减少测试人员工作量并加速其余部分的工作量的方法都会大有帮助。
您说您不能拥有许多测试环境。请考虑是否可以拥有部分测试环境,这些环境不需要所有资源,但仍然适用于某些测试。

非常感谢您,Jens。我真的在考虑您提到的缺点。如果有一个开发人员提交了错误的代码,然后有10个开发人员提交了正确的代码,那么这个过程(还原/重置)将成为一场噩梦!另外,我有一个问题。您建议在哪里开发漏洞?到目前为止,在GitFlow术语中,这些都是热修复吗? - Yannis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接