项目版本管理的最佳实践:云效飞流Flow篇

简介: 飞流Flow的最佳实践(使用阿里云云效)为了更好地使用飞流Flow,接下来将结合阿里云云效来讲解飞流Flow的最佳实践

目录


一、分支规约


二、版本号规约


2.1 主版本号(首位版本号)


2.2 次版本号(迭代号)


2.3 小版本号


三、云效飞流Flow的最佳实践(使用阿里云云效)


3.1 总体流程图


3.2 弓行同学与阿吉同学的最佳实践


3.2.1 功能分支(feature分支)的创建


3.2.2 流水线的创建


3.2.3 日常环境发布


3.2.4 预发环境发布


3.2.5 危险分支下线


3.2.6 生产环境发布


3.2.7 生产环境发布:写基线


四、FAQ



一、分支规约


image.png


二、版本号规约


在最佳实践中,我们常用的版本号为三位数版本号,其构成如下:


V主版本号.次版本号.小版本号

eg:V1.0.0、V1.5.0、V1.13.1等


2.1 主版本号(首位版本号)


主版本号,也叫首位版本号、顶位版本号,即V后第一个版本号。主版本号一般代表项目的期数与产品方向。除非项目合同改变、大规模api不兼容、产品方向改变、底层架构升级等情况外不轻易更新。


另外,项目未正式发布、未正式孵化、未正式上线,则首位版本号为0,一期发布,则为V1,二期发布则为V2。


2.2 次版本号(迭代号)


次版本号,也叫迭代号,一般代表某个迭代发布的功能集合(一个迭代发布会包含若干个功能更新)。


如V1.1.0:第一期项目第一迭代发布版本、V1.2.0:第一期第二迭代发布版本、第一期第十八个迭代发布版本:V1.18.0。


2.3 小版本号


小版本号,是为了某些小功能的临时上线,热修复的临时上线设置的小迭代,通常不包含大的功能性更新,常常是围绕某个功能点进行升级或者某个bug的修复进行上线。


三、飞流Flow的最佳实践(使用阿里云云效)


为了更好地使用飞流Flow,接下来将结合阿里云云效来讲解飞流Flow的最佳实践


3.1 总体流程图


下图为最乐观形式下的飞流Flow模型图,可以见到,release分支是多个feature的集成版本。同时,release又可以通过流水线进行组织,使用在不同的项目环境构建下。


1.png


3.2 弓行同学与阿吉同学的最佳实践


这里要邀请出两位同学进行接下来的讲解,他们是【弓行】同学与【阿吉】同学。


3.2.1 功能分支(feature分支)的创建


项目组规划了迭代V1.1.0,迭代backlogs包括


某个bug的修复【弓行同学】

function1 功能的开发【阿吉同学】

function2 功能的开发【弓行同学】

迭代开始时,弓行同学与阿吉同学将会基于master创建三条功能分支,防止三条分支的功能代码互相耦合。

image.png

2.jpg


完成分支创建后,版本库中的分支情况便如下图所示,各负责开发的同学可以在各分支上进行开发而不互相影响。


3.png


3.2.2 流水线的创建


在云效中,可以将流水线分为三种环境,他们是:【日常环境】、【预发环境】和【生产环境】。云效中的流水线为我们提供了各式各样灵活的构建步骤、部署步骤和人工卡点模版,我们可以基于不同的需求创建流水线的流程。


弓行同学是这样创建他的项目流水线的(请无视正式环境的构建失败):


4.jpg


日常环境和预发环境常用于开发与测试,因此他的步骤比较简单:


即:【分支集成】-【前后端构建】-【前后端制品】-【前后端部署】


注:在【部署阶段】,为当前流水线制定部署的机器便可完成流水线和部署环境的绑定。


4.jpg


需要注意的是,因为我们需要使用飞流Flow对项目进行版本管理,因此在第一步【源】选择时,选择的版本库需要开启分支模式(同一条流水线存在多个构建源时(如一个流水线需要同时构建前后端的情况),只支持一个源设置分支模式)


6.png


3.2.3 日常环境发布


完成了流水线的设置后,可以点击【运行】对流水线进行测试。在运行时,由于开启了分支模式,此时需要将本次加入【DEV日常流水线】的分支加入到构建列表中。


7.png


运行后,分支管理器会对feature_bugfix、feature_function1、feature_function2 等三个分支进行集成,并生成一个新的【origin/release】分支(如下图),而这个release分支就是专门服务于日常环境的发布分支了。


8.png


此时,我们的版本线是这样的(红线代表由云效分支管理器的自动集成)。需要注意的是,release分支的我们不应该直接修改(除了解决冲突外)


10.png


而随着日常开发的持续进行,每当分支上有同学提交了代码并触发了流水线的重新运行,分支管理器变会对分支进行集成处理,形成包含最新分支代码的commit


11.png


3.2.4 预发环境发布


经过每天辛辛苦苦的搬砖,由阿吉同学负责的function1功能和弓行同学负责的bugfix通过了自测和日常冒烟,可以上预发进行验证了。


此时则需要到预发的流水线中,对这两条分支进行集成操作。


