只考虑下面的分支策略,考虑到CICD。
主分支 -
1.1开发分支 - 来自主人的分支
Team A branch - Fork from Development branch and merge to
development branch after feature implementation
for QA/Integration testing
Team B branch - same as above
1.1.1 Release branch - Goes in PROD
一旦团队A和团队B分支合并并完成QA验证,请创建发布分支并对其进行最终回归。此发布分支将转到Production。
然后将Release合并到master分支。
意图 -
主分支稳定,并且可以使用生产运行代码。
团队分支可以部署在DEV环境中,并且需要在服务器上配置CICD。
这种方法有什么问题吗?
答案 0 :(得分:2)
这不是真正的CI(CI我指的是开发策略,而不是工具),因为你有团队分支意味着团队的工作在合并到主人之前没有被整合 - 总有团队的工作对其他团队不可见,哪些看不到其他团队的工作(因此对 rebase / merge hell 开放)。
对于真正的CI策略所有团队都可以使用master
(如果真的拉动任务分支,他们将被快速合并为主非常,而不是更多超过几天) - 每个人实际上都在同一页上。
CI工具(可能是暂存环境中的CD工具)会密切关注master
健康状况。
每当master
为current release
- 准备就绪或next release
的更改开始与current release
(发布分歧)发生冲突时,current_release
分支就会被拉出将从不合并回主人(由于发布分歧,此类合并将是一个大问题)。 current_release
中的任何错误修复(如果适用于master
)都会被挑选并且双重提交(只是因为一个分支上的修复是正常的,这并不意味着它在另一个分支上没问题) )。
current_release
分支实际上是您的生产分支。它需要自己的CI / CD设置,根据current release
功能进行定制。生产构建只是该分支上的标签。
master
分支继续向next release
发展。
冲洗并重复。
对于多级版本(主要/次要/等),您还可以使用current_release
的其他子分支,这些分支也从不合并回其父分支。每个此类子分支与其父分支之间的关系与current_release
和master
之间的关系完全相同。
答案 1 :(得分:2)
要真正做CI(并且CI需要做CD),你会定期合并到掌握,而不是长寿的功能分支。我相信每天都会有一次" CI"。
您建议的另一种方法是在日常工作中使用短期开发人员分支。然后有一个部署管道,通过一系列测试阶段移动每个代码更改。只有在每个阶段都经过变更之后,它们才会进入下一阶段并准备投入生产。这允许您在master上工作但保持稳定并且只允许传递代码进入生产。
要处理独立功能,您可以使用功能切换而不是分支。您可以切换功能并推送到主服务器以测试它们并在部署良好的情况下进行部署。如果没有,或者如果有业务需要删除功能,您可以关闭该功能并继续安全地使用主服务器。我已经看到这项工作在我工作的两种产品上非常好。
我知道这是非常简化的,但它只是为您提出替代方案的建议,并希望能够提供帮助。您可以在一堆博客和stackoverflow答案中了解有关实现这些技术的更多信息 - http://martinfowler.com/articles/feature-toggles - http://www.paulhammond.org/2010/06/trunk/alwaysshiptrunk.pdf - Feature Toggles vs Feature Branches