多分支集成发布各种坑怎么填?

简介:一文为你详细介绍云效分支模式的原理及实践,云效 Flow 这套灵活高效的分支模式可以让用户只关心集成和发布哪些特性分支,而对发布分支创建和管理、分支间合并等一系列工作,托付给云效完成。

小明的研发团队要发布一个版本,这个版本包含了多个功能特性,每个不同的特性之间有较强的独立性。不同的特性由不同的开发人员或开发小组分工完成。

他们在不同的特性分支上开发,彼此相互独立、互不影响。

一个特性开发完成后就提交测试,这个过程不影响其他特性的正常开发,全部已完成的特性全部合并进行测试和发布。在提交测试,集成合并时碰到了这样的问题:

  • 对于某个公共模块的修改出现了合并冲突
  • 由于一个特性分支的集成,导致整个版本集成失败

版本发布时间在即,为不影响整体进展,需要快速分离影响了整个集成的那个特性分支。

如果你是小明,这时你会怎么做?

小明的研发团队又要发布一个版本,整个版本有 A、B、C、D 四个功能特性一起合并集成,分别在分支 A、B、C、D 上开发。临近发布前,市场侧通知由于某种原因功能特性 B 不能发布,也就是这次发布需要剔除分支 B。按照严格的集成发布策略,A、C、D 这 3 个特性分支需要重新构建,分别再经过集成测试、预发验证,然后到生产发布。但是,这样做是有成本的。

如果你是小明,在效率和质量之间你会怎么选?

这两个情景遇到的问题,在多分支并行开发集成发布中很常见,如何快速、灵活、高效又实用地解决这类问题,成为众多小明的刚需。

阿里巴巴集团内部经历并仍在经历着大量多分支集成发布的实践,这些实践被提炼成了一套阿里的分支策略,形成了阿里分支模式,并通过公共云产品云效 Flow 对外部研发用户输出。

当使用云效Flow 分支模式时,小明的两个场景问题将可以得到灵活高效地解决。

场景一:如何快速分离影响整个集成的那个特性分支

小明可以直接在再次运行分支时,删除已集成分支,执行流水线时将会自动进行以下操作:

  • 基于分支管理器中设置的基础分支(如 master),创建新的 release 分支
  • 除了该特性分支外的其他在云效配置中的其他分支合并到 release 分支
  • 基于 release 分支的最新内容运行流水线

场景二:发布在即需求被砍,如何平衡效率和质量?

小明发现云效分支可以按环境/流程,自由地集成,考虑到本次上线的时间对后续项目进度非常关键,小明选择了跳过中间的测试阶段、预发阶段直接部署到正式环境,为了最大程度避免质量风险,小明还使用了云效Flow的发布前人工审核卡点能力,最终变更没有耽误正常发版,也未出现任何风险。

云效 Flow 这套灵活高效的分支模式可以让用户只关心集成和发布哪些特性分支,而对发布分支创建和管理、分支间合并等一系列工作,托付给云效完成。

下面详细介绍云效分支模式原理及实践。

云效 Flow 分支规范

master 代表最新发布版本

一般情况下,master分支代表最新发布版本。当需要最新发布版本的内容时,直接取分支末端即可。

不论其他哪类分支,都建议一般从 master 分支创建,并且经常从 master 分支合并,以便跟上“潮流”,减少将来集成时的各种问题,比如代码合并冲突。

每当软件正式发布前,系统会确保它基于 master 最新。

每当软件正式发布后,系统会把相应内容合并回 master,以便让 master 分支始终代表最新发布版本。

一般来说,使用者不要直接“写”东西到master分支。把“写”的工作交给系统适时自动完成。

在各 feature 分支上开发

一条 feature 分支(又称变更分支、开发分支),通常用来承载一个缺陷的修复,或者一个需求(如果不是很大的话)的开发,或者任务分解后一个任务的开发。

一般来讲,基于 master 分支最新版本创建 feature 分支。然后在 feature 分支上开发、测试,直到这个 feature 功能完成,质量 OK,准备好去集成和发布。

release 分支上的集成

