DevOps 中的分支策略
Posted
技术标签:
【中文标题】DevOps 中的分支策略【英文标题】:Branching strategy in DevOps 【发布时间】:2017-03-20 06:42:04 【问题描述】:我正在使用 TFS 设置 DevOps 流程,并且想知道分支策略。如果我有以下示例分支(图片来自Guidance: A Branching strategy for Scrum Teams)。
我已经设置了 DevOps 流程(持续集成和持续交付),并从 MAIN 分支(使用 Jenkins)进行持续集成。
如何处理修补程序?如果开发人员经常合并到 MAIN 分支以验证构建,我如何获得最后发布的代码以应用热修复?如果我要使用 Release 分支,我最终必须将 hot fix 集成到 MAIN 分支中才能启动 CI 流程。但是,MAIN 分支可能包含版本之外的更改。请就这个问题提出建议。
【问题讨论】:
【参考方案1】:一般来说,热修复应该从主分支的相关版本中得到。 然后需要为热修复创建一个专用分支,将其与最后一个稳定分支合并。 如果它通过了整个 QA、单元测试、系统测试等,则将其合并回主分支作为下一个发布版本。
您可以在使用 git 时查看以下示例,参考在此处:git best practice。源代码控制不是问题,而是主要思想。仔细阅读这篇文章,相信你一定能找到你要找的东西。
有些组织仍在使用补丁... 我对这个解决方案不是很感兴趣,但如果这是你的情况,请告诉我,因为在补丁中有一点不同的解决方案。
【讨论】:
【参考方案2】:建议始终同步所有分支。当你想处理修补程序时,你可以从 main 创建一个新的分支“HotFix”。修补程序完成后,您需要将其从 HotFix 合并到 Main,并从 Main 合并到 Release。
如果您在 Release 中进行了任何更改,则需要合并回 Main 以完成更改。
【讨论】:
如果开发人员经常合并到 main 中会发生什么?假设在 sprint 2 的中间,在 prod 中发现了一个错误,但是随着开发的进行,开发人员多次合并到 sprint 2 的主代码中。现在,构建从主分支开始,因此热修复将进入主分支以便构建和部署。您将如何使用 DevOps 处理这种情况?【参考方案3】:修补程序是对已发布软件的修补程序。如果你有一个发布分支,那么创建一个修补程序分支是合适的。在该修补程序升级到 Prod 后,您可以将链反向集成备份到 Main。 Hotfix -> Release -> Main,如果需要,甚至可以将其向前集成到下一个 sprint。
【讨论】:
【参考方案4】:显然,您选择的答案取决于您的特定要求;但是,通常,您应该从 main 中删除一个发布,并从发布分支中删除一个热修复。就个人而言,我会说该代码不应返回到发布分支,而应在开发分支中进行双重修复。
这样做的主要原因是,一旦您发布了代码,该代码分支应该像发布时一样被锁定。如果你遵循这个,那么你总是可以回到以前的状态。正如已经建议的那样,当需求或优先级发生变化时,您可能已经完成了对修补程序的更改;或者当客户报告实时代码中的错误时。如果您维护一个单独的分支,您可以随时访问该代码。
【讨论】:
【参考方案5】:如何处理这个问题实际上取决于您拥有的发布和维护策略或客户协议。
如果您的发布分支恰好也是一个维护代码行(从您的描述中看起来很像),则从中创建功能分支,实施热修复,测试,合并并发布“补丁”。理想情况下,您还应该为“维护”分支设置 CI。 在此之后,您可以将您的热修复与主代码行集成,或者将问题放在待办事项上,以便在未来的新版本中以不同的方式实施。
顺便说一句:这里有一些不错的文章: https://www.cmcros-s-roads.com/article/agile-perspective-branching-and-merging 和 http://www.bradapp.com/acme/branching/branch-creation.html
【讨论】:
【参考方案6】:如果您正在使用敏捷,那么功能分支可能是一个不错的选择。唯一的问题是它必须与诸如 JIRA 或 AGM 之类的票务工具结合使用。为了在这种情况下处理修补程序,您可以在 AGM 或 JIRA 中创建一个用户故事,完成后将合并到主干线。
【讨论】:
为什么需要与其他产品相关联? TFS 在跟踪工作项方面做得很好。 我明白,这只是可能示例的说明。以上是关于DevOps 中的分支策略的主要内容,如果未能解决你的问题,请参考以下文章
我可以在 Azure DevOps 中设置默认安全和/或分支策略吗?
DEVOPS技术实践_13:使用Jenkins持续传送设计-CD基础