Back to blog

Advancing the Jenkins Tekton Client Plugin through CRD Generation, JUnit 5 Modernization, and Automated CI

Maeve Ho
Maeve Ho
October 19, 2025

Advancing the Jenkins Tekton Plugin

The Jenkins Tekton Client Plugin bridges Jenkins and Kubernetes-native Tekton pipelines, allowing Jenkins users to trigger and manage Tekton resources directly from their existing CI/CD workflows. Over the course of Google Summer of Code 2025, significant progress was made in modernizing, stabilizing, and extending the plugin’s capabilities.

This project introduced end-to-end CI automation, migrated tests to JUnit 5, implemented large-scale CRD-to-Java and UI generation systems, and improved Jenkins–Tekton interoperability.


Project Overview

The Jenkins Tekton Client Plugin enables Jenkins jobs to interact with Tekton resources such as Pipelines, PipelineRuns, and Tasks running on Kubernetes clusters. The goal of this GSoC project was to:

  • Modernize the build and testing infrastructure

  • Improve test coverage and reliability

  • Automate the generation of Java POJOs and Jenkins UI elements from Tekton Custom Resource Definitions (CRDs)

  • Strengthen the CI/CD integration between Jenkins and Tekton

All work was completed in close collaboration with the Jenkins community through public pull requests, reviews, and test deployments.


Continuous Integration and Build Automation

A new GitHub Actions configuration was added to automate the build and testing process. Two workflows, test.yml and build.yml, now ensure that mvn clean verify and full build validation are executed on every commit. This CI layer ensures early detection of build issues and maintains consistent testing across environments.

The Jenkinsfile was upgraded to use modern Linux agents and JDK 17, aligning the plugin with current Jenkins core requirements. This transition improves build consistency, performance, and future compatibility.


Documentation and Developer Experience

The README file was rewritten to include installation guidance, usage examples, and CI/CD architecture explanations. A clear breakdown of supported Jenkins versions, Tekton compatibility, and build prerequisites was added, making the plugin more accessible for new contributors.

The default branch was renamed from master to main to follow modern repository standards. All workflow and build references were updated accordingly.

Windows testing environments were deprecated to streamline CI execution and reduce maintenance complexity.


Test Modernization and Migration to JUnit 5

A full migration from JUnit 4 to JUnit 5 was completed. The modernized test suite enhances readability, reliability, and extensibility.

Highlights include: * Migration of CreateRawTest and CreateRawMockServerTest to JUnit 5 * Partial migration and modernization of JenkinsFreestyleTest and JenkinsPipelineTest * Reactivation of disabled tests * Adoption of parameterized and assertion-based testing features available in JUnit 5

This upgrade ensures the plugin aligns with the current Jenkins testing ecosystem.


Integration and End-to-End Testing

Comprehensive end-to-end tests were introduced to validate interactions between Jenkins jobs and Tekton pipelines.

The following scenarios were implemented: * Freestyle builds with Jenkins environment variables * Parameterized pipeline builds with Tekton resources * Tekton pipeline execution from file-based definitions * Jenkins Pipeline integration using Tekton APIs

JaCoCo was also integrated to automatically measure test coverage. These tests ensure reliable behavior across Jenkins–Tekton workflows and serve as regression guards for future changes.


Bug Fixes and Functional Improvements

Resolved a long-standing UI issue where the “Create Resource (Raw)” step was missing from the Jenkins interface due to duplicate @Symbol annotations. The fix restored visibility and configurability of Tekton resource creation within the Jenkins UI.


CRD to Java POJO Generation System

This was the core deliverable of the GSoC project. A new system was designed to automatically generate Java classes from Tekton CRDs at build time. This feature allows the plugin to stay in sync with evolving Tekton APIs without manual intervention.

Key components: * CrdJavaGenerator – integrates CRD generation into the Maven lifecycle * EnhancedCrdProcessor – parses CRD schemas and converts them into Java classes using jsonschema2pojo * Maven profile download-binaries – downloads Tekton CRD definitions during build * Generated POJOs include @DataBoundConstructor and extend Jenkins BaseStep for UI integration

The system now supports multiple Tekton API versions (v1, v1beta1, v1alpha1) and produces over one thousand Java classes that reflect the CRD specifications.

This automation significantly reduces maintenance burden and enables Jenkins to support new Tekton resources dynamically.


Unit Testing for the Generation System

An extensive test suite was implemented to validate the CRD-to-POJO generator. Tests cover: * Multi-version CRD compatibility * Field-level mapping and schema inheritance * Generated code compilation and JSON serialization * Integration between generated POJOs and existing Jenkins steps

Over fifty unit and integration tests ensure the generator behaves deterministically and maintains correctness across Tekton versions.


CRD to Jenkins UI Auto-Generation

The second major feature developed during the project extends the generation pipeline to the Jenkins front-end. This system automatically converts Tekton CRDs into functional Jenkins configuration forms.

Core modules: * TektonCrdToJavaProcessor.java * AdvancedJellyConfigGenerator.java * JellyConfigGenerator.java * TektonPojoGenerator.java

The process transforms CRD definitions into structured Jenkins forms, automatically detecting data types and grouping configuration fields into logical sections such as metadata, spec, and parameters.

This lays the groundwork for dynamic UI generation in future Jenkins releases, allowing new Tekton APIs to appear automatically in the Jenkins interface without manual XML or Jelly coding.


Technical Takeaways

The project brought together multiple aspects of Jenkins plugin development, including CI automation, test modernization, and large-scale code generation. The most challenging aspect was maintaining compatibility between Jenkins’ job-based architecture and Tekton’s Kubernetes-native workflow model.

Key results: * JUnit 5 migration modernized the testing infrastructure. * Automated CRD and UI generation established a maintainable path for future Tekton API integration. * End-to-end testing improved confidence in Jenkins–Tekton interoperability.


Future Work

Next steps for the Jenkins Tekton Client Plugin include: * Expanding UI testing and validation for auto-generated Jelly forms * Extending support to Tekton Chains, Triggers, and Results * Increasing coverage and reducing build time for large CRD sets * Integrating the generator directly into Jenkins release workflows


Acknowledgements

I would like to thank my mentors and the Jenkins community for their support and detailed feedback throughout this project. Working on the Jenkins Tekton Client Plugin during Google Summer of Code 2025 has provided invaluable experience in large-scale open source development and continuous integration architecture.


About the author

Maeve Ho

Maeve Ho

Maeve is currently pursuing a Bachelor’s degree in Computer Science at Lehigh University. With hands-on experience in Kubernetes, CI/CD, and plugin development, she has contributed to large-scale cloud-native workflows and high-performance computing systems.

In 2025, Maeve was selected as a Google Summer of Code (GSoC) contributor for the Jenkins project, focusing on enhancing the Tekton Client Plugin by implementing full CRUD support for Tekton resources within Jenkins.

Outside of open-source work, she has interned at VNPT and conducted research at Lehigh’s NANO Lab. Maeve is passionate about bridging traditional CI/CD tools with modern Kubernetes-native solutions.

Discuss