DevOps 中的分支策略

     2023-03-22     282

关键词:

【中文标题】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 在跟踪工作项方面做得很好。 我明白,这只是可能示例的说明。

我可以在 Azure DevOps 中设置默认安全和/或分支策略吗?

】我可以在AzureDevOps中设置默认安全和/或分支策略吗?【英文标题】:CanIsetdefaultsecurityand/orbranchpoliciesinAzureDevOps?【发布时间】:2017-12-3011:28:30【问题描述】:我们的git服务器使用VisualStudioTeamServices。每个AzureDevOps项目都托管一... 查看详情

devops技术实践_12:创建持续集成的管道(代码片段)

持续集成不仅包含了Jenkins或者相关其它的CI工具,也包含了包含代码如何控制,采用的什么分支策略等。不同的组织可能采用不同的类型的策略来完成CI,策略类型和项目的类型的有很大的关系。一分支策略1.1本实验分支分支能... 查看详情

你的devops中有完善的持续交付体系么?(代码片段)

背景:DevOps已经成为软件开发领域一个炙手可热的名词。敏捷开发、持续交付、CI/CD,K8s…这些主流的开发理念、工具无一例外都与DevOps有着很强的联系。这种环境影响下,传统的运维团队均开始向DevOps进行转型。一时之间运维... 查看详情

如何在 Azure DevOps 中删除合并的功能分支?

】如何在AzureDevOps中删除合并的功能分支?【英文标题】:HowtoremovemergedfeaturebranchesinAzureDevOps?【发布时间】:2020-12-0123:24:05【问题描述】:我们曾经在拉取请求中自动删除功能分支。但是后来我们需要向功能分支添加分支策略,... 查看详情

从 Azure DevOps 中的子模块触发父存储库中的构建

】从AzureDevOps中的子模块触发父存储库中的构建【英文标题】:TriggerbuildinparentrepositoryfromsubmoduleinAzureDevOps【发布时间】:2019-03-1213:55:41【问题描述】:我在AzureDevOps上拥有我所有的git存储库和构建定义存储。到目前为止,我已经... 查看详情

无法在 PowerShell 中使用 REST API 删除 DevOps 分支

】无法在PowerShell中使用RESTAPI删除DevOps分支【英文标题】:UnabletodeleteDevOpsbranchusingRESTAPIinPowerShell【发布时间】:2022-01-1111:34:07【问题描述】:我正在尝试按照链接中的步骤删除AzureDevOps分支。https://docs.microsoft.com/en-us/rest/api/azure/... 查看详情

Azure Devops 管道通过生成验证触发两次

】AzureDevops管道通过生成验证触发两次【英文标题】:AzureDevopspipelinetriggeringtwicewithBuildValidation【发布时间】:2021-10-0914:11:40【问题描述】:我在我的存储库中创建了一个管道,用于通过对推送到features/*分支的代码执行单元测试... 查看详情

在 Azure DevOps Git 中强制使用分支命名约定

】在AzureDevOpsGit中强制使用分支命名约定【英文标题】:ForceabranchnamingconventioninAzureDevOpsGit【发布时间】:2018-05-1917:59:36【问题描述】:我们将托管在AzureDevOps中的Git用于我们的所有源代码。到目前为止,我们已经使用GitHooks来确... 查看详情

devops技术实践_08:jenkins多分支管道(代码片段)

简介多分支的管道是在jenkins2.x中新增的功能。多分支管道允许你针对分布式的控制器的每个分支创建一个管道。下图是对它的一个描述。使用jenkinsfile去创建多分支的管道,jenkinsfile可以存放在代码仓库中。Jenkinsfile只是定义CI管... 查看详情

如何在 Azure DevOps 中自动触发构建拉取请求?

】如何在AzureDevOps中自动触发构建拉取请求?【英文标题】:HowtoautomaticallytriggerbuildonpullrequestinAzureDevOps?【发布时间】:2020-04-1621:42:23【问题描述】:我已经创建了一个构建管道。在我的Azure存储库中有master、develop和feature/*分支... 查看详情

将多个并行功能发布到同一应用程序中的 Git 分支策略

】将多个并行功能发布到同一应用程序中的Git分支策略【英文标题】:Gitbranchstrategywithmultipleparallelfeaturereleaseintothesameapplication【发布时间】:2018-02-1410:17:55【问题描述】:我们正在为并行发布的网络应用开发模块。我们正在尝... 查看详情

Azure DevOps - 通过命令行将 git 提交或分支链接到工作项

】AzureDevOps-通过命令行将git提交或分支链接到工作项【英文标题】:AzureDevOps-Linkgitcommitorbranchtoworkitemviacommandline【发布时间】:2019-07-0119:32:10【问题描述】:我曾参与过与Jira集成的项目,我只需在提交或分支名称中包含工单编... 查看详情

APIM:从 Azure DevOps CD 管道中的 Azure Blob 存储中检索策略 XML 失败,如收到错误,如提供的链接格式错误

】APIM:从AzureDevOpsCD管道中的AzureBlob存储中检索策略XML失败,如收到错误,如提供的链接格式错误【英文标题】:APIM:RetrievingpolicyXMLfromAzureBlobstoragewithinanAzureDevOpsCDpipelinefailslikegettinganerrorlikeTheprovidedlinkismalformed【发布时间】:2022... 查看详情

带你了解敏捷和devops的发布策略

...式难以满足要求,企业的开发运维模式逐渐向敏捷和DevOps转型,敏捷和DevOps理念正被广泛认可并加速落地实践。本文分享自华为云社区《一文读懂敏捷开发的发布策略》,作者:敏捷的小智。随着数字化、信息化... 查看详情

樱桃采摘如何在 Azure devops 中工作 [重复]

】樱桃采摘如何在Azuredevops中工作[重复]【英文标题】:HowdoescherrypickworksinAzuredevops[duplicate]【发布时间】:2020-02-1109:32:16【问题描述】:我有三个功能分支,例如F1、F2、F3。他们都提出了拉取请求并合并到开发分支中。现在我只... 查看详情

如何在 Azure DevOps 中更改分支名称

】如何在AzureDevOps中更改分支名称【英文标题】:HowtochangebranchnameinAzureDevOps【发布时间】:2019-04-2506:05:56【问题描述】:有没有办法在AzureDevOps中更改分支名称。如SS所示,我已将我的分支命名为Developer分支,现在我想将其更改... 查看详情

基于用于触发管道 Azure Devops 的分支指定构建分支

】基于用于触发管道AzureDevops的分支指定构建分支【英文标题】:SpecifybuildbranchbasedonbranchusedintriggeringpipelineAzureDevops【发布时间】:2022-01-2206:13:25【问题描述】:假设我有两条管道:PL1和PL2,PL2由PL1触发。假设我在master分支上运... 查看详情

devops发布策略简介

简介: DevOps追求更短的迭代周期、更高频的发布。但发布的次数越多,引入故障的可能性就越大。更多的故障将会降低服务的可用性,进而影响到客户体验。所以,为了保证服务质量,守好发布这个最后一道... 查看详情