需求并行开发场景,如何高效发布

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 需求并行开发场景,如何高效发布

1. 适用场景


微服务架构下,每个应用服务独立开发、独立发布,小步快跑,持续快速交付业务需求。多人协同开发同一个应用时,分支开发模式是一个适合的协同方案。该模式下一个需求或任务通常对应一个 feature 分支,多个需求一起合并到 release 分支进行集成测试验证并发布。


该场景下,你是否有这样的苦恼?


  • 一个需求没有经过集成测试验证,却被发布上线了,最终因为“漏测”导致生产故障!
  • 一个需求经过了集成测试验证,但是临发布前发现有严重问题,但需求无法灵活“下车”,最终导致本次发布的所有需求都被延期了!


2. 云效解决方案



云效应用交付平台 AppStack 提供变更持续交付解决方案,涉及核心概念如下:


  • 应用:一个软件的最小发布单元,聚合代码、环境、版本等软件资产,以及研发流程定义。最小发布单元意味着无法解耦的一个或者多个服务的组合,这个服务组合会通过一个流程进行统一交付。
  • 变更:变更是对应用的一次特性改变(引入新的特性或改变已有特性),源于需求,终于交付。通常一个需求或任务对应一个变更,对应一个 feature 分支。
  • 研发流程:应用完成一次变更的过程和约束,包括开发、测试、发布上线的完整流程,由多个阶段的多条流水线承载,依次在不同环境进行测试、构建、部署,最终审批通过后发布生产环境。



云效通过应用定义、变更承载需求、研发流程约束发布规范,来解决以下两个问题:


  • 问题1:当其中一个 feature 分支没有经过测试验证时,怎么“阻止”它发布到生产环境避免漏测引起故障?
  • 问题2:当其中一个 feature 分支做了测试验证,但是发现有严重问题,怎样可以“退出”本次发布而不影响其他需求正常发布?


3. 云效操作实践


以下实践,以一个spring-boot应用的“图书馆管理系统”为例,开发“图书借阅功能”、“图书归还功能”、“图书到期续借功能”三个需求,一起发布上线。


3.1 前提条件

已有一个应用 spring-boot,配置好应用代码、研发流程(CI/CD流水线)、环境等。通常一个应用的研发流程可以分为测试阶段、预发阶段、生产阶段:


  • 测试阶段:由Java单元测试、Java代码扫描、构建、部署测试环境等步骤组成。用于日常测试验证。
  • 预发阶段:由构建、部署预发环境等步骤组成。用于预发布验证。
  • 生产阶段:由构建、生产发布审批(人工卡点)、部署生产环境、合并主干、关闭变更等步骤组成。
  • 配置准入规则为:「测试阶段-执行结果」等于「成功」,「预发阶段-执行结果」等于「成功」,避免没有经过预发验证的分支直接进入生产阶段。
  • 生产发布审批通过后,部署生产环境。
  • 生产环境部署验证通过后,表明本次发布成功,可以将发布release 分支合并回主干 master,并自动关闭相关变更。



3.2 需求开发测试

“需求1:图书借阅功能”、“需求2:图书归还功能”、“需求3:图书到期续借功能”三个需求分别分配给开发小张、小明、小强开发。


第1步,为一个需求新建一个变更拉一个 feature 分支

小张创建一个变更「变更1-实现图书借阅功能」,选择新建分支输入 feature001,则可自动为该需求拉取一个分支。依次类推,小明创建一个变更「变更2-实现图书归还功能」,自动新建分支feature002。小强创建一个变更「变更3-实现到期续借功能」,自动新建分支feature003。



第2步,开发代码提交到 feature 分支

小张开发好图书借阅相关代码后,提交代码到feature001上,小明开发图书归还相关代码后,提交代码到feature002分支上。


第3步,选择变更集成,部署测试环境验证

小张和小明,一借一还,需要一起部署到测试环境进行联调验证。进入应用研发流程页,选择变更1和变更2一起集成测试,云效会自动将 feature001 和 feature002 合并到自动生成的 release/xxx_n 分支,使用该 release 分支做构建,并部署环境。环境部署成功即可进行测试验证。




第4步,提交变更进行预发布

测试环境验证通过,进入「预发阶段」,选择变更1和变更2进行集成,勾选自动合并上一阶段集成的分支,会自动生成新的 release/xxx_m 集成分支,自动合并上一阶段 feature001、feature002、release/xxx_n 分支,使用新的 release/xxx_m 分支构建并部署预发环境。预发部署成功后即可进行预发验证。




3.3 需求发布上线

提交变更,需求自动化发布到生产环境

预发验证通过后,即可进入生成发布阶段。选择待发布的变更1和变更2,运行生产流水线,发布审批通过后,即可部署生产环境。生产环境部署完成,可配置自动关闭变更,并将发布 release/xxx_k 分支合并入主干 master,至此即完成了一次完整的需求发布上线。


未经过预发验证的需求禁止发布,避免“漏测”

此时若在生产阶段选择变更1、变更2、变更3一起发布,则经过变更准入卡点时会校验失败,因为变更3没有在测试环境部署验证过,即保证了没有经过测试验证的需求不可发布。



需求临时“下车”,退出发布窗口,不影响其他需求发布

临发布前,变更3因没有测试验证通过,不满足发布条件,团队本次决定图书续借功能不上线,只上线变更1和变更2,则可再次运行预发阶段流水线,将变更3踢出集成区,退出本次发布。



4. 总结语


至此,本方案完成了从应用配置、到需求开发、多变更(需求)集成测试、发布上线的完整流程,满足了变更分支自动创建、变更分支自动合并集成测试、发布准入卡点控制等诉求,避免因为“漏测”带来的生产故障,也避免因为其中一个需求未达到发布条件延期所有需求。

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
SVN版本控制系统
SVN是现在软件开发之中的主流软件版本控制工具,在工作之中利用SVN可以有效的解决多人开发的代码管理问题,本课程将为读者讲解SVN服务器的配置以及基于MyEclipse的SVN客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。
相关文章
|
1月前
|
敏捷开发 开发框架 数据可视化
|
3月前
|
敏捷开发 Devops jenkins
DevOps、瀑布模型与敏捷开发:关系解析与对软件交付工程师的影响
DevOps、瀑布模型与敏捷开发:关系解析与对软件交付工程师的影响
43 1
|
5月前
|
数据可视化 IDE BI
如何实现软件的快速交付与部署?
如何实现软件的快速交付与部署?
|
8月前
|
敏捷开发 数据可视化 测试技术
敏捷开发方法和工具:让你的团队更高效、更灵活
Leangoo领歌是一款永久免费的专业敏捷开发管理工具,也提供私有部署。国产软件,提供端到端敏捷研发管理解决方案,包括小型团队敏捷开发,规模化敏捷SAFe,Scrum of Scrums大规模敏捷.
|
程序员
开发新概念:代码管理(代码框架)
开发新概念:代码管理(代码框架)
125 0
|
数据可视化 Devops 数据挖掘
CORNERSTONE | DevOps平台是如何实现开发效率的双倍提升?
随着企业业务对软件系统日益依赖,IT管理与研发模式也随之对“敏捷”模式产生了需求,也就是今天人们时常提起的DevOps。提升效率,是DevOps实践的核心内容之一。就让我们来一起从软件生命周期的业务流与工作流,探讨DevOps实践效率提升的方向与方法吧。
1034 0
|
持续交付

热门文章

最新文章