多人协同开发场景,如何做到高效发布

系统算
• 阅读 290

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

  • 痛点 1:当开发同学领到一个需求时,怎么为这个需求快速地拉一个 feature 分支?
  • 痛点 2:当多个相关需求一起发布时,多个 feature 分支怎么高效自动化地合并到 release 分支?
  • 痛点 3:当其中一个 feature 分支没有经过测试验证时,怎么“阻止”它发布到生产环境避免漏测引起故障?
  • 痛点 4:当其中一个 feature 分支做了测试验证,但是发现有严重问题,怎样可以“退出”本次发布而不影响其他需求正常发布?
  • 痛点 5:当一个需求 feature 分支提交测试了、发布上线了,怎么自动、及时的更改相应需求状态,便于相关业务、产品、测试同学跟踪进度?

多人协同开发场景,如何做到高效发布

云效解决方案

云效应用交付平台 AppStack 提供的变更持续交付解决方案可以比较轻松地解决以上问题。在了解具体的使用前,我们先了解下 AppStack 中涉及的一些核心概念:

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

多人协同开发场景,如何做到高效发布

下面,我们以一个 spring-boot 应用的“图书馆管理系统”为例,演示如何在云效应用交付平台 AppStack 中开发“图书借阅功能”、“图书归还功能”、“图书到期续借功能”三个需求,并一起发布上线。**过程中,前述的 5 个痛点都将得到解决。

作为应用负责人

作为应用负责人,需要编排应用构建、部署流程,通过流水线工具自动化起来;需要定义应用生产发布准则,来规范应用研发流程降低发布风险。

新建应用

新建应用,输入应用名称,应用模板选择「变更持续交付模式」。

多人协同开发场景,如何做到高效发布

代码源配置

应用设置,配置应用代码源,设置默认分支。

多人协同开发场景,如何做到高效发布

配置研发流程

本应用的研发流程可以分为测试阶段、预发阶段、生产阶段:

  • 测试阶段:由 Java 单元测试、Java 代码扫描、构建、部署测试环境等步骤组成。用于日常测试验证。
  • 预发阶段:由构建、部署预发环境等步骤组成。用于预发布验证。
  • 生产阶段:由构建、生产发布审批(人工卡点)、部署生产环境、合并主干、关闭变更等步骤组成。
  • 生产发布审批通过后,部署生产环境。
  • 生产环境部署验证通过后,表明本次发布成功,可以将发布 release 分支合并回主干 master,并自动关闭相关变更。

多人协同开发场景,如何做到高效发布

设置变更集成方式和准入规则

本示例各阶段都选择「添加变更集成」方式,在运行阶段流水线时可以选择多个变更分支集成到 release 分支进行构建部署验证。

  • 测试阶段:无准入规则。
  • 预发阶段:配置准入规则为:「测试阶段-执行结果」等于「成功」,避免没有经过测试验证的分支直接进入预发。
  • 生产阶段:配置准入规则为:「测试阶段-执行结果」等于「成功」,「预发阶段-执行结果」等于「成功」,避免没有经过预发验证的分支直接进入生产阶段。

多人协同开发场景,如何做到高效发布

作为一线开发

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

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

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

多人协同开发场景,如何做到高效发布

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

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

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

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

多人协同开发场景,如何做到高效发布

多人协同开发场景,如何做到高效发布

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

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

多人协同开发场景,如何做到高效发布

多人协同开发场景,如何做到高效发布

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

多人协同开发场景,如何做到高效发布

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

多人协同开发场景,如何做到高效发布

第 5 步,提交变更进行生产发布

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

作为业务/产品同学

变更发布完成了,我作为产品同学怎么知道需求发布了呢?云效 AppStack 的变更和云效项目项目协作 Projex 中的工作项做了状态联动,支持变更发布完成后自动将需求状态置为「已发布」,这样产品同学可及时看到需求进展(解决上述痛点 5)。

具体配置方式如下:进入云效 Projex 项目-项目设置-自动化规则,选择「支持工作项与变更状态的联动」模板,配置当产品类需求关联的全部变更状态为「已发布」时,将需求状态置为「已完成」。