12.png


选择完需要集成的分支之后,点击运行,便可以实现在预发环境发布这两条分支。


此时的版本线是这样的(绿线代表由预发流水线分支管理器的集成)。如此一来,预发环境便得到了只包含bugfix和function1而不含没有冒烟通过的function2的最新代码的纯净提交。


测试同学和开发同学便可以在预发环境对功能进行预发验证。


13.png


同理,当弓行同学的function2功能也开发自测完、在日常冒烟验证后,在预发流水线里添加他的分支,便可以完成对function2的集成了,至此,整个版本线如下所示:


14.png


3.2.5 危险分支下线


在预发环境进行预发验证和测试时,测试同学发现由【阿吉】同学开发的function1功能虽然完成了开发,但是他的改动会影响某个功能正常运行,而发布日迫在眉睫,现在改动一定是来不及的,此时阿吉同学的feature_function1分支便是一个危险分支,不能够上线。此时,需要在预发流水线对阿吉同学的代码进行下线操作。


15.png


下线后,因为涉及到的改动会比较多,此时云效的分支管理器会自动将feature_function2和feature_bugfix两条分支重新集成到为我们创建的另一条预发环境使用的发布分支【release_pre_2】中,以减少代码冲突解决的次数。


16.png


此时,版本线如下图所示(蓝线为云效分支管理器集成,而原origin/release_pre分支已经废除,取而代之的是origin/release_pre2):


17.png


3.2.6 生产环境发布


将通过测试的分支在生产流水线中添加(如3.2.4步)并实现构建便可完成生产环境的发布,生产环境运行的分支也是一条release分支。


在实践中,推荐将生产环境的发布流程增加人工卡点(审批),即流水线的设置可以如下:


【构建】-【部署审批(人工卡点)】-【灰度部署(分批)】-【生产部署(分批)】-【生产验证(人工卡点)】-【写基线】


3.2.7 生产环境发布:写基线


写基线是指将发布分支的代码合并到当前master分支中,一般在完成生产验证之后执行。


18.png


完成发布后,整体个版本线流程图是


19.png


四、FAQ


Q1: 云效Flow下如何进行code review和拉取请求?


A1: 基于云效Flow进行团队协作开发时,可以围绕feature分支进行code review和pr操作,即除了保护release分支外,还保护feature分支,不允许直接提交到feature分支,且另外创建origin/feature_xxx_pr分支进行拉取请求。不仅如此,在最终发布到生产之前,设置一个人工卡点来进行code review操作也是可行的,只是code review的粒度不一样(前者基于每个commit、后者基于发布的整个功能)。如果团队的发布节奏比较紧急且人力资源不太充足,可以采取发布前进行人工卡点 + 团队code review的形式。


Q2: 云效Flow适合什么样的开发场景或者开发团队?


A2:云效Flow适合团队规模适中,一个迭代中所需要开发的backlogs涉及到不同的业务域,且存在分支发布风险或存在迭代周期交叉情况(如1.2.1与1.3.0同时开发并提测)的敏捷团队。如上述最佳实践中,【阿吉】同学开发的function1在临近上线前发现会影响其他业务功能开发,需要临时下车不发布;如果一个开发团队中只有两三个人,那么一切从简便可。


Q3: 我可以不使用云效来实现Flow吗?


A3:目前来看,使用云效来实现Flow是最省时间的,若不使用云效,可以采用人工管理release分支的构建+jenkins流水线的形式也是可以实现Flow的(或者采用脚本自动合并分支)


Q4 : 远程feature分支可以不删除吗?


A4:远程feature可以不删除,但是由于feature在发布后已经合并到了基线,不删除留存在远程版本库意义不大。


Q5: 多个分支同时开发,遇到代码冲突怎么办?


A5:云效提供了完成的冲突解决教程。最安全的做法是将集成分支拉到本地,在本地解决冲突后,构建成功后再提交到远程release分支


20.png

21.png


Q6: 下一次迭代,还需要重新创建流水线吗?


A6: 不需要,只需要在原先的流水线中将原来需要集成的分支删除(实际上发布后也会自动删除),重新添加需要发布的功能分支上去便可


Q7: 预发、日常都集成了同一个feature,重新构建的话新提交会影响两个环境吗?


A7: 一旦预发流水线、日常流水线都集成了同一个feature分支,那么开发者提交代码后触发重新部署,在预发环境和日常环境都会呈现最新的功能特性


Q8: 几条release分支会互相合并吗(如日常的release和预发的release)?


A8: 不会,release分支相互独立,完全没有一点关系,他们的相同也只是名字上的部分相同而已。


Q9: 对比了gitflow、AoneFlow感觉更加灵活和自由,对风险的控制也是比较稳妥的,那么AoneFlow是最好的版本管理模型吗?


A9:没有最好的版本管理模型,适合自己生产的具体情况的才是最好的