release 分支用于集成和发布。基于 master 分支最新版本创建一条 release 分支,然后把想要集成的各条feature分支合并到这条release分支,进行部署和测试工作。

如果有新的 feature 分支要加入本次集成,那就把它也合并进这条 release 分支,然后再次部署并测试。

如果测试发现问题,就到 feature 分支上修复,然后把它再次合并到 release 分支,把修复带到 release 分支。

当然如果一个 feature 的问题太多太大,那干脆就放弃它。也就是说,新建一条 release 分支,把其他 feature 分支都合并过去,唯独不再合并这条 feature 分支。

就像 master 分支一样,release 分支也是由系统自动管理的。使用者不要直接在上面改代码,代码修改请总是在 feature 分支完成。

release 分支上的发布上线

当 release 分支上的质量足够好,本次想上线的功能也都具备之后,就要考虑发布上线的问题啦。如前面讲的,发布上线前,会确保它基于基础分支(常见的如 master )最新。而发布后会把 release 分支合并回 master,让 master 代表最新发布版本。

以上几节介绍的内容,见下图:

image.png

多个环境/流程分支原理

假定要想集成发布上线,要经过日常测试环境上的测试这个流程,还要经过预发环境上的测试这个流程,那么两个流程用一条 release 分支就有些不合适。因为两个流程可能同时在测不同的 feature 分支集合。

分支模式用这个办法避免这个问题:每一个测试环境,也就是每个流程,关联它自己的 release 分支。日常测试、预发测试这两个环境(也就是两个流程),分别关联两条 release 分支。这样就不会相互影响。推而广之,为正式运行环境,也对应一条release分支。也就是说,每个环境都有对应的 release 分支。

当把集成成果从一个环境传递到下一个环境时,就是把一个环境下已合并到一起的 feature 分支,再往另一个环境对应的 release 分支上合并一遍……这么做有点儿笨。对于人工处理这是一个重复操作的过程,云效会帮你自动完成这一系列重复的操作。

对应下图:

image.png

以上就是关于分支模式这种研发模式的原理性介绍,以下我们具体看一下如何在云效流水线中使用分支模式。

云效 Flow 分支模式实践

编排流水线

流水线的新建方式其他流水线相同,当新建流水线时选择了「开启分支模式」,就会自动创建包含【分支管理器】的分支模式流水线。

1、新建流水线

2、添加代码源,以使用「云效Codeup」为例,选择代码库,选择「开启分支模式」,然后点击「添加」

image.png

3、添加完成后,在「流程配置」页面可以看到第一个阶段「分支管理器」。在分支管理器中设置基础分支,基础分支默认是 master。基础分支是发布分支的创建来源。发布分支从基础分支创建,然后合并运行分支。「分支管理器」只能是在第一个阶段配置,且在这个阶段不能配置并行任务。

若有多版本发布需求,如 1.0,2.0,这里的基础分支可以设置为 master1.0,master2.0,实现多版本发布的流水线。

image.png

运行流水线

流水线配置完成后,就可以开始运行了。

1、在运行配置中,添加运行分支。

image.png

2、进入添加运行分支对话框,选择运行分支。若在代码源选择的其他代码库,这里输入运行分支。

image.png

image.png

可以添加多个分支。

image.png

3、运行分支添加完成后,就可以开始运行。在「分支管理器」卡片中可以查看执行结果及日志。若合并冲突,需要根据提示解决冲突后继续运行。

通过「源」的「查看分支」或「分支管理器」卡片的「分支详情」可以查看创建的 release 分支及运行分支信息。

image.png

image.png

4、再次运行时,可以选择继续添加分支或删除已集成分支。

image.png

删除已集成分支,执行流水线时将会自动进行以下操作:

  • 基于分支管理器中设置的基础分支(如 master),创建新的 release 分支
  • 除了该特性分支外的其他在云效配置中的其他分支合并到 release 分支
  • 基于 release 分支的最新内容运行流水线

小结

简单来说,Flow 分支模式可以自由地组合特性分支,与各自环境的发布分支做集成。

