一汽-大众持续交付落地实践 刘明慧DevOps负责人 刘明慧 一汽-大众DevOps负责人 负责一汽-大众DevOps体系与研发效能平台建设工作,专注于敏捷研发,持续交付,效率工程等领域。 01背景与挑战 目02建设路径 contents 录03持续交付实践 04未来展望 PART01 背景与挑战 GOPS全球运维大会2024·深圳站 背景与挑战 快速响应业务 标准化 研发过程管理 关注 安全&质量&效率 看清研发水平 与研发成本 PART02 建设路径 GOPS全球运维大会2024·深圳站 建设路径 2021.05 2021.11 2022.05 2023.04 2023.11 建工具 定规范 建平台 构度量 建体系 收资产 推标准 提能力 促提效 落平台 2023年9月,中国服贸会企业数字化转型论坛, 2023年11月,通过国家工信部信通院 2023年12月,信通院2023IT新治理 研发效能平台,荣获“创新案例” DevOps持续交付3级评估 领导力论坛评选,一汽-大众DevOps 制造行业首家 汽车行业首家 团队荣获“年度影响力团队”制造行业首家 PART03 持续交付实践 核心能力层 PLAN CODE BUILD TEST RELEASE DEPLOY OPERATE MONITOR 审计 安全 测试管理 接口管理 提测流程 测试用例 测试计划 制品管理 制品安全 制品晋级 开源软件管理 移动端制品库 制品查询 流水线构建与部署 环境管理 安全阻断 对接云平台 服务关联 流量控制 配置中心 构建分析 模版管理 基础阶段 构建管理 任务调度 任务编排 集群管理 部署策略 应用管理 需求管理 统计分析 工作流 标准模版 迭代管理 方案配置层 多角色方案 项目经理产品经理研发人员测试人员 多场景最佳实践 敏捷研发研发管理CI/CD效能度量 DevOps平台能力建设 通过自研研发效能平台建设,提供DevOps工具平台能力,提升IT研发与交付效率 代码托管 仓库管理 Tag管理分支模型 代码评审分支管理质量扫描 提交检查合入规则安全扫描 版本管理 发布管理 发布计划 发布审核 基础能力层组件管理调度引擎流程中心运营管理用户管理权限管理项目组管理配置管理消息通知 底层工具 持续交付流程(用户视角) 产品经理、开发人员、测试人员,借助标准化持续交付流程,指导研发与交付活动 需求开发 基于发布版本创建release分支 规划版本发布计划 产品开发 经理人员 测试发布 基于发布版本创建发布单 开发基于需求开发 人员创建提测任务人员 基于需求创建开发分支 发布版本与需求关联 开发开发 人员人员 测试接受提测 阻断 经理 产品发布审批节点 需求与微服务关联 人员 开发开发 人员人员 测试部署测试环境开发 执行发布 人员生成制品人员 修复扫描问题 开发测试 人员人员 阻断 回归验证 基于测试结果节点测试 执行制品晋级人员 提交代码至开发分支自动化触发检查 质量检查 单测检查 部署开发环境,进行自测&联调 开发人员 阻断 Jira 开发分支创建合入MR节点 自动化触发扫描 预构建检查 代码冲突检查 开发人员 安全扫描 质量检查 研发 效能平台 开发发布完成 产品 更新发布版本状态 更新需求状 态 分支合入 Tag标记 人员自动化后处理操作经理 开发人员 测试人员 持续交付流程(平台视角) 通过研发效能平台建立发布版本、需求、微服务、代码工程的关联关系,管理持续交付过程 发布版本 发布版本:发布单 (1:1) 版本维度 提测单1 需求2 需求1 发布单 管控生产环境发布 发布版本与需求关联 (1:N) 提测单2 需求维度测试结果,构成版本维度测试报告 提测单4 (N:1) 发布单:测试报告 (1:1) 测试报告 需求维度 管控测试结果 需求与微服务关联 (1:N) •需求1:微服务C •需求2:微服务B •需求3:微服务A,B •需求4:微服务C 微服务与代码工程关联 (N:1) 代码工程a 微服务A,B:代码工程b 代码工程b 微服务C 提测单3 需求4 需求3 需求维度进行提测(1:1) 微服务B 制品A1 制品C1 微服务维度编译构建,产出多个制品(1:N) 制品C2 制品B1 微服务A 制品晋级 通过提测单,产出制品 (1:N) 制品B2 制品C3 制品B2 制品C3 制品晋级制品晋级 发布单:待发布制品 制品A1 (1:N) 测试通过的 待发布制品 微服务维度 管控制品构建与制品晋级 微服务C:代码工程a 24.4.10版本关联的代码工程,自动化进行分支合入、Tag标记 发布版本:代码工程 (1:N) 工程维度 执行版本发布操作 管控分支与tag 以微服务为中心管理 进行微服务视角的配置关联,通过代码工程、流水线、环境的管理,实现以微服务为中心的自动关联 镜像B5 镜像B4 镜像B3 镜像B2 镜像B1 生产流水线 测试流水线 开发流水线 PRD 环境 TST 环境 DEV 环境 代码工程 微服务B 微服务A 需求2IssueID 需求1IssueID 发布版本24.4.10 无微服务视角的映射关系,缺管理,难维护 发布版本 需求 微服务 代码工程 环境 流水线 镜像 发布版本 需求 微服务 代码工程 环境 流水线 镜像 发布版本 需求 微服务 代码工程 环境 流水线 镜像 版本维度关联 发布版本与需求关联,标识每个发布版本的需求清单 需求与微服务关联,标识每个需求的开发范围 微服务与代码工程关联,进行代码工程管理 微服务与各环境关联,标识微服务的环境属性 微服务与流水线关联,标识不同流水线类型 微服务与镜像关联,管理微服务不同的镜像版本 微服务配置关联初始化一次性工作 需求 开发编译构建测试发布 需求阶段–规范版本计划 通过版本号贯穿从需求到发布流程,通过版本号规则进行规范化约束与信息追溯 1 版本号命名规范 由2部分组成,描述产品模块及版本号,两部分由“-”分割(也可以只包含版本号) 版本号规则,第一位表示发布年,第二位表示发布月,第三位表示发布序号 发布序号: OTD_VW-24.4.10 常规版本:当月第1个常规版本为10,第2个常规版本为20 Hotfix版本:当月第1个常规版本后的第1个hotfix为11,第2个常规版本后的第3个hotfix为23 产品模块 发布年发布月 发布序号 2 版本号贯穿持续交付全流程 需求与任务与发布版本绑定 版本号1需求 需求代码分支 版本发布构建情况 每个发布版本对应一个release分支 每个发布版本对应一个版本测试计划,版本测试报告 每个发布版本的每个需求,对应一个提测任务 版本号2 版本号3 代码分支 测试记录 测试报告 版本号 测试计划 代码质量 提测任务 …版本号随意,缺乏统一管理 无法建立数据管理 通过规范版本号,建立持续交付全流程关联管理 需求 开发编译构建测试发布 需求阶段–标准工作流 Epic Story Task Bug 关联发布版本 通过标准化项目模版管理问题类型与状态流转,统一标准,统一管理 1Jira标准化模版管理 分为三个层级: 第一层级:史诗 第二层级:用户故事、任务、缺陷 第三层级:设计子任务、开发子任务、测试子任务 Sub-task 版本发布完成 测试完成 接受提测任务 创建提测任务 创建开发分支 创建Story 设计子任务 Sub-task 开发子任务 Sub-task 测试子任务 Sub-task 开发子任务 Sub-task 测试子任务 2 标准工作流与状态自动流转 用户故事标准工作流是工作状态自动流转的基础 研发效能平台上执行相关操作,自动更新 Jira中用户故事工作流 通过各节点时间记录,计算需求交付周期、开发交付周期、测试交付周期,评估效率瓶颈 待处理 设计中 开发中 开发完成 测试中 测试完成 发布完成 记录需求 记录需求 记录需求 记录需求 记录需求 记录需求 开始处理时间 开始开发时间 开发完成时间 开始测试时间 测试完成时间 发布完成时间 测试交付周期 开发交付周期 需求交付周期 发布 测试 编译构建 开发 需求 开发阶段–分支模型 通过标准化分支模型与分支规范,管理日常研发交付活动 分支模型分支规范 master hotfix Tag24.3.20 Tag24.4.10 Tag24.4.11 修复线上bugHotfix发布后,合入master Tag24.4.20 分支类型 命名规范 示例说明 master master 线上主干分支,标识生产环境最新代码版本 hotfix hotfix<版本号> 紧急修复版本的发布分支示例:hotfix24.4.11 release release<版本号> 常规版本的发布分支示例:release24.4.20 feature feature-<JiraID>-描述 每个需求的开发分支,与需求是一对一关系,使用英文描述示例:feature-DEVOPS-110-userlogin Release版本发布后,合入master releasefeature 基于master分支,拉取该版本的发布分支 同步hotfix分支 基于release分支,拉取feature开发分支 feature分支合入release分支 feature 基于release分支,拉取feature开发分支 基于feature分支,提交代码 基于feature分支,提交代码 修复bug 修复bug feature分支合入release分支 发布 测试 编译构建 开发 需求 开发阶段–代码提交检查 为保障代码提交规范,在代码提交时,进行规范性检查,同时提交信息中绑定Jira需求,进行双向可追溯 1GitPush规范性检查 Commit文件类型校验 Story分支 CommitMessage格式校验 提交信息格式:[操作类型][JiraID]自由文本 操作类型 DEVOPS-100双向可追溯DEVOPS-100-userlogin 自动跳转 IMPFIXREF ADDREMOTH CommitMessage内容校验 JiraID关联的问题类型 Task 开发子任务 Epic Story Task开发子任务 Sub-task 开发子任务 DEVOPS-102 Sub-task 开发子任务 DEVOPS-103 [REF][DEVOPS-103]登录功能整合 ToDo InProgress Done 测试完成 [FIX][DEVOPS-102]修复登录bug[IMP][DEVOPS-102]优化登录逻辑[ADD][DEVOPS-102]用户登录功能 JiraID关联的问题状态(非完成态) ToDoInProgress 校验Jira任务类型 校验Jira任务状态 校验本次提交包含的文件类型 doc docx ppt pdf rar jar pptx 发布 测试 编译构建 开发 需求 开发阶段–代码提交与合入扫描 在代码提交与代码合入环节,自动化进行质量与安全检查,检查左移,有效管控日常代码质量 Push环节–自动化代码提交检查 触发时机:feature分支有代码提交 扫描操作:单元测试、增量代码质量检查 2GitMerge代码合入检查 Merge环节–自动化代码合入检查 触发时机:发起MR(目标分支release)扫描操作:单元测试、代码冲突检查、 预构建检查、代码质量检查、代码安全检查 标记人工审核结果 MRLabel 拉代码 接收结果 更新状态 满足MR合入条件 releasefeature 增量代码扫描 单元测试 1GitPush代码提交检查 创建MR 自动化触发 开发人员 代码冲突检查 触发流水线 创建扫描任务 信息处理 预构建检查代码质