单应用变更持续交付最佳实践

本文主要介绍微服务架构下,单应用独立开发、集成测试、持续交付最佳实践。

背景信息

在微服务架构下,应用服务独立开发和发布,适合使用分支开发模式。该模式下,一个需求对应一个 feature分支,多个需求合并到release分支进行集成测试和发布。期间可能遇到以下问题:

  • 痛点1:如何快速为需求创建feature分支?

  • 痛点2:如何将多feature分支合并到release分支?

  • 痛点3:如何避免feature分支漏测,发布到线上引起生产环境故障?

  • 痛点4:当feature分支测出严重的问题,如何做到不影响其他需求正常发布?

  • 痛点5:当feature分支提交测试后,误操作发布上线,如何及时的解决并更改相应需求状态,便于相关同学跟踪进度?image.png

解决方案

云效应用交付平台 AppStack 提供变更持续交付解决方案,核心概念包括

  • 应用:软件的最小发布单元,聚合代码、环境、版本等资产,通过一个流程统一交付。

  • 变更:变更是对应用的一次特性改变(引入新的特性或改变已有特性),源于需求,终于交付。通常一个需求或任务对应一个变更,对应一个 feature 分支。

  • 研发流程:应用完成一次变更的过程和约束,包括开发、测试、发布上线的完整流程,由多个阶段的多条流水线承载,依次在不同环境进行测试、构建、部署,最终审批通过后发布到生产环境。

image.png

应用负责人,您需要编排应用构建和部署流程,并通过流水线工具实现自动化。同时,定义应用生产发布准则,以规范研发流程,降低发布风险。

作为应用负责人

以下以 spring-boot 应用“图书馆管理系统”为例,开发并发布“图书借阅”、“图书归还”、“图书续借”三个需求。

新建应用

进入应用交付AppStack首页,新建应用时,输入应用名称,并选择 应用模板。

高的 - 2024-12-16T114326.435.png

添加代码源

概览 > 代码源设置新建服务连接类型云效Codeup,选择代码仓库与默认分支。

高的 - 2024-12-16T131053.429.png

配置研发流程

(研发流程配置操作步骤变更持续交付模式。)

研发流程分为三个阶段:

  • 测试阶段:由Java单元测试、Java代码扫描、构建和部署测试环境。

  • 预发阶段:由构建和部署预发环境。

  • 生产阶段:由构建、生产发布审批、部署生产环境、合并主干和关闭变更。

生产发布审批通过后,部署生产环境。验证通过后,将release分支合并回主干master,并自动关闭相关变更。

高的 - 2024-12-16T132919.363.png

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

说明

变更集成方式和准入规则仅开通高级版可见。

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

  • 测试阶段:无准入规则。

  • 预发阶段:准入规则为:测试阶段-执行结果等于成功,避免未经过测试验证的分支进入预发。

  • 生产阶段:准入规则为:测试阶段-执行结果等于成功,预发阶段-执行结果等于成功,避免未经预发验证的分支进入生产阶段。

高的 - 2024-12-16T135825.781.png

作为一线开发

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

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

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

高的 - 2024-12-16T135605.022.png

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

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

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

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

高的 - 2024-12-16T135925.639.png

高的 - 2024-12-16T140250.502.png

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

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

高的 - 2024-12-16T140327.178.png

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

高的 - 2024-12-16T140413.744.png

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

高的 - 2024-12-16T140455.687.png

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

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

作为业务产品同学

变更发布完成了,我作为PD同学怎么知道需求发布了呢?云效AppStack和Projex工作项联动,变更发布完成后需求状态自动置为已发布,PD同学可及时看到需求进展。

配置方式:进入Projex项目设置,选择工作项与变更状态联动模板,设置变更状态为已发布时,需求状态自动置为已完成

高的 - 2024-12-16T140531.784.png