返回博客

通过 CRD 生成、JUnit 5 现代化和自动化 CI 推进 Jenkins Tekton Client 插件

Maeve Ho
Maeve Ho
2025 年 10 月 19 日

Advancing the Jenkins Tekton Plugin

Jenkins Tekton Client 插件在 Jenkins 和 Kubernetes 原生的 Tekton 流水线之间架起了桥梁,允许 Jenkins 用户直接从他们现有的 CI/CD 工作流中触发和管理 Tekton 资源。在 2025 年 Google Summer of Code (GSoC) 期间,在现代化、稳定化和扩展插件功能方面取得了显著进展。

该项目引入了端到端的 CI 自动化,将测试迁移到 JUnit 5,实现了大规模的 CRD 到 Java 和 UI 的生成系统,并改进了 Jenkins 与 Tekton 的互操作性。


项目概述

Jenkins Tekton Client 插件使 Jenkins 作业能够与 Tekton 资源(如在 Kubernetes 集群上运行的 Pipelines、PipelineRuns 和 Tasks)进行交互。本次 GSoC 项目的目标是:

  • 现代化构建和测试基础设施

  • 提高测试覆盖率和可靠性

  • 从 Tekton 自定义资源定义 (CRD) 自动生成 Java POJO 和 Jenkins UI 元素

  • 加强 Jenkins 与 Tekton 之间的 CI/CD 集成

所有工作均通过公开的拉取请求、审查和测试部署,与 Jenkins 社区密切合作完成。


持续集成和构建自动化

添加了新的 GitHub Actions 配置,以自动化构建和测试过程。现在,test.ymlbuild.yml 这两个工作流确保在每次提交时都执行 mvn clean verify 和完整的构建验证。这个 CI 层确保了早期发现构建问题,并维护了跨环境的一致性测试。

Jenkinsfile 已升级,以使用现代 Linux 代理和 JDK 17,使插件与当前的 Jenkins 核心要求保持一致。此过渡提高了构建的一致性、性能和未来兼容性。


文档和开发者体验

重写了 README 文件,包含了安装指南、使用示例和 CI/CD 架构解释。增加了对支持的 Jenkins 版本、Tekton 兼容性和构建先决条件的清晰说明,使得插件对新贡献者更加易于上手。

为了遵循现代存储库标准,将默认分支从 master 重命名为 main。所有工作流和构建引用也已相应更新。

弃用了 Windows 测试环境,以简化 CI 执行并降低维护复杂性。


测试现代化和迁移到 JUnit 5

完成了从 JUnit 4 到 JUnit 5 的全面迁移。现代化的测试套件提高了可读性、可靠性和可扩展性。

亮点包括:* 将 CreateRawTestCreateRawMockServerTest 迁移到 JUnit 5 * 部分迁移和现代化 JenkinsFreestyleTestJenkinsPipelineTest * 重新启用已禁用的测试 * 采用 JUnit 5 中提供的参数化和基于断言的测试功能

此升级确保插件与当前的 Jenkins 测试生态系统保持一致。


集成和端到端测试

引入了全面的端到端测试,以验证 Jenkins 作业和 Tekton 流水线之间的交互。

已实现以下场景:* 使用 Jenkins 环境变量的 Freestyle 构建 * 使用 Tekton 资源的参数化流水线构建 * 从基于文件的定义执行 Tekton 流水线 * 使用 Tekton API 进行 Jenkins Pipeline 集成

还集成了 JaCoCo,以自动衡量测试覆盖率。这些测试确保了 Jenkins 与 Tekton 工作流的可靠行为,并作为未来更改的回归防护。


Bug 修复和功能改进

解决了 Jenkins 界面中“创建资源(原始)”步骤因重复的 @Symbol 注解而缺失的长期存在 UI 问题。此修复恢复了 Tekton 资源创建在 Jenkins UI 中的可见性和可配置性。


CRD 到 Java POJO 生成系统

