全方位质量保障!龙蜥在内核、软件包、容器镜像、三方模块的 CI 工程实践

news2024/11/13 13:02:40

编者按:在海量的代码测试和构建中, CI(Continuous Integration)在代码提交阶段,对提高软件质量和开发效率起到了至关重要的作用。2023 龙蜥操作系统大会全面繁荣开发者生态分论坛上,龙蜥社区 QA SIG Maintainer、联通数科 CUlinux 测试负责人宋彦岭从龙蜥社区质量体系、CI 架构、CI 服务流程及 CI 接入等方面进行介绍,充分展示出社区 CI 在龙蜥开源操作系统质量保障上的重要程度。

图片

 (图/龙蜥社区 QA SIG Maintainer、联通数科 CUlinux 测试负责人宋彦岭)

社区质量体系

图片

一般来说,操作系统版本发布周期可以分为三部分:第一是日常开发。日常开发过程中由代码提交触发的 CI 测试,包含 Kernel CI、Package CI、Docker CI、OOT CI,这也是目前 CI 服务体系的四项主要内容。第二是日常集成。该过程中由日常的定时任务来触发 Nightly 测试。第三是产品发布,包含功能、性能、兼容性、稳定性等测试。 我们可以看到,作为操作系统服务的第一道防线,CI 测试的意义非常重大:

  • 统一标准规范:所有开发者按照社区标准规范提交代码,既改善了研发流程,又满足开源合规需求。

  • 提前预知缺陷:在代码提交阶段就进行代码测试,提前暴露代码质量问题,减少后续测试压力,提升产品质量。

  • 全自动无感知:在社区提交的 PR 只要符合规范均自动触发 CI 测试,降低开发者使用门槛,提升研发效率。

图片

目前,龙蜥社区 CI 架构如上图,首先社区代码仓库主要来自于 Gitee 或 Github 的公开仓库,这些仓库通过 webhook 接入到社区 CI 服务体系中,接入的仓库若有新事件,如新代码合入、PR 评论等会触发 webhook 消息传递,将消息传递给 git 解析器,解析成标准的数据后进行逻辑处理。其次 CI 通过提前接入体系中的 SDK 去调度具体的任务,例如基于 T-One 平台的测试任务,或基于 ABS 平台的构建任务。最终 T-One、ABS 等平台会将任务结果返回,CI 服务通过标准回调处理,以评论的形式将结果呈现在对应的 PR 上。

在开发者的角度上,该体系由托管在 Gitee 或者 Github 上的代码,基于 CI 机器人、配置中心或 T-One、ABS 平台等基础设施,实现一系列 CI 服务。它处于自动化无感知的状态,更像是一个黑盒子。

CI 基础设施中,有关测试方面的核心在 T-One 测试平台完成,该平台集成了行业内通用的测试用例,如模糊测试、性能测试用例等,也可以由社区开发者自定义一些测试用例加入到 T-One 中,实现自动化运行。目前,T-One 已覆盖业界主流通用 OS 以及混合的硬件架构测试,支持动态扩展,利用动态扩展创建云资源,并且作为测试资源使用。

ABS 作为构建核心平台,覆盖 Anolis OS 及主流的硬件架构,可以实现对社区开源软件包的构建,同时将构建成功的软件包对象发布到公网环境中。

社区 CI 体系特色分为四大部分:第一是分层分级,针对不同仓库可以进行分层分级处理,普通仓库提供基本 CI 测试,核心仓库提供定制化的 CI 测试能力。第二是可拓展框架,CI 工具提供了插件化能力,多种工具可以组合产生联动效果,其中新增功能可以通过插件进行快速扩展。第三是接入能力,提供高度开放的接入能力,可以让开发者自定义开发测试来接入 CI 服务体系。第四是 CI/CD服务一体化,提供 PR 合入后的后续操作,根据仓库类型不同提供不同的处理能力。

CI 服务流程

CI 服务阶段从代码提交到触发 CI 测试,再由 reviewer 评审,测试失败后需要进行重新测试,也可以通过评论方式重新触发测试,评审通过则会合入 PR。

在上文中提到,CI 测试流程共有 Kernel CI、Package CI、Docker CI、OOT CI 4 种。Kernel CI 针对内核做 CI 测试,目前主要监测存放在 Gitee 上的 Cloud Kernel 仓库,若4.19、5.10、6.6 三个内核一旦有新的代码合入,由 CI 机器人进行检查 CLA 签署协议以及 PR 信息是否符合规范。再通过 CBC 工具以及 T-One 测试平台对新提交的 PR 进行测试,检测没有问题后,CI 机器人合入 PR 到指定仓库并进行自动签名操作。

CBC 与 T-One 测试部分主要测试项详见下图:

针对软件包的 Package CI,对存放在 Gitee 上的 src-anolis-os、src-anolis-sig、src-anolis-module、src-anolis-ai 等多个仓库组下的所有仓库进行检测。一旦发现新提交的 PR,先对基本信息进行检测,由 T-One 进行合规检查和代码检查,检查测试无误后由 ABS 构建出初步使用的软件包,再交给 T-One 做冒烟测试。后续如果没有问题,最后再由 ABS 构建出正式的软件包,并推送到 mirrors 仓库中。

