解释主干式开发

Mahesh Mallikarjunaiah
分享此文章
分享此文章

引言

主干式开发是使用最广泛的分支方法之一。它帮助团队协作,构建和交付软件。
本文将探讨主干式开发,它在 CI/CD 管道中的作用,它的优缺点以及它与其他方法的比较。

背景

在过去,当源代码控制系统不存在时,开发人员会维护多个代码版本,手动跟踪更改,这非常低效。随着时间的推移,开发人员开始使用本地版本控制系统来跟踪更改。

最终,分布式集中式版本控制系统帮助多个开发人员在本地维护存储库副本,编写代码,进行更改,提交并有效地协作以发布软件。随着时间的推移,分支和合并变得更加高效。

分支是复制要独立且并行修改的代码。各个分支在其生命周期的某个阶段合并。

产品成功与公司成功

如今,更快地交付产品至关重要,以满足客户不断增长的需求,在竞争中生存并推动客户成功。

驱动因素可以分为两部分:更快发布和增强客户成功。

一部分应侧重于构建成功的工程团队。另一部分应侧重于建立适当的软件开发流程,并利用正确的工具和技术来推动工程效率。

我想重点介绍的关键流程是编码、分支和策略。在使用共享代码和版本控制系统时,拥有一个可以帮助编写和合并代码的流程至关重要,该流程不会产生大量冲突或开销,然后可以顺利地将产品发布到生产环境。

其中一个流程是分支策略,这对于开发人员协作和交付代码至关重要。
分支模型开发涉及根据功能、错误修复、技术债务、增强功能等的需要和要求创建多个分支。

为什么要分支?

分支主要用于帮助开发人员。开发团队拥有一个独立的空间来处理他们的代码更改,然后再合并到主分支。

例如,可以在一个分支上独立处理功能,在另一个分支上独立处理错误修复,等等,直到准备就绪才影响主分支。

合并冲突很难处理,并且许多开发人员和团队都害怕它们,因为它们会影响产品的整体成功。拥有良好的分支策略是其中一个原因。

在共享存储库中拥有许多开发人员的团队知道他们在代码合并、维护、分支和发布方面所面临的困难和挑战。

出色的分支策略可以提高开发人员的效率,减少代码冲突,提高质量,并加快市场发布。

如上图所示,合并冲突很难处理;开发人员花费的时间越多,与主分支合并的时间就越长。

持续集成与持续交付

持续集成是一个流程,其中代码更改通常会自动构建、测试和集成。

强大的持续集成取决于频繁的代码提交,这有助于建立高效的持续交付。集成的代码应该是生产就绪的,而不是破坏 CI/CD 流程。持续交付应该始终拥有准备发布的代码,以便我们决定发布时可以随时发布。主干式开发是 CI/CD 的关键推动者。

持续集成的一些好处包括:更快的反馈循环,改进的代码质量,及早发现缺陷,提高工程效率等等。

如下所示,不进行持续集成的挑战很多。当开发人员在他们的代码上工作很长时间而不与主分支合并时,反馈会被延迟。当提交的代码非常大时,冲突将更长,并且需要很长时间才能解决。

当被要求解决较长时间的合并冲突时,开发人员会忘记他们做了什么。开发人员会感到沮丧,影响整体工程效率并延迟发布。这将影响产品成功。

主干式开发

“主干式开发”是广泛使用的流行分支策略之一。
在主干式开发中,所有团队成员都在一个名为“主干”的共享分支上工作。可能会有短暂的分支,但重点是频繁提交并始终维护可交付的代码。

主干式开发还有助于最小化和克服合并冲突,并且经过测试的代码不会破坏构建,并且可以随时发布。

主干式开发中的典型流程如下所示

  1. 遵循 Scrum 的团队将整理、估计和准备好开始开发产品积压。
  2. Scrum 团队将有一个主干或主分支。
  3. 每个开发人员都会开始处理用户故事,并从主分支创建功能分支。
  4. 例如,Mary 可以创建功能分支 A,而 John 可以创建功能分支 B
  5. 工作完成后,将提出拉取请求
  6. CI 管道在拉取请求时触发,此时将运行自动化测试。
  7. 其他团队成员也会进行代码审查。
  8. 根据审查意见合并代码更改并提交。
  9. 拉取请求获批。
  10. 更改提交到主干。
  11. 来自主干的代码部署到 QA、预生产环境,最终部署到生产环境。
  12. 在这些环境中执行额外的测试和验证
  13. 测试完成后,该功能将部署到生产环境。
  14. 可以决定何时需要发布功能并在生产环境中提供。
  15. 例如,功能 A 可以在生产环境中部署后开启,并在一个月后发布。
  16. 可以利用功能标志来开启和关闭生产环境中的功能。
  17. 根据做出的决策和功能标志设置,最终用户可以访问或无法访问功能。

与其他分支策略不同,主干式开发支持集成少量更改,而不是一次性集成大量更改。

根据计划和策略,从主分支派生发布分支。代码上线后,分支将被删除或归档。有时,没有发布分支,主干用于执行生产发布。

结对编程是主干式开发的推动者之一。它有助于在编写代码时进行代码审查,非常高效。

代码审查对于提高主干式开发的效率也很重要。

确保代码提交不会破坏构建非常重要;因此,在主干式开发中,测试优先心态、尽早测试和测试自动化至关重要。

重点关注自动化测试至关重要,以确保它可以涵盖所有需要测试的测试场景并发现缺陷。使用自动化测试可以帮助增强所需的测试覆盖率。

TDD 是一种与主干式开发非常契合的方法。

及早反馈是主干式开发的最重要优势之一,因为它会频繁提交、合并和测试。

在其他基于合并的系统中,合并跨越几天,这只会使合并冲突更大,更难处理,最终阻止合并发生。

当持续集成和交付至关重要时,建议使用主干式开发,将发布和部署解耦,只有一个在生产环境中运行的主分支,避免了许多长期分支带来的合并冲突,推动团队合作并提高效率。

主干式开发的支柱

主干式开发有一些非常重要的核心支柱。其中一些如下

  1. 单一事实来源——主干是主分支,也称为主线或主干,是单一事实来源。所有更改都需要定期传播到此。所有决策都在此主线做出,包括功能切割、部署和发布。
  1. 代码审查——审查是主干式开发的核心,因为更改会频繁提交。应建立一个强大的审查流程,以支持频繁的代码合并。代码审查需要发生以维护代码质量,增强信心,提高开发人员的效率
  1. 小而频繁的提交——开发人员必须遵循确保代码每天多次提交的过程,倡导频繁提交,因为主干式开发强调减少合并冲突,如果开发人员在较长时间内处理代码库并一次性提交大量代码库,这将无法实现
  1. 持续集成: 代码提交后,会触发自动构建流程,然后会启动自动测试以检查质量。任何失败都需要立即解决,以确保主线不会因该失败而阻塞,并且主线的质量符合定义的标准
  2. 功能标志:功能可以在生产环境中推出,而不会让最终用户看到,以便进一步测试或逐步推出。功能标志有助于保持持续交付。开发人员可以提交未完成的功能代码,使用功能标志,可以在部署到生产环境时将其关闭。 这实际上将部署与发布解耦
  3. 可发布状态和监控: 主线故障会立即得到解决,并且主线始终处于可发布状态,已通过一系列审查、验证和测试。持续监控也很重要,其中持续传递反馈,这有助于整体改进

主干式开发的好处

  1. 提高速度,缩短上市时间——由于代码会频繁提交、审查、构建、测试和合并到主干,因此代码始终处于可发布状态。这有助于更快地为客户提供价值。
  2. 提高代码质量——由于主干式开发强调小而频繁的代码提交,这只会推动更好的审查、测试和验证。构建中的任何失败都应立即解决,需要采取必要的措施使其正常工作,免于失败,并保持质量以发布
  3. 提高工程效率:主干式开发促进开发人员之间的协作,以确保他们作为一个团队交付价值。他们共同拥有、讨论挑战,并协同进行代码审查。由于每个人都在同一个分支上工作,他们不会孤立;他们分享知识和最佳实践,并作为一个团队改进产品。使用此策略,他们将减少代码冲突,提高代码质量,加快发布速度,并提高客户成功率,所有这些都将提高工程效率
  4. 减少合并冲突:由于代码频繁提交并与主干合并,冲突会在更早的阶段更频繁地得到解决。由于提交和合并的代码频繁且少,因此修复起来更容易。因此,合并冲突也会减少,并且更容易解决。
  5. 改进 CICD:构建过程作为持续集成的组成部分启动,确保代码在每次提交时都经过测试、验证并满足质量标准。故障会立即得到解决,通过修复或回滚。这确保了在生产环境中发布时出现更少的故障和意外。最显著的优势是它非常频繁且持续地运行。代码始终处于可部署和可发布状态,这进一步有助于持续交付或部署阶段。所有集成问题都将在更早的阶段得到解决,并且经常得到解决,以实现顺畅的 CICD 过程。
  6. 简化开发工作流程:主干开发模式只有一个主分支,不提倡使用多个长期分支。通过单一的事实来源,代码库的维护和管理变得更加容易,整个开发和发布工作流程也变得简单。
  7. 减少代码漂移:当分支生命周期较长时,存在代码漂移的风险,但在主干开发模式中,分支生命周期较短,代码变更较小,并且提交频繁,这有助于减少代码漂移。通过减少主干与其他分支之间的差异,主干开发模式缓解了代码漂移。

