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

简介: 怎样提高海量代码的测试和构建效率?

编者:在海量的代码测试和构建中, 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 实现测试。



—— 完 ——

相关实践学习
通过ACR快速部署网站应用
本次实验任务是在云上基于ECS部署Docker环境,制作网站镜像并上传至ACR镜像仓库,通过容器镜像运行网站应用,网站运行在Docker容器中、网站业务数据存储在Mariadb数据库中、网站文件数据存储在服务器ECS云盘中,通过公网地址进行访问。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
111 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
8月前
|
人工智能 Kubernetes jenkins
容器化AI模型的持续集成与持续交付(CI/CD):自动化模型更新与部署
在前几篇文章中,我们探讨了容器化AI模型的部署、监控、弹性伸缩及安全防护。为加速模型迭代以适应新数据和业务需求,需实现容器化AI模型的持续集成与持续交付(CI/CD)。CI/CD通过自动化构建、测试和部署流程,提高模型更新速度和质量,降低部署风险,增强团队协作。使用Jenkins和Kubernetes可构建高效CI/CD流水线,自动化模型开发和部署,确保环境一致性并提升整体效率。
|
7月前
|
Ubuntu 关系型数据库 MySQL
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
293 16
|
8月前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
8月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
10月前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
10月前
|
存储 人工智能 调度
容器服务:智算时代云原生操作系统及月之暗面Kimi、深势科技实践分享
容器技术已经发展成为云计算操作系统的关键组成部分,向下高效调度多样化异构算力,向上提供统一编程接口,支持多样化工作负载。阿里云容器服务在2024年巴黎奥运会中提供了稳定高效的云上支持,实现了子弹时间特效等创新应用。此外,容器技术还带来了弹性、普惠的计算能力升级,如每分钟创建1万Pod和秒级CPU资源热变配,以及针对大数据与AI应用的弹性临时盘和跨可用区云盘等高性能存储解决方案。智能运维方面,推出了即时弹性节点池、智能应用弹性策略和可信赖集群托管运维等功能,进一步简化了集群管理和优化了资源利用率。
|
10月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
10月前
|
缓存 Serverless 调度
Moka:ACS 容器计算服务助力CI/CD场景提效降本 70%
Moka,作为国内发展最快的HR SaaS厂商之一,在ACS产品初期就与阿里云产品团队紧密联系产品需求及体验反馈,本文将着重分享我们使用ACS在CI/CD 场景的最佳实践。
|
10月前
|
人工智能 Cloud Native 调度
阿里云容器服务在AI智算场景的创新与实践
本文源自张凯在2024云栖大会的演讲,介绍了阿里云容器服务在AI智算领域的创新与实践。从2018年推出首个开源GPU容器共享调度方案至今,阿里云容器服务不断推进云原生AI的发展,包括增强GPU可观测性、实现多集群跨地域统一调度、优化大模型推理引擎部署、提供灵活的弹性伸缩策略等,旨在为客户提供高效、低成本的云原生AI解决方案。