灵活的特性分支:

  • 分支可以自由地灵活组合。选择任意一个或多个分支进行组合集成。
  • 分支可以灵活地退出,将某个不需要的或有干扰的分支踢出当前集成/环境。
  • 分支可以灵活地加入,将某个需要增加的分支添加到进去。
  • 分支可以按环境/流程,自由地集成,可以跳过中间的测试阶段、预发阶段直接部署到正式环境,这个在紧急修复问题时效率较高。

灵活的特性分支当然也存在着问题,由于可以跳过中间的集成环境/流程,也就带来了未经过验证的代码发布上线的可能性,这时可以考虑使用云效Flow发布前人工卡点的能力,让发布多一层质量保障。

分支策略的选择没有绝对的正确和错误之分,关键是与项目规划、发布节奏相匹配,在实际开发项目中找到一个可以兼顾效率、质量、简单实用的选择。

原文链接

本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gartner:中国企业构建边缘计算解决方案最佳实践

作者 | Gartner研究总监 李晶 供稿 | Gartner 随着中国企业数字化成熟度和渗透度的不断提升,基础设施和运营 (I&O) 团队和领导者所需要提供的数字基础设施的位置也在逐渐增加,从云端、数据中⼼,延伸到了⽹络边缘,并且每个位置…

php生成pdf文档,PHP生成PDF文件类库大全[开源]

虽然 PHP 有附 PDFlib ,不过使用起来实在有点复杂。(PHP 说明文件中的范例)FPDF虽然现在已经停止更新了,但 FPDF 可谓是元老级的 PDF 链接库,短短的几行程序就可以产生出 PDF 档案。最可怕的是现今的PHP PDF 链接库大多是由 FPDF 衍生出来的。…

从阿里核心场景看实时数仓的发展趋势

简介:随着2021年双11的完美落幕,实时数仓技术在阿里双11场景也经历了多年的实践和发展。从早期的基于不同作业的烟囱式开发,到基于领域分层建模的数仓引入,再到分析服务一体化的新型融合式一站式架构,开发效率逐步提升…

QUIC技术创新 让视频和图片分发再提速

简介:在1月12日的「阿里云CDN产品发布会-新一代传输协议QUIC让CDN更快一步」之上,阿里云技术专家淮叶分享了QUIC技术及其应用落地实践,内容包含:QUIC协议介绍、相比TCP有哪些优势、应用场景以及技术落地实践中的协议库选择&#x…

Spring Boot Serverless 实战 | Serverless 应用的监控与调试

简介:Spring Boot 是基于 Java Spring 框架的套件,它预装了 Spring 的一系列组件,让开发者只需要很少的配置就可以创建独立运行的应用程序。在云原生的环境中,有大量的平台可以运行 Spring Boot 应用,例如虚拟机、容器…

一文读懂 Serverless 的起源、发展和落地实践

简介:Serverless 适合哪些业务场景?它可以对业务产生何种价值呢? 讲师 | 洛浩(阿里云云原生高级架构师) Serverless 的发展轨迹 2012 年,Serverless 这个单词第一次出现,由 Iron 公司提出&…

Mendix:数字化转型下一个目标,提供准时制信息

作者 | Mendix公司首席低代码解决方案官Jethro Borsje 供稿 | Mendix 从孤立系统到支持决策的信息体系 二十世纪下半叶,丰田开发的“Toyota Production System”(TPS)曾帮助公司提高了效率并能快速生产出高质量的汽车,TPS的价值得…

实战经验 | 怎样才能提升代码质量?

简介:提升代码质量的三个有效方法:领域建模、设计原则、设计模式。 影响代码差的根因 差代码的体现 我们可以列举出非常多质量差的代码的表现现象,如名字不知所意、超大类、超大方法、重复代码、代码难懂、代码修改困难……其中最为影响代码…

zblog php 静态化,ASP版ZBLOG全站静态化

现在好像很多人已经转战PHP版的ZBLOG阵营了,不过对于我建的小博客来说,ASP版的更加简单便捷,完全够用了。ASP版程序自带的文章页面静态化功能加上YTBuild这个插件可以实现全站静态化(文章页面纯静态化,其他页面伪静态化)&#xff…