这是 GSoC 项目的核心交付成果。设计了一个新系统,可在构建时自动从 Tekton CRD 生成 Java 类。此功能允许插件在无人为干预的情况下与不断发展的 Tekton API 保持同步。

关键组件:* CrdJavaGenerator – 将 CRD 生成集成到 Maven 生命周期中 * EnhancedCrdProcessor – 使用 jsonschema2pojo 解析 CRD 模式并将其转换为 Java 类 * Maven profile download-binaries – 在构建期间下载 Tekton CRD 定义 * 生成的 POJO 包括 @DataBoundConstructor 并扩展 Jenkins BaseStep 以实现 UI 集成

该系统现在支持多个 Tekton API 版本(v1v1beta1v1alpha1),并生成一千多个反映 CRD 规范的 Java 类。

此自动化大大降低了维护负担,并使 Jenkins 能够动态支持新的 Tekton 资源。


生成系统的单元测试

实现了一个广泛的测试套件来验证 CRD 到 POJO 的生成器。测试涵盖:* 多版本 CRD 兼容性 * 字段级映射和模式继承 * 生成的代码编译和 JSON 序列化 * 生成的 POJO 与现有 Jenkins 步骤之间的集成

超过五十个单元和集成测试确保了生成器在 Tekton 版本之间具有确定性行为并保持正确性。


CRD 到 Jenkins UI 自动生成

该项目开发的第二个主要功能将生成流水线扩展到了 Jenkins 前端。该系统自动将 Tekton CRD 转换为功能性的 Jenkins 配置表单。

核心模块:* TektonCrdToJavaProcessor.java * AdvancedJellyConfigGenerator.java * JellyConfigGenerator.java * TektonPojoGenerator.java

该过程将 CRD 定义转换为结构化的 Jenkins 表单,自动检测数据类型并将配置字段分组到逻辑部分,如元数据、spec 和参数。

这为未来 Jenkins 版本中的动态 UI 生成奠定了基础,允许新的 Tekton API 在 Jenkins 界面中自动出现,而无需手动编写 XML 或 Jelly 代码。


技术要点

该项目汇集了 Jenkins 插件开发的多个方面,包括 CI 自动化、测试现代化和大规模代码生成。最具挑战性的是在 Jenkins 的基于作业的架构和 Tekton 的 Kubernetes 原生工作流模型之间保持兼容性。

主要成果:* JUnit 5 迁移现代化了测试基础设施。* 自动化的 CRD 和 UI 生成为未来 Tekton API 集成建立了可维护的路径。* 端到端测试提高了对 Jenkins 与 Tekton 互操作性的信心。


未来工作

Jenkins Tekton Client 插件的下一步包括:* 扩展对自动生成的 Jelly 表单的 UI 测试和验证 * 将支持扩展到 Tekton Chains、Triggers 和 Results * 增加对大型 CRD 集合的覆盖率并缩短构建时间 * 将生成器直接集成到 Jenkins 发布工作流中


致谢

我要感谢我的导师和 Jenkins 社区在此项目中的支持和详细反馈。在 2025 年 Google Summer of Code 期间从事 Jenkins Tekton Client 插件的工作,为我提供了大规模开源开发和持续集成架构方面的宝贵经验。


关于作者

Maeve Ho

Maeve Ho

Maeve 目前在莉海大学攻读计算机科学学士学位。她拥有 Kubernetes、CI/CD 和插件开发的实践经验,曾为大规模云原生工作流和高性能计算系统做出贡献。

2025 年,Maeve 被选中为 Jenkins 项目的 Google Summer of Code (GSoC) 贡献者,专注于增强 Tekton Client 插件,通过在 Jenkins 中实现 Tekton 资源的完整 CRUD 支持。

在开源工作之外,她曾在 VNPT 实习,并在莉海大学的 NANO 实验室进行研究。Maeve 热衷于将传统的 CI/CD 工具与现代的 Kubernetes 原生解决方案相结合。

讨论
© . This site is unofficial and not affiliated with The Linux Foundation.