本实践模拟在电子商城项目开发的故事背景下,介绍产品研发团队如何基于CodeArts实现HE2E DevOps实施框架,完成端到端软件研发管理。
本文定义了一个虚拟的团队,以及软件研发过程中涉及到的各个角色。介绍各个角色使用CodeArts提供的工作项、代码仓库、测试、制品仓库以及流水线,结合其他云服务,开展从分析、设计、开发、测试等阶段的工作,为完成软件产品端到端的持续交付提供参考。
HE2E DevOps框架简介
HE2E DevOps实施框架是CodeArts结合自身经验与业界先进的实践提出了一套可操作可落地的敏捷开发方法论。
图1 HE2E DevOps实施框架
表1 HE2E DevOps实施框架 阶段 | 说明 |
|---|
规划和设计 | 步骤①和②是业务(或者是客户)与技术之间进行产品规划,梳理产品整体脉络,以及进行产品规划实施设计,并控制需求粒度与拆分的过程。 - 软件开发的本质是为了解决问题,提供用户价值的,而不仅是为了提供功能。影响地图就是用来鉴别用户需求是什么,深层的根因是什么。
- 用户故事就是目标和需求的载体,以用户的场景来讲故事,便于在客户、业务与开发之间进行信息的传递。在这个过程中,独立的需求条目的堆积,很容易导致只能看到各个需求条目,不能从整个解决方案思考需求。用户故事以用户使用的场景为主线,将大的阶段点,及其细分的活动,以树状的结构进行梳理和展现,既可以看到独立的需求条目,又能够看到整体需求场景。
|
计划和跟踪 | 步骤③~⑩是Scrum框架过程,是主要的管理实践。 - Scrum定义了一个相对完整的敏捷过程管理的框架。在CodeArts中,将Scrum的框架与团队日常的开发活动融合起来。主要的过程产物包括产品故事列表、迭代故事列表、潜在可交付的产品增量、以及过程中产生的问题列表;核心的团队活动包括迭代计划会议、每日站会、迭代演示会议、迭代回顾会议等会议、以及团队的日常更新。
- 同时,借鉴Kanban方法中的精益思想,可视化价值流,发现并解决阻塞与瓶颈,加速价值流交付,并加快反馈回路,持续进行改进。
|
迭代开发 |
持续交付 | 从步骤⑪开始,进入到工程实践,也就是通常说的CI/CD过程。 - 持续交付以代码仓库为基础,除了传统意义的代码资产安全与管控、多人并行开发、版本与基线管理外,也体现了团队的协作与沟通。
- 代码检查(即静态扫描)、自动化的构建、各阶段的自动化测试、以及自动化部署过程,都被串联在流水线上。
- 除了代码检查、构建、测试、部署等动态的阶段与活动,还有制品管理、环境管理(包括开发环境、测试环境、准生产环境,以及生产环境等)。
- 持续交付流水线就是将整个持续交付中,都有哪些阶段,分别运行在什么环境,每个阶段执行什么活动,准入与准出的质量门禁,以及每个阶段的输入与输出的制品进行管理。
|
背景信息
A公司是一家汽车零部件经销商。为了开拓销售市场,A公司开发了一个汽车零部件配件电子商城“凤凰商城”。
商城包含会员管理、配件管理、订单管理等功能,满足了A公司的管理需求、客户的查询与购买需求。
采用Scrum模式进行迭代开发,每个迭代周期为 “两周”。
方案架构
汽车零部件配件电子商城由5个微服务组件构成。
图2 凤凰商城技术架构图
表2 产品构成 微服务组件 | 说明 |
|---|
Web用户端服务器(对应样例代码中的“Vote”功能) | - 业务逻辑:用户可以通过浏览器访问此服务的WebUI。当用户在特定商品上单击“Like”时,服务将用户所选择物品的记录保存在Redis缓存中。
- 技术栈:Python、Flask框架。
- 应用服务器:Gunicorn。
|
Web管理端服务器(对应样例代码中的“Result”功能) | - 业务逻辑:用户可以通过浏览器访问此服务的WebUI,会动态显示用户端UI上用户单击“Like”的统计数据,此数据来自PostgreSQL数据库。
- 技术栈:Node.js、express框架。
- 应用服务器:server.js。
|
后台订单批处理程序(对应样例代码中的“Worker”功能) | - 业务逻辑:此服务为后台进程,会监控Redis缓存中物品记录,并将新记录取出并保存在PostgreSQL数据库中,以便管理端UI可以抽取数据进行统计显示。
- 技术栈:.net core或者Java(此服务提供两种技术栈实现了同样的功能,可根据需要修改配置选择其中一个作为运行时进程)。
|
订单缓存 | - 业务逻辑:此服务作为用户端UI服务的数据持久化服务存在。
- 技术栈:Redis。
|
订单数据库 | - 业务逻辑:此服务作为管理端UI服务的数据源。
- 技术栈:PostgreSQL。
|
项目研发过程中涉及到以下成员。
表3 项目角色列表 项目成员 | 项目角色 | 工作职责 |
|---|
Sarah | 项目管理员 | 负责项目整体规划、项目团队的组建。 |
Maggie | 项目经理 | 负责管理项目交付计划。 |
Chris | 开发人员 | 负责项目代码的开发、编译、部署及验证。 |
Billy | 测试人员 | 负责编写测试用例并执行。 |