简单、有效、全面的Kubernetes监控方案

简介:近年来,Kubernetes作为众多公司云原生改造的首选容器化编排平台,越来越多的开发和运维工作都围绕Kubernetes展开,保证Kubernetes的稳定性和可用性是最基础的需求,而这其中最核心的就是如何有效地监控Kubernetes集…

如何优雅保护 Kubernetes 中的 Secrets

来源 | 进击云原生现如今开发的大多数应用程序,或多或少都会用到一些敏感信息,用于执行某些业务逻辑。比如使用用户名密码去连接数据库,或者使用秘钥连接第三方服务。在代码中直接使用这些密码或者秘钥是最直接的方式,但同时也带来…

智能巡检告警配置实践

简介:智能异常分析的检测结果通过 SLS 告警功能输出到用户配置的通知渠道。在智能巡检场景中,单个任务往往会巡检大量的实体对象,涉及到的对象规则很多,我们通过SLS新版告警可以实现较好的对于巡检事件的管理。 智能异常分析的检…

基于链路思想的SpringBoot单元测试快速写法

简介:本文更偏向实践而非方法论,所提及的SpringBoot单元测试写法亦并非官方解,仅仅是笔者自身觉得比较方便、效率较高的一种写法。每个团队甚至团队内的每位开发可能都有自己的写法习惯和风格,只要能实现单元测试的效果&#xff0…

access数据库文件导入mysql数据库文件怎么打开,Access数据库从外部数据导入文本文件和VF数据库-dbf文件怎么打开...

亲爱的小伙伴们,我们又见面了!上一期我们学习了Access数据库从外部数据导入Excel文件,下图学生成绩表2就是我们新导入的数据:导入Excel文件今天我们来学习如何从外部数据导入文本文件和VF数据库。导入文本文件:我们点击…

数据在网络中是如何传输的

作者 | 杰哥来源 | 杰哥的IT之旅你有想过吗,在计算机网络当中,数据是怎么样保证准确的从客户端发送到服务器端的?中间涉及到了哪些理论?01 客户端各层对数据的封装 java实现客户端的代码如下:应用层会指定发送的服务器…

龙蜥利器:系统运维工具 SysAK的云上应用性能诊断 | 龙蜥技术

简介:本文从大量的性能诊断实践出发,来介绍 SysAK 在性能诊断上的方法论及相关工具。 文/张毅:系统运维SIG核心成员、SysAK 项目负责人;毛文安:系统运维 SIG 负责人。 系统运维既要业务稳定的运行,又要最大…

以智能工具辅助报考决策,夸克发布2022年高考志愿趋势报告

1、夸克App推出高考信息服务产品,发布“暖芒计划”助学活动,为乡村考生免费提供“专家志愿辅导”和“志愿助力包” 2、报告数据显示:80后加入高考家长大军、海南大学最受欢迎、计算机类专业热度最高。 2022年高考落下帷幕,志愿填报…

Apache RocketMQ + Hudi 快速构建 Lakehouse

简介:基于RocketMQ和Hudi零代码构建Lakehouse架构,以及RocketMQ Connector & RocketMQ Stream助力ETL数据分析,为大家提供快速构建Lakehouse的技术方案和低运维成本实现实时计算的解决方案。 本文目录 背景知识大数据时代的构架演进Rock…

柔性产线的数字孪生加速器:Unity发布UMT工具包

数字化浪潮不仅深度改变了日常生活的样貌,也在不断改造工厂的运行机制,生产线的日趋智能化,几乎重构了我们对生产效率的想象。工业4.0带来的变革,既在真实世界与虚拟世界之间建立了高效链接,也改写了人与机器的关系&am…

混合云应用双活容灾实践

简介:本文会通过一个业务 Demo 案例,介绍混合云容灾建设的难点,以及如何基于 MSHA 来快速搭建应用双活架构并具备分钟级业务恢复能力。 作者:远跖 前言 越来越多的企业在数字化转型和上云进程中选择混合云的形态(云…