多人协同开发场景,如何做到高效发布

至此,本方案完成了从应用配置、到需求开发、多变更集成测试、发布上线的完整流程,满足了变更分支自动创建、变更分支自动合并集成测试、发布准入卡点控制等诉求,支持变更关联业务需求和状态联动,完整追溯需求的全生命周期流程。

🔔 注: 云效 AppStack 中的变更持续交付模式为高级版付费功能,加入钉钉群:42574350 可申请免费试用体验。

点击此处,了解更多。

点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Easter79 Easter79
3年前
SpringBoot自定义序列化的使用方式
场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x
Stella981 Stella981
3年前
Git Tag的常用方法
0自我理解tag就像是标志一个点,branch是一条线;tag是静态的,branch要向前走;稳定版本备份用tag,新功能多人开发用branch(开发完成后merge到master)1常用命令1.1查看远程分支gitbrancha1.2查看本地分支
Stella981 Stella981
3年前
Kerberos无约束委派的攻击和防御
 0x00前言简介当ActiveDirectory首次与Windows2000Server一起发布时,Microsoft就提供了一种简单的机制来支持用户通过Kerberos对Web服务器进行身份验证并需要授权用户更新后端数据库服务器上的记录的方案。这通常被称为Kerberosdoublehopissue(双跃点问题),
Stella981 Stella981
3年前
Nginx + lua +[memcached,redis]
精品案例1、Nginxluamemcached,redis实现网站灰度发布2、分库分表/基于Leaf组件实现的全球唯一ID(非UUID)3、Redis独立数据监控,实现订单超时操作/MQ死信操作SelectPollEpollReactor模型4、分布式任务调试Quartz应用
Stella981 Stella981
3年前
DevOps 初学者宝典
什么是DevOps随着软件发布迭代的频率越来越高,传统的「瀑布型」(开发—测试—发布)模式已经不能满足快速交付的需求。2009年左右DevOps应运而生,简单地来说,就是更好的优化开发(DEV)、测试(QA)、运维(OPS)的流程,开发运维一体化,通过高度自动化工具与流程来使得软件构建、测试、发布更加快捷、频繁和可靠。!DevOps
Stella981 Stella981
3年前
SpringBoot自定义序列化的使用方式
场景及需求:项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串。例如:\    {        "id":1,        "name":null    },    {        "id":2,        "name":"x
Wesley13 Wesley13
3年前
如何利用策略模式避免冗长的 if
策略模式。在实际的项目开发中,这个模式也比较常用。最常见的应用场景是,利用它来避免冗长的ifelse或switch分支判断。不过,它的作用还不止如此。它也可以像模板模式那样,提供框架的扩展点等等。对于策略模式。本篇我们讲解策略模式的原理和实现,以及如何用它来避免分支判断逻辑。后续我会通过一个具体的例子,来详细讲解策略模式的应用场景以及真正的设计意图
Git 代码分支管理 | 京东云技术团队
Git代码分支的命名规范以及管理方式对项目的版本发布至关重要,为了解决实际开发过程中版本发布时代码管理混乱、冲突等比较头疼的问题,我们将在文中阐述如何更好的管理代码分支。
云数据库MySQL多人协同开发实践
随着云计算技术的快速发展,云数据库作为云计算的重要组成部分,为企业提供了高效、灵活和可靠的数据存储和管理服务。其中,MySQL作为一款流行的开源关系型数据库,在云数据库领域具有广泛的应用。多人协同开发是软件开发过程中的重要环节,本文将探讨云数据库MySQL多人协同开发的实践。
飞速携手DeepSeek,开启低代码开发新时代
“ 数字化转型的痛点,如何破局? 在数字化转型浪潮中,企业亟需快速响应业务需求,但传统开发模式却面临周期长、成本高、技术门槛高等难题。低代码虽能简化流程,但面对复杂业务逻辑时,仍依赖人工梳理需求、设计架构,效率瓶颈始终存在。如何让应用开发真正实现“所想即所得”?”
系统算
系统算
Lv1
故园今夕是元宵,独向蛮村坐寂寥
文章
3
粉丝
0
获赞
0