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

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.yml 和 build.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 的全面迁移。现代化的测试套件提高了可读性、可靠性和可扩展性。
亮点包括:* 将 CreateRawTest 和 CreateRawMockServerTest 迁移到 JUnit 5 * 部分迁移和现代化 JenkinsFreestyleTest 和 JenkinsPipelineTest * 重新启用已禁用的测试 * 采用 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 版本(v1、v1beta1、v1alpha1),并生成一千多个反映 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 发布工作流中