How to Contribute to Jenkins Core Development: A Complete Guide for New Contributors
To contribute to Jenkins core development, fork the jenkinsci/jenkins repository, set up JDK 21 or 25 with Maven 3.9.6+, build using the quick-build profile, and submit pull requests that pass CI on ci.jenkins.io and receive two maintainer approvals.
Contributing to Jenkins core development requires following a specific workflow defined in the CONTRIBUTING.md file of the jenkinsci/jenkins repository. This guide walks you through the complete setup—from forking the repository to submitting your first pull request—using the exact build profiles and tooling used by the Jenkins core team.
Prerequisites for Jenkins Core Development
Java and Maven Requirements
According to CONTRIBUTING.md (lines 12-15), Jenkins core requires JDK 21 or 25 (Temurin or OpenJDK distribution) and Maven 3.9.6 or higher. You can use any Maven-aware IDE such as IntelliJ IDEA or Eclipse, as mentioned in lines 16-17 of the contributor documentation.
Node.js for Frontend Contributions
For UI changes, install Node.js and enable Corepack to access the yarn binary. The repository includes a node directory with packaged tools, so the build process can find Yarn through the path $PWD/node/node_modules/corepack/shims.
Setting Up Your Development Environment
Start by forking the repository on GitHub and cloning your fork locally:
git clone https://github.com/<your-username>/jenkins.git
cd jenkins
This creates your personal copy of the codebase where you can experiment with changes before submitting them upstream.
Building Jenkins from Source
Quick Build Profile
The fastest way to generate a WAR file without running tests uses the quick-build profile defined in the Maven configuration:
mvn -am -pl war,bom -Pquick-build clean install
The resulting artifact appears at war/target/jenkins.war immediately after the build completes.
Running a Development Instance
To launch a local server with remote-debug support, set the required JVM options to open internal Java modules and run Jetty:
MAVEN_OPTS='--add-opens java.base/java.lang=ALL-UNNAMED \
--add-opens java.base/java.io=ALL-UNNAMED \
--add-opens java.base/java.util=ALL-UNNAMED' \
mvn -pl war jetty:run
Frontend Development Workflow
If modifying UI code in the Jenkins frontend, start the Webpack development server for live reload capabilities:
export PATH=$PWD/node:$PWD/node/node_modules/corepack/shims:$PATH
yarn start
When running the backend simultaneously, start it with -Dskip.yarn to avoid duplicate asset processing, as documented in the frontend build section of CONTRIBUTING.md.
Code Quality and Linting
Maintain consistent formatting using the built-in linting tools integrated into the Maven build:
- Backend: Run
mvn spotless:applyto auto-format Java code according to the project style - Frontend: Run
yarn lintoryarn lint:fixfor JavaScript and CSS formatting
Both checks can be invoked manually for rapid feedback during development, though they also run automatically during the full build process.
Testing Your Changes
Jenkins provides three test profiles defined in the Maven configuration:
light-test: Unit tests only for fastest feedbacksmoke-test: Unit tests plus selected functional testsall-tests: Complete test suite (default profile)
Run a specific profile using the -P flag:
mvn test -Plight-test
For UI-heavy changes, add tests in the separate Acceptance Test Harness (ATH) repository rather than the core test suite.
Submitting Your Contribution
Create a pull request against jenkinsci/jenkins:master following the template located at .github/PULL_REQUEST_TEMPLATE.md. The Jenkins core team merges PRs only after meeting strict quality gates:
- At least two approvals from core maintainers
- No outstanding
needs-fixorneeds-justificationlabels - Successful completion of the CI pipeline on
ci.jenkins.io
If your pull request receives no review activity for three days, ping @jenkinsci/core-pr-reviewers to request attention. After merge, your change enters the weekly release line automatically, while the LTS team handles potential back-porting to long-term support baselines.
Key Files and Directories in Jenkins Core
Understanding the repository structure accelerates your ability to contribute effectively:
pom.xml: Maven parent descriptor defining modules, dependencies, and build profileswar/pom.xml: Specific configuration for building thejenkins.warartifactJenkinsfile: CI pipeline definition used byci.jenkins.iocore/src/main/java/: Core server implementation containing the bulk of Java source codetest/src/: Unit and functional test suiteCONTRIBUTING.md: Canonical contributor guide with setup and workflow detailsdocs/MAINTAINERS.adoc: Guidelines for core maintainers explaining the review process
Summary
- Fork and clone the jenkinsci/jenkins repository to your GitHub account before making changes
- Install JDK 21+ and Maven 3.9.6+ as mandatory build requirements defined in
CONTRIBUTING.md - Use
mvn -am -pl war,bom -Pquick-buildfor rapid WAR generation during iterative development - Run
mvn spotless:applybefore committing to ensure Java code formatting compliance - Execute
mvn test -Plight-testfor quick validation of unit tests before submission - Submit PRs that pass CI on
ci.jenkins.ioand obtain two maintainer approvals before merging
Frequently Asked Questions
What Java version do I need to contribute to Jenkins core?
Jenkins core requires JDK 21 or 25 (Temurin or OpenJDK distribution) as specified in CONTRIBUTING.md lines 12-14. While newer JDK versions might compile successfully, only versions 21 and 25 are officially supported and tested by the core maintainers.
How do I run Jenkins locally for development testing?
Use mvn -pl war jetty:run with the MAVEN_OPTS flags specified in CONTRIBUTING.md to open required Java internal modules. For frontend development, run yarn start in a separate terminal to enable the Webpack dev server with live reload capabilities, then launch the backend with -Dskip.yarn to prevent asset duplication.
What tests should I run before submitting a pull request?
At minimum, run mvn test -Plight-test to execute unit tests locally. If your changes modify core functionality or APIs, use mvn test -Psmoke-test to include selected functional tests. The full all-tests profile runs automatically in CI on ci.jenkins.io after you open your pull request.
How long does it take for a Jenkins core PR to get merged?
Merge requires at least two maintainer approvals plus passing CI checks on ci.jenkins.io. If no reviewer responds within three days, contributors should ping @jenkinsci/core-pr-reviewers in a comment. After merge, changes enter the weekly release line immediately, while potential back-porting to the LTS (Long-Term Support) branch is handled separately by the dedicated LTS team.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →