跳过主要内容

Git Flow vs Trunk-Based for CI/CD

探索 Git Flow 和 Trunk-Based 开发之间的差异,了解它们在 CI/CD 流程中的优缺点。

Git Flow vs Trunk-Based for CI/CD

选择 Git Flow 和 Trunk-Based Development Git Flow 和 Trunk-Based Development (TBD) 之间的选择会显著影响您的 CI/CD 工作流。以下是一些快速的分解:

  • Git Flow: 适合于结构化、版本控制的环境。它使用多个分支,如 main, develop, feature, release和 hotfix。适合于大型团队、较慢的发布周期和严格的 QA 流程。
  • Trunk-Based Development: 集中在一个主要分支上,短暂的特性分支。适合于小型团队、快速发布、强大的自动化测试。

快速比较:

方面 Git Flow 分支式开发
分支复杂度 多个长期分支 单个分支,短期分支
发布频率 预定发布 持续部署
团队规模 大型团队 中小型团队
测试 周期末测试 自动化测试
部署风险 阶段发布 频繁更新
回滚 更快 更慢

关键点: 使用 Git Flow 进行结构化的、较慢的工作流程,使用 TBD 进行速度和灵活性。两者都需要坚实的 CI/CD pipeline 才能成功。

29 - GitFlow 与 Trunk-Based 开发:管理 …

Git Flow 工作流程基础

Git Flow

Git Flow 使用五种分支类型来组织开发: 主分支, 开发分支, 特性分支, 发布分支, 和 修复分支. 这种结构有助于有效地管理发布和并行开发。

Git Flow 分支结构

分支类型 目的 合并目标
主干 生产就绪的code N/A
开发 集成特性,作为特性分支的基础 N/A
特性 用于构建单个特性; 从开发分支创建 开发
发布 为最终测试和版本准备; 从 develop 创建 main & develop
Hotfix 快速修复生产问题; 从 main 创建 main & develop

Git Flow 的优势

  • 允许同时开发多个功能而不造成冲突。
  • 发布分支提供了一个专门的空间进行最终测试和版本准备,保持 develop branch
  • 开放用于持续工作。 Hotfix

Git Flow 的缺点

  • Branch 管理的复杂性: 管理多个活跃分支会使合并变得更加困难。
  • 较慢的部署: 正式的发布流程可能会使部署速度比简单的工作流慢。
  • 维护增加: 每个分支都需要自己的管道配置,这会增加维护工作量。

这种工作流程适用于需要严格版本控制、多个发布轨迹或遵守法规的项目。接下来,我们将探讨如何将其与流线化的 trunk-based 开发方法进行比较。

Trunk-Based 开发的基本原理

Trunk-Based 开发(TBD)围绕一个单独的主分支,通常称为主干或主分支。这一方法与 DevOps 实践和持续集成密切相关。

Trunk-Based 分支结构

: 在典型的 TBD 工作流中,您将遇到这些分支类型:

Branch 类型 目的 context:Capgo营销网站,角色:短UI标签或导航项,信息键`subprocessors_table_purpose`
生命周期 Central branch with production-ready code 中央分支,生产就绪的__CAPGO_KEEP_0__
永久 功能分支 用于个别变更的临时分支
短暂 发布分支 用于发布前的最后调整

开发者们经常将小的、增量式的更改合并到主分支中 - 经常是每天多次。 这鼓励持续测试并帮助快速解决冲突。

分支式开发的好处

分支式开发带来多个优势给CI/CD和DevOps团队:

  • 减少冲突: 定期合并冲突可控。
  • 更快的反馈: 自动化构建在每次合并时运行,捕捉早期错误。
  • 更简单的管道: 单个分支减少了CI/CD设置的复杂性。
  • 更好的团队协作: 共享的分支确保每个人都保持一致。

这种结构创建了一个流畅的工作流程,为下一节与Git Flow的比较做了准备。

分支式限制

虽然分支式开发有其优势,但它也带来了挑战,团队需要解决这些挑战:

挑战 影响 如何解决
Code 稳定性 主分支的破坏性变化风险 使用强大的自动化测试
团队协调 重叠的工作可能会导致中断 依赖特性标志和频繁的小型提交
学习曲线 从长期分支转换 提供培训并逐渐过渡
规模问题 频繁合并可能会淹没大型团队 强制进行详细code审查

成功采用TBD需要坚实的自动化测试和团队内部的开放沟通

Git Flow vs. Trunk-Based: 直接比较

以下是Git Flow和Trunk-Based开发在关键方面的对比:

特性比较表格

方面 Git Flow Trunk-Based开发
Branch 复杂度 多个长期分支 单个主分支与短期分支
发布频率 预定发布 持续部署
团队规模 适合较大的团队 更适合较小的团队
Code Review 流程 分支合并时的正式审查 对小的、频繁的变更进行持续审查
测试需求 关注周期末的测试 依赖自动化测试
学习曲线 由于多个 branch 而更复杂 更简单的工作流程,但需要强大的测试
部署风险 通过阶段发布降低风险 通过频繁更新提高风险
恢复时间 更慢的回滚过程 更快的恢复能力

使用哪种工作流

Git Flow 适用于需要结构化、版本化发布的企业级项目。它适合管理多个支持版本和具有正式QA或合规需求的项目。

分支式开发 适用于优先考虑速度和灵活性的团队和项目,例如:

  • 需要快速更新的SaaS平台
  • 具有强大CI/CD管道的团队
  • 依赖可靠自动化测试的项目
  • 持续部署工作流或频繁发布
  • 需要定期更新的移动应用程序项目

一些团队甚至结合了这两种方法:使用分支式开发为核心服务,Git Flow用于具有正式发布轨迹的项目。

下一篇:如何设置CI/CD管道以支持两种方法。

CI/CD管道设置

Git Flow CI/CD设置

  • 开发分支管道: 运行单元测试、集成测试、code质量检查、构建验证和部署到开发环境。
  • 发布分支管道: 执行完整测试套件、安全扫描、构建发布候选版本并部署到预发布环境。
  • 主分支管道: 运行验证测试、处理版本号、创建生产构建、部署到生产环境并打上发布标签。

干基CI/CD设置

  • 功能分支管道: 专注于快速单元测试、code风格检查、构建验证和部署到预览环境。
  • 主分支管道 :涵盖了全面自动化测试、安全扫描、生产构建创建、渐进式部署和自动回滚功能。

Capgo CI/CD集成

Capgo 实时更新控制台界面

为了在CI/CD设置中添加实时的在线更新,Capgo可以无缝整合:

Capgo 与 GitHub 动作, GitLab CI, 和 Jenkins 以便在Git Flow和Trunk-Based管道中启用实时更新、阶段性回滚和即时回滚。它满足了Apple和Google的要求,同时支持云和自主部署。 [1].

总结和建议

根据团队规模和CI/CD成熟度选择您的工作流程,以下表格可供参考:

场景 Git Flow 分支式
团队规模 50+ 名开发者 小于 50 名开发者
发布频率 每周或每月 每日或多次每日
测试 & QA 传统 QA 周期 关注自动化测试
部署模型 多版本,传统 云原生,容器化
风险承受度 保守,受管制的设置 进步,快速反馈
  • 在较小的团队中从Trunk-Based Development开始,然后扩展到更大的团队。确保您的CI/CD管道完全自动化之前进行过渡。
  • 保持一致的code审查并在两种工作流中使用特性开关。将管道配置与您选择的工作流程对齐。

一些团队可能会混合这些方法-使用Git Flow进行重大发布,同时利用Trunk-Based Development进行特性交付。无论您走哪条路,成功都取决于正确地集成CI/CD,自动化测试并确保团队保持一致。

继续Git Flow vs Trunk-Based for CI/CD

如果您正在使用 CI/CD 流水线 vs 分支式 CI/CD 为 CI/CD 自动化规划,连接它 Capgo CI/CD 在 Capgo CI/CD 中规划产品工作流 Capgo 原生构建 在 Capgo 原生构建 中规划产品工作流 Capgo 集成 在 Capgo 集成 中规划产品工作流 集成 CI/CD 集成 GitHub Actions Integration GitHub 动作集成

实时更新 Capacitor 应用

当 web 层 bug 活跃时,通过 Capgo 发布修复,而不是等待几天的应用商店审批。用户在后台接收更新,而原生变化仍然在正常审查路径中。

来自 Martin 的人性化支持

立即开始

最新博客文章

Capgo 为您提供了创建真正专业的移动应用所需的最佳见解。