主干开发模式与 Git Flow

Gitflow 是另一种流行的开发模式,它有自己的分支策略。主干开发模式与其他开发和分支模式的主要区别在于分支存在的时间长度和提交频率。

主干开发模式围绕一个共享的代码库,采用生命周期较短的分支,进行小而频繁的代码提交,而 Gitflow 开发模式围绕多个独立的长期分支。

例如,在任何项目中,Gitflow 都将包含各种分支,例如 Feature 分支,开发人员在其中开发特定功能;完成工作后,他们将合并到开发分支。进行测试,一旦通过,就会合并到发布分支,最终合并到主分支或 master 分支。

Gitflow 提供结构化的工作流程,可以根据需求定义分支。如果需要支持两个软件版本,则必须维护两个不同的发布分支。这将有助于隔离功能,有效地管理发布。

选择哪个

虽然主干开发模式和 Gitflow 都具有优点和缺点,但选择哪种模式取决于团队的需求和要求。

对于频繁交付、快节奏敏捷团队和项目的团队,主干模式可能更适合;而对于较长的项目,需要管理多个版本和客户发布的项目,Gitflow 可能更适合。与 Gitflow 相比,主干开发模式需要更高水平的协作沟通。

总的来说,在采用之前,评估每种模式提供的功能,并查看它如何与您的整体要求相符。

主干式开发的挑战

主干开发模式需要强大的测试流程、策略和工具。它需要构建可靠的测试和测试自动化,以保持质量标准。测试优先的文化,整个团队应拥抱早期测试。

团队需要高度的纪律性,以确保他们遵守实践和流程,以确保编码、提交和测试在同一水平进行,并确保构建保持完整。

直接使用主分支通常会带来很多风险和挑战,如果执行不当,可能会导致挫折、失败和生产力下降。

随着团队规模的增长,跟上节奏可能会很困难,因为它会导致大量的变更、提交、测试、合并和构建失败。

公司如何采用主干式开发

对于采用或过渡到主干开发模式的公司来说,细致的计划是必要的。公司可以采用以下策略。

  1. 列出您的需求和要求、您打算做什么、挑战是什么、团队结构、目标和发布周期。
  2. 评估主干开发模式如何契合,以及需要做出哪些改变才能采用主干开发模式。
  3. 团队的认同和共识至关重要,确保您与团队讨论他们所承担的责任。
  4. 培训团队,并确保每个人都具备足够的知识和实践经验,才能开始使用主干开发模式。
  5. 定义将在主干开发模式中实施的流程、指南和结构。一些示例可能包括代码审查流程、提交流程、测试驱动开发、CICD 以及分支和合并策略。
  6. 实施主干开发模式所需的工具和基础设施。此外,强调协作和沟通,以提高效率。
  7. 确保您有良好的测试自动化,以便在各个级别完成必要的测试。
  8. 持续监控流程,并解决不足和挑战。监控、迭代和微调,同时审查关键指标。
  9. 持续学习和改进至关重要,团队需要不断学习、适应和改进最佳实践,以提高工程效率。

结论

总的来说,主干开发模式解决了软件开发中的一些挑战,它是一种可以采用的良好实践,可以加速软件交付过程,推动公司和客户的成功。

主干开发模式提高了工程效率、协作和沟通,并在整个组织中推动了共享所有权。

组织可以通过拥抱主干开发模式,打破部门壁垒,交付可靠、高质量的软件,并以更快的速度交付。

作者
Mahesh is a Travis CI Writer
Mahesh Mallikarjunaiah
Mahesh 是一位经验丰富的工程主管,在产品工程、云、DevOps、SaaS 和质量方面拥有二十年的领导和管理经验。他一直喜欢从零开始组建高绩效团队。他对持续学习充满热情,并不断努力突破界限,拓展视野。
审阅者
Michael Mendy of Travis CI
Michael Mendy
Michael Mendy 是 CI/CD 社区中最杰出的成员之一,他是 Travis CI 的软件工程师。他经常在各个团体面前演讲,谈论 CI/CD,他在 IBM、droidcon、LeadDev、Arm DevSummit 等场合发表过演讲。
© 版权所有 2024,保留所有权利
© 版权所有 2024,保留所有权利
© 版权所有 2024,保留所有权利