随着我们变得越来越大,我们开始遇到问题,其中的功能使其可以分阶段进行测试,但是到所有测试和批准的新功能都在分阶段进行测试时。
这创造了一个环境,在该环境中我们几乎永远无法投入生产,因为我们拥有经过测试和未经测试的功能的组合。我敢肯定这是一个普遍的问题,但是我还没有找到对我们有用的资源。
一些细节:
- BitBucket上的GIT
- Jenkins用于脚本部署到Azure
我希望找到一种隔离特征的方法,使它们在环境中移动并仅推送准备就绪的产品。
随着我们变得越来越大,我们开始遇到问题,其中的功能使其可以分阶段进行测试,但是到所有测试和批准的新功能都在分阶段进行测试时。
这创造了一个环境,在该环境中我们几乎永远无法投入生产,因为我们拥有经过测试和未经测试的功能的组合。我敢肯定这是一个普遍的问题,但是我还没有找到对我们有用的资源。
一些细节:
我希望找到一种隔离特征的方法,使它们在环境中移动并仅推送准备就绪的产品。
Answers:
听起来您这里有一些问题:
这是一个项目管理问题,也是一个协调问题。将这种功能被释放之前,在同一时间,或在此之后的其他功能?如果发布一次要发生一项功能,请确定该功能。如果要将功能分组到版本中,请找出分组的含义,并与开发人员和决策者一起实施。使用问题跟踪或票证系统标记发布。明确指出,如果特定版本的一项功能是不可行的,那么所有功能都可以。
git-flow是解决此类问题的简单答案,而且人们通常会使用git-flow的变体,即使他们不知道它是什么。我不会说这是所有问题的通盘,但它会有所帮助。
听起来您似乎遇到了不确定性发布策略的问题,这些功能已被认可为分散的功能,而早已开始开发的功能可能会在最近开始的功能发布之后发布-跨越式功能。
长期存在的功能分支或同时发布的分支可能是此类问题的最佳答案。将最新信息从master合并(或重新设置,如果您愿意的话)到您长期运行的分支中。注意仅合并已经存在的功能,否则会遇到您现在遇到的问题(一个分支上太多混合的功能)。
“ Hotfix”或“ Bugfix”分支是此过程的重要组成部分。将它们用于质量检查周期较短的一次性修补程序。
根据您的描述,最好不要保留官方的“开发”分支。而是将所有功能从master分支出来,并在确定发布后创建合并的发布分支。
不要将git分支与您的环境匹配,生产== master除外。“开发”分支应假定为已损坏。发行分支被推送到测试环境,无论是QA环境还是登台环境。如果需要,将特定功能分支推送到环境。
如果您有多个功能分支需要分别发布,但需要同时进行测试..... \ _(ツ)_ // .....启动另一台服务器?也许将它们合并到一个废弃分支中……对原始分支进行修复/更改,然后重新合并到废弃分支中;在各个发行分支上进行最终批准和UAT。
这就是上述想法试图避免的事情,因为毫无疑问,这是尝试去做的最痛苦的事情。如果幸运的话,功能已使用合并提交功能自动合并到开发或测试分支中。如果您不走运,开发人员将直接致力于开发/测试分支。
无论哪种方式,如果你准备释放,并有未经批准的变更,就需要使用Git用背出发布分支那些未经批准的提交; 最好的想法是在测试发行版之前执行此操作。
祝你好运。
您需要一些分支来控制该过程:
1234-user-crud
,1235-bug-delete-catalog
等将结束。还要用任务号标识提交,这将在合并中遇到问题时为您提供很多帮助(您将)。release
分支机构同样有效。参见git flow:
|FEAT_2|
|
.---C06<-------.---------.
/ \ \
/ |FEAT_1| \ \
/ | \ \
/ .--C07<--.--------\---------\---------.
/ / \ \ |TEST| \ \
/ / \ \ | \ \
/ / .-----`--C09<--`--C10 \ \ |RELEASE|
/ / / \ \ |
<v4.6.0> / / / .----`--C11<---`--C12<--.
| / / / / \
C01<--C02<--C04<--´----´--------´-----------------------´---------------------------`--C13
| | |
<v4.5.0> <v4.6.1> |MASTER|
|
<v4.7.0>
很简单的:
开发人员在自己的机器上工作,每个人都使用自己的数据库。如果不可能每个开发人员都有一个单独的数据库(由于许可证,数据库大小等),那么在开发人员之间共享数据库将遇到很多问题:当某人删除其分支中的列或表时,其他人分支仍然在数据库中的此列/表中计数。
此过程中最大的问题是合并。
您需要在test
和中重新进行相同的合并release
。如果在代码中进行了一些很好的重构,例如删除类,移动/重命名方法等,这将很痛苦。由于您无法将代码从test
(或release
)分支获取到功能分支,因此只能在以下位置解析合并提交:的test
(或release
)。因此,您最终在两个不同的分支中解决了相同的冲突,可能在每次合并中生成不同的代码,并且将来,您会发现测试团队将需要对功能进行两次测试:在test
和release
分支中,因为每次合并可能会导致不同的错误。
另一个问题是test
分支。您将需要master
不时地“回收”该分支(从中删除并创建一个新分支),因为那里的一些旧分支(或旧合并,已删除的合并分支)可能为新代码带来很多问题,与里面的东西大不相同master
。此时,您需要控制要在中再次合并的分支test
。
真正最好的解决方案是业务团队知道在下一版本中需要交付什么,并且每个人都在唯一的分支(开发分支)中工作。对于他们来说,有可能随时选择他们想要在下一版本中使用的“完成”功能(我认为这是您的情况),但这对于开发人员和(我相信)这都是一场噩梦。测试团队。
听起来好像您正在将集成分支中的更改合并到生产分支中,这正是您提到的原因,恕我直言,这不是一个好习惯。只要某个版本的生产分支从主集成分支中撤出,集成分支就可以随时分开(毕竟应该发展到下一个版本)。从Integration分支合并到当前版本分支会带来与该版本不兼容的更改。
恕我直言,一个适当的过程将是:
就个人而言,这听起来可能是过程问题,而不是工具问题。我在这里建议一些注意事项:
老实说,我认为最大的事情将是关于何时交付以及在给定时间内实际上可以完成多少任务的纪律性。
总结:仅在完成测试并交付旧功能后才交付质量检查。