基于ZUUL大规模通信产品集成测试左移DevOps实践 姓名:刘鹏,谢智琦 GOPS全球运维大会暨研运数智化技术峰会2024·上海站 个人简介 刘鹏 产品经理 10+大规模通信软件集成测试平台建设经验,曾担任多种职位,历经多个项目,对CI、DevOps领域有丰富的实践经验。 作为诺基亚DevOps平台调度工具ZUUL的产品经理,推动和引领ZUUL在移动网络事业部的部署和运维保障。 谢智琦 架构师 10+软件开发和CI、DevOps架构经验 GOPS全球运维大会暨XOps技术创新峰会2024·上海站 作为诺基亚DevOps平台调度工具ZUUL首席架构师,带领团队攻克各种大规模CI的性能以及稳定性难题。针对通信软件大规模集成CI特点,提出了优秀的技术方案极大地提升了研发效能和CI的高可靠性。 基于ZUUL实现集成测试左移背景以及应用现状 ZUUL在大规模软件上的实践与难点分享 目录 基于ZUUL的DevOps架构设计和未来展望 问答环节 01 基于ZUUL实现集成测试左移背景以及应用现状 GOPS全球运维大会暨XOps技术创新峰会2024·上海站 GOPS全球运维大会暨研运数智化技术峰会2024·上海站 01基于ZUUL实现集成测试左移背景及痛点 背景 基于老的工作流程问题较多,效率低下。 测试左移、新的DevOps工具、流程改进等话题应运而生。 痛点 产品集成中断 跨库依赖难以验证 可视性差 其他代码合入 合入有问题代码,需要 其他代码合入 回退代码或紧急解决 1获取代码2 本地修改后,合并最新代码 3不能提交,等待解决 开发者 4再次合并最新代码 5提交代码 最新代码遇到问题,所有新代码停止提交,等待问题解决 开发本地修改代码后,需通过测试后提交代码。如果这时有其他有问题的代码合入,就会影响代码提交,只能等到问题代码回退或者解决后,再次提交。 当有有问题的代码合入,在问题解决前会禁止新代码的合入,影响上千开发人员。 01没有使用ZUUL的门禁流程之前 主代码库 GOPS全球运维大会暨XOps技术创新峰会2024·上海站 GOPS全球运维大会暨研运数智化技术峰会2024·上海站 01基于ZUUL实现集成测试左移背景以及应用现状——ZUUL引入 ZUUL是一个推动持续集成、交付和部署的系统调度工具。其核心机制是基于源代码的左移测试和依赖项目管理控制门禁。代码只有按照顺序通过测试才可以自动合入,否则会被踢出测试队列。 基于开源社区V2版本,我们团队做了二次开发版本,以更好的服务公司研发和持续集成的需求。 01基于Zuul的门禁流程 1开发提交代码 2 Reviewer审查代码,CodeReview+2 3代码合入 Patch-set创建事件标签加分Verified+1 Gate Zuul合并器准备代码 Check Zuul合并器准备代码 Gerrit 发送事件 标签加分Gatekeeper+1 代码合入 Post Zuul合并器准备代码 发送事件返回结果 触发CIjob Jenkins 返回结果 触发CIjob 返回结果 触发CIjob 返回结果 01ZUUL前端页面 Independent Pipeline 只拉入该Change和其依赖 Dependent Pipeline 拉入该库所有待合并Change和其依赖 01如何进行左移测试同时保证Trunk全绿 案例:GerritChangeA\B\C在门禁GatePipeline中运行测试 A 测试HEAD+A B 测试HEAD+A+B C 测试HEAD+A+B+C B C C C合并 A合并B合并 所有的gitcommit都经过测试并通过。所有的commits都是绿的。 所有测试都是在合并前进行。 Git树:-C -B -A -原HEAD 01如何进行左移测试同时保证Trunk全绿 案例:测试changeB失败的时候如何处理 并行测试 A 测试HEAD+A B 测试HEAD+A+B 失败 C 测试HEAD+A+B+C 自动重排 C A 测试HEAD+A B 测试HEAD+A+B,失败 ->该单子从队列中排出,不参与后续测试 重排 测试HEAD+A+C (之前的HEAD+A+B+C测试被Zuul取消) 所有的gitcommit都经过测试并通过。 所有的commits都是绿的,并且所有测试都是在合并前进行。错误在合并前就被发现,并且不影响整个流程的继续。 Git树:-C -A -原Head 01ZUUL部署与应用现状 ... Trunkalwaysgreen Patchsetcreate Codemerge … Zuul服务 触发CI验证 返回测试结果 触发CI验证 返回测试结果 从Zuul合并器下代码 CI测试 从Zuul合并器下代码 事业部n 事业部2 事业部1 部署现状 1.2020-2022期间,完成全部事业部的部署。 2.提高了合入代码质量,保障了主干分支常绿状态,主干分支代码影响降低到0。 3.开发了大量的功能,更好地支持开发和持续集成的效率,节省测试资源。 开发者 01主要交付版本 1.Job触发:重用,取消,跳过,自动重跑等等 2.性能提升:事件过滤、组织超大规模文件改动、超多单子依赖高峰时期进入。 3.超级功能:重新触发,提高测试单子优先级。 1.解耦单子跨库依赖 2.定制化前端页面设计 3.高可用-服务重启时,自动存储和回复单子状态 GOPS全球运维大会暨研运数智化技术峰会2024·上海站 Zuul1.0 Zuul3.0 基于开源社区代码版本2.0开发Zuul2.0 1.支持多个Gerritmaster 2.支持自动批量测试、循环依赖等 3.测试资源动态调整 GOPS全球运维大会暨XOps技术创新峰会2024·上海站 4.加强代码获取的安全性 02 ZUUL在大规模软件上的实践与难点分享 02定制化Zuul架构 Web/API服务器 Zuul排程器 发布任务→返回状态← 分发任务→ Jenkins Gearman插件 Jenkins Gearman插件 Gearman服务器 返回状态←… Prometheus SQL数据库 Redis 数据采集与统计 Zuul合并器 Zuul合并器 分发任务→ 返回状态← … 多合并器 下载代码 多Jenkins 数据展示(CI时间、错误率、重排率等) 监控 日志服务 版本化控制 … Docker映像存储 定制化配置文件n 定制化配置文件1 Zuul1 排程器 合并器群 数据库 WEB/AP I服务器 云基础设施架构Cloudinfrastructure K8s集群 Openstack 集群监控 02定制化Zuul的部署 安全管理Credentialmanagement 部署helmchart… Gearman服务器 Gearman服务器 Zuuln 排程器 合并器群 数据库 WEB/AP I服务器 基础架构层 应用部署层 配置管理层 02ZUUL在大规模软件上的实践难点 差异化的CI架构 不同研发部门有不同CI架构和流程,需要基于统一的CI/DevOps框架来提供解决方案 上万项目 定制化需求 不同模块的测试内容、形式不尽相同,用户在使用过程中有不同的需求。 累计数千功能 性能 高峰时期,有数百并行测试的代码单子,每个单子数百Job,对IO响应和任务分配均是巨大的挑战 数十万Jobs GOPS全球运维大会暨XOps技术创新峰会2024·上海站 GOPS全球运维大会暨研运数智化技术峰会2024·上海站 GOPS全球运维大会暨XOps技术创新峰会2024·上海站 GOPS全球运维大会暨研运数智化技术峰会2024·上海站 Gearman插件二次开发 AutoBunch TopicBunch 多个库的复杂依赖关系 集成测试CIvs单模块测试CI 高峰时期vs正常时期CI资源 Jenkinsjob和node使用方式不同 解耦门禁队列 02差异化的CI架构 GOPS全球运维大会暨XOps技术创新峰会2024·上海站 GOPS全球运维大会暨研运数智化技术峰会2024·上海站 02定制化需求 上游通讯优化 多线程处理并行IO JenkinsJob控制 业务逻辑定制 Zuul系统优化 02性能提升 事件过滤 过滤无用事件 提高效率,提前过滤 合并器优化 本地缓存 ZuulRef重用 多线程IO 解决了原开源代码的拥堵问题,加 快了开发单子的验证速度 Eventnumber~1000→~200 Bigrepomergeduration~70s→~50s PeakhourLooptime~10m→~30s GOPS全球运维大会暨XOps技术创新峰会2024·上海站 GOPS全球运维大会暨研运数智化技术峰会2024·上海站 GOPS全球运维大会暨XOps技术创新峰会2024·上海站 GOPS全球运维大会暨研运数智化技术峰会2024·上海站 02关键路径与最佳实践 Gerrit CI系统 上 游 下 游 加快响应时间 加快代码下载时间 优化Job结构 使用代码缓存 整个CI流程是一个完整的链路,为了减少CI流程总体花费的时间,除了Zuul自身的优化,上游和下游也需要做相应的调整。 02大数据库存储与刷新 NO.ofcheckpipelinechanges 数据存储与恢复 记录每个代码提交的数据和时间,生成相应的图标。包含个数,时间,成功率,关键路径等。 Metrics刷新 设置自动定时刷新时间,实时刷新数据。 百万级 代码提交/年 上亿级 数据库数据/年 价值 加强CI流程的各个环节的监控。持续挖掘和展示关键数据链路。 及时分析并调整KPI,为持续改进提供依据。 GOPS全球运维大会暨XOps技术创新峰会2024·上海站 GOPS全球运维大会暨研运数智化技术峰会2024·上海站 03 基于ZUUL的DevOps架构设计和未来展望 … … Zuul执行器群 Nodepool群 Cloud资源 Nodepool Zuul执行器 Cloud资源 Zuul执行器 Nodepool Zoo-keeper 增加非Jenkins的支持 所有服务状态存储在Zookeeper中 Gearman插件 Jenkins Jenkins群 Gearman处理器 Gearman服务器 … Zuul合并器群 数据采集与统计 Web/API服务器 Redis SQL数据库 Prometheus Zuul合并器 Zuul合并器 … Zuul排程器群 Zuul排程器 Zuul排程器 上游 支持多排程器 Gearman插件 Jenkins … 03Zuul架构演进:向社区版本靠拢 GOPS全球运维大会暨XOps技术创新峰会2024·上海站 GOPS全球运维大会暨研运数智化技术峰会2024·上海站 03ZUUL新架构优势 态兼度容端Z正oo能ke够ep认er真架完构,成提本升岗高本可职用各性项工作 虚心学习 保持现有已经开发的功能点 同时支持Nodepool和Jenkins job两种模式,更加灵活 优势 数据可视性强,方便展示CI各种指标 并提供多种数据图形 03基于Zuul的DevOps未来展望 探索多模块情况下问题定位和超大日志(>500G)分析的能力 新架构的引入性能是否能承受目前CI的提交量,需要进一步实践和提升 支持多个上下游对服务的稳定性提出更高要求 快速增长的数据库大数据量的存储与管理 03基于Zuul的DevOps未来展望 人工智能 •AI人工智能——自动智能答复 •LLM大语言模型应用 •快速定位解决