以上便是项目版本管理的最佳实践:云效飞流Flow篇的所有内容,欢迎在评论区讨论与提出改进意见!

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
SVN版本控制系统
SVN是现在软件开发之中的主流软件版本控制工具,在工作之中利用SVN可以有效的解决多人开发的代码管理问题,本课程将为读者讲解SVN服务器的配置以及基于MyEclipse的SVN客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。
目录
相关文章
|
3天前
|
Kubernetes 安全 Devops
【云效流水线 Flow 测评】驾驭云海:五大场景下的云效Flow实战部署评测
云效是一款企业级持续集成和持续交付工具,提供免费、高可用的服务,集成阿里云多种服务,支持蓝绿、分批、金丝雀等发布策略。其亮点包括快速定位问题、节省维护成本、丰富的企业级特性及与团队协作的契合。基础版和高级版分别针对小型企业和大规模团队,提供不同功能和服务。此外,云效对比Jenkins在集成阿里云服务和易用性上有优势。通过实战演示了云效在ECS和K8s上的快速部署流程,以及代码质量检测和AI智能排查功能,展示了其在DevOps流程中的高效和便捷,适合不同规模的企业使用。本文撰写用时5小时,请各位看官帮忙多多支持,如有建议也请一并给出,您的建议能帮助我下一篇更加出色。
216785 18
|
3天前
|
运维 Devops
云效产品使用报错问题之代码域修改配置后,删除了代码组,代码未删除,但是项目现在看不到了,如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
3天前
|
API Docker 容器
在云效中,你可以通过自定义Flow step来自定义staging流程
【2月更文挑战第18天】在云效中,你可以通过自定义Flow step来自定义staging流程
31 3
|
3天前
|
运维 监控 数据可视化
云效流水线 Flow 评测报告
作为运维工程师,我有使用Jenkins和GitLab CI/CD的经验。Flow在新人上手方面表现出色,界面清晰,文档支持良好。产品功能全面,支持多种语言和环境,性能稳定,且具备开放性,能自定义和扩展。虽然在可视化和监控上有改进空间,但相比其他CI/CD工具,Flow在成本、功能和性能上颇具竞争力,适合团队使用。我推荐采用云效流水线Flow提升研发效率和质量。
|
3天前
|
JavaScript 数据可视化 jenkins
云效流水线 Flow测评报告
该内容是一位维护人员对于CI/CD工具Flow的使用体验和改进建议。他提到Flow对新人友好,但主要与云效和Codeup关联性强。他建议:1) YML和可视化编排能互相转换;2) 流水线部署时可按参数选择主机组;3) Webhook触发器应可修改或重置地址以应对人事变动;4) 优化部署脚本执行,解决如`#!/bin/bash`导致的执行问题;5) 强化部署脚本模板和检查机制;6) 解决偶现的node.js打包异常。
115 4
|
3天前
|
监控 数据可视化 测试技术
云效流水线 Flow 评测:助力企业高效完成 CICD 全流程
云效流水线 Flow 评测显示其在CI/CD领域表现出色,尤其适合新人上手。具备直观的可视化编辑和Yaml化选项,丰富的文档教程,以及全面的功能,如多代码源支持、自动化测试、稳定部署及阿里云服务集成。此外,Flow性能稳定,监控功能强,且高度可扩展,支持插件和API集成。相比其他工具,Flow在成本、功能和性能上有竞争优势,特别适合与阿里云生态结合的团队。作为一款易用且性价比高的工具,Flow值得推荐给各类企业。
233 11
|
3天前
|
弹性计算 安全 Java
基于云效流水线 Flow的测评报告
基于云效流水线 Flow的测评报告
365 6
基于云效流水线 Flow的测评报告
|
3天前
|
弹性计算 Java Maven
云效流水线 Flow 评测
Java开发团队青睐云效流水线Flow作为CI/CD工具,因其对Java/Maven的良好支持,直观界面,与阿里云ECS的集成及实时反馈。Flow功能全面,开放且可定制,尤其适合已使用阿里云服务的团队。尽管在非阿里云服务集成上有改进空间,但Flow的性价比和端到端支持使其成为推荐选择。
67 2
|
3天前
|
Java jenkins 测试技术
云效Flow:打造高效、稳定的CI/CD流程实战指南
云效流水线Flow评测展示新建流水线步骤,包括选择模板、添加源、Java构建、主机部署及自定义任务。通过图形界面逐项配置,如代码扫描,保存后运行流水线。虽然Flow易于上手,功能丰富,支持多环境部署,但复杂项目管理稍显繁琐,社区支持需加强。对比其他CI/CD工具,Flow在成本、功能和性能上有竞争力,适合作为团队选择。
云效Flow:打造高效、稳定的CI/CD流程实战指南
|
3天前
|
数据可视化 开发者
开发者评测|云效流水线 Flow
体验云效流水线Flow,图形化拖拉拽编排适合小团队,界面简洁,管理清晰。流水线编辑布局直观,支持并行步骤,方便查看日志。作为后端开发者,需求包括便捷错误日志查看、构建记录和环境区分。Flow上手简单,配置直观,功能齐全,但资源限制可能影响多任务并发。通知机制的完善将更佳。相比其他CI/CD工具,Flow功能强,性价比高,适合推荐给团队使用。