Package CI 整个测试项详见下图:

针对容器镜像的 Docker CI,检测 baseos、app、dragonwell、language 存放在 Gitee 和 Github 公开仓库的容器仓库,一旦有新的 PR,会检查 CLA 和容器的配置文件,检测没有问题后,会先通过 ABS 构建出测试使用的容器,由 T-One 做进一步测试,测试没有问题会合入,通过 ABS 构建出正式的镜像,推送到公网的镜像仓库中。

对于容器的测试详见下图:

针对内核的第三方模块做的 CI 测试 - OOT CI ,检测仓库主要在 anolis 下以 kmod 开头的第三方模块的仓库,这些仓库中有新的 PR 产生,(该测试更轻量,与内核测试类似)先检查 CLA,通过 T-One 进行 checkpatch 检查和生成临时分支 rpm tree,然后通过 ABS 构建出新的 OOT 模块进行测试。

社区CI接入

下面介绍社区的开发者来自定义去接入 CI 流程的方法。首先在 Gitee 上建立了一个仓库 ci-meta,是针对 CI 服务体系建立的 CI 配置中心。仓库目录结构如下图,主要包括公共配置和开发者自定义的配置两大部分。其中公共配置中包含三部分:产品相关的配置、 T-One 平台测试配置、全局仓库配置,其中仓库配置中包含了代码检查、ABS 构建的选项、依赖测试等。

图片

若开发者想自己定义新的 CI 测试,则需要定义 CI 的 yaml 文件,将其存放在 CI 配置中心,其中的自定义目录 repos 则会根据首字母建立不同的目录,将相对应的软件包  CI  yaml 文件存放,就可以接入到社区的 CI 服务中进行测试。该文件中的组成分为三部分,包括仓库配置、测试配置和通知配置。若在 ci.yaml 缺失的情况下,默认引用全局配置,包括与 T-One 的交互或自定义的参数。通知配置目前支持两种方式:邮件和钉钉,集成接入后在指定状态时进行通知。

图片

目前,在上述四种 CI 服务中,Kernel CI 和 Package CI 属于常用服务,拦截了大量有问题的 PR,检测了 6.5 万 + patch,拦截了 1 万+ patch,通过 T-One 平台发起了 7万+ 测试任务,通过 ABS 平台发起了 2.1 万+ 构建任务。

未来,社区关于 CI 服务体系发展有以下展望:第一方面扩大支撑,未来会支持更多仓库来进行定制化的 CI 测试,提供更强大的测试能力。第二部分是可视化,希望打造一个全新的可视化 web 界面,帮助开发者理解和纵览社区服务,也降低接入 CI 体系的难度,通过可视化界面来完成点击接入方式。第三部分完善接入,提供体验更好的接入方式,提供更多的 CI 模式,完善开源社区的 CI 服务体系。第四部分是能力开放,提供工具封装级别的插件支持,允许开发者自定义 CI 测试流程和工具模组,自行组装和定制化 CI 流程步骤。

落地实践

由于操作系统版本发布周期相似,联通数科针对社区没有开源部分的设施进行了替换。联通数科整体以 T-One 作为测试核心,基于内部搭建的 git 仓库,建木实现任务调度和触发,koji 实现包构建,最后由 T-One 实现测试。

图片

—— 完 ——

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1702671.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【UE5.4】猫猫都能看懂的Android打包新版攻略

开发未动,兼容先行! 亲妈级攻略,一步一截图! 铲除一切奇怪的报错! 引言 最近在入坑Unreal Engine,在尝试进行Android打包时遇到了巨大的困难;不管怎么打包都是奇怪的Unknown Error报错&#…

MacBook Air M3游戏无法安装怎么办 MacBook Air可以玩3A游戏吗

在数字化迅速发展的今天,MacBook Air M3凭借其轻薄便携和强大的处理能力,成为了许多消费者的首选MacBook Air M3能够满足日常的工作和学习需求,然而,用户尝试在MacBook Air M3上安装和运行游戏时,经常遇到一些困难&…

如何免费把微信视频号的视频下载下来?电脑手机都可使用

今天,我将为大家分享一个实用的技巧:如何免费将微信视频号的视频下载下来。 微信视频号作为一个流行的短视频平台,拥有大量优质内容。然而,由于平台政策限制,我们无法直接下载视频。不过,别担心&#xff0…

nvm安装教程及使用nvm管理多个node版本

文章目录 前言一、nvm 安装教程温馨提示macOS/LinuxWindows 二、安装 node 前言 工作中,你可能会遇到以下场景: 我想使用 pnpm 命令安装依赖,但是在使用 pnpm 命令时提示如下 $ pnpm -v ERROR: This version of pnpm requires at least No…

满帮集团 Eureka 和 ZooKeeper 的上云实践

作者:胡安祥 满帮集团,作为“互联网物流”的平台型企业,一端承接托运人运货需求,另一端对接货车司机,提升货运物流效率。2021 年美股上市,成为数字货运平台上市第一股。根据公司年报,2021 年&a…

521源码-免费游戏源码下载-闯梦江湖Q萌复古全网通手游服务端H5全攻略

闯梦江湖H5:Q萌复古全网通手游服务端全攻略 一、概述 闯梦江湖H5 是一款结合Q萌画风与复古情怀的全网通H5手游。我们为您提供了最新打包的Windows服务端,并附带了通用视频架设教程和GM网页授权后台工具,让您轻松搭建并管理自己的游戏世界。 …

现代前端工程化实践:Git、Husky、Commitlint与PNPM的协同作战

引言 Git Husky 与 Commitlint 是两个在 Git 工作流程中非常实用的工具,它们可以帮助团队维护代码质量和提交规范。Husky 是一个 Git 钩子管理器,允许你在仓库级别方便地配置钩子脚本;而 Commitlint 则是用来规范 Git 提交信息的工具&#x…

办公必备!一键拆分文件,效率翻倍的秘密

需求介绍 1、我有一张数据表“测试数据.xlsx” 2、我要根据A1“COUNTY_CODE”分类拆分成几张数据表(这里从9657到9658共12类,就是拆分成12张数据表) 3、根据12个分类,发送数据邮件给对应的收件人 4、收件人及抄送人、共同抄送人…

推导2维镜像变换(Reflection Transform)的公式

我们知道2维的旋转变换公式为 Q ( cos ⁡ ( θ ) sin ⁡ ( θ ) − sin ⁡ ( θ ) cos ⁡ ( θ ) ) Q\left( \begin{matrix} \cos \left( \theta \right)& \sin \left( \theta \right)\\ -\sin \left( \theta \right)& \cos \left( \theta \right)\\ \end{matrix} \r…

【java-数据结构18-队列】

上篇文章,我们已经完成了栈的学习,下面,我们将进行队列的学习,话不多说,上正文~ 1.队列 概念 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有…

解决:java.util.concurrent.RejectedExecutionException

一 发现RejectedExecutionException错误 今天查看服务器的时候发现了一些java.util.concurrent.RejectedExecutionException错误,这个是由于线程池里的线程忙不过来报出的。如下图: 像这种 RejectedExecutionException 错误,表明在Java应…

捷报!恒瑞医药ADC创新药SHR-A1921卵巢癌适应症拟纳入突破性治疗品种公示

近日,恒瑞医药自主研发的TROP-2抗体偶联药物(antibody-drug-conjugate, ADC)注射用SHR-A1921用于治疗铂耐药复发上皮性卵巢癌、输卵管癌或原发性腹膜癌适应症被国家药品监督管理局药品审评中心拟纳入突破性治疗品种公示名单。今年3月&#xf…

ssm缴税管理系统-计算机毕业设计源码70555

摘 要 随着互联网大趋势的到来,社会的方方面面,各行各业都在考虑利用互联网作为媒介将自己的信息更及时有效地推广出去,而其中最好的方式就是建立网络管理系统,并对其进行信息管理。由于现在网络的发达,缴税管理系统的…

【RAG论文】检索信息中的噪音是如何影响大模型生成的?

前些天看到的两篇论文,论文标题为: 《The Power of Noise Redefining Retrieval for RAG Systems》《How Easily do Irrelevant Inputs Skew the Responses of Large Language Models》 主要讲述了检索文档是如何影响大模型输出的以及相关实验结果&…

基于ssm+vue图书管理系统

基于ssmvue图书管理系统 ssm477图书管理系统 相关技术 javassmmysqlvueelementui

物业

用户报修 审核专员可以操作(前端)🆗 工程部可以看到不可以操作(前端)🆗 项目经理可以看到不可以操作(前端)🆗 经理可以看到不可以操作(前端)&…

计算机网络——TCP / IP 网络模型

OSI 七层模型 七层模型是国际标准化的一个网络分层模型,大体结构可以分成七层。每层提供不同的功能。 图片来源 JavaGuide 但是这样七层结构比较复杂,不太实用,所以有了 TCP / IP 模型。 TCP / IP 网络模型 TCP / IP 网络模型可以看作是 O…

视频截图软件,这几款截图神器收好!

在数字化时代,视频内容已经成为我们获取信息、娱乐休闲的主要方式之一。而在观看视频的过程中,我们总会遇到一些想要定格下来的精彩瞬间。此时,一款高效的视频截图软件就显得尤为重要。今天,就为大家推荐几款功能强大、操作简便的…

倩女幽魂手游攻略:搬砖赚银指南,2024新手必备!

倩女幽魂手游作为一款热门的多人在线角色扮演游戏,吸引了大量玩家。在游戏中,搬砖(即通过游戏中的活动和任务赚取虚拟货币,并换取实际收益)成为了许多玩家的选择。本文将为大家详细介绍如何在倩女幽魂手游中高效搬砖&a…

1.5.3 基于Java配置方式使用Spring MVC

本实战教程主要介绍了如何使用Java配置方式来使用Spring MVC框架。相较于XML配置方式,Java配置方式提供了一种更为简洁和灵活的配置方法。 项目创建与配置 创建一个Jakarta EE项目,并设置项目名称和位置。选择Jakarta EE 10版本,不添加依赖&a…