https://www.jenkins.io/ Jenkins Blog 2026-03-19T18:14:09+00:00 https:/www.jenkins.io/blog/2026/03/19/revamped-build-monitor-plugin/ Revamped Build Monitor plugin 2026-03-19T18:14:09+00:00 2026-03-19T00:00:00+00:00 We’re excited to announce a major update to the Build Monitor plugin - a complete redesign that refreshes its big-screen view with a cleaner, more modern interface for following build statuses. So what’s new? Rewritten and redesigned Originally created for Jenkins 1 and powered by AngularJS, the plugin has now been completely rebuilt in React. The redesign uses components from the Jenkins Design Library and aligns with the new Jenkins interface, delivering a cleaner look, smoother navigation, theme support, and a more maintainable foundation for future development. Customization Build Monitor is now theme-aware - allowing you to match its appearance to your Jenkins theme. Check out some of the themes... <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2026/03/19/revamped-build-monitor-plugin.png" alt="Revamped Build Monitor plugin" /></span> </p> <div class="paragraph"> <p>We’re excited to announce a major update to the <a href="https://plugins.jenkins.io/build-monitor-plugin/">Build Monitor</a> plugin - a complete redesign that refreshes its big-screen view with a cleaner, more modern interface for following build statuses.</p> </div> <hr> <div class="sect2"> <h3 id="so-whats-new"><a class="anchor" href="#so-whats-new" />So what’s new?</h3> <div class="paragraph"> <p><strong>Rewritten and redesigned</strong></p> </div> <div class="paragraph"> <p>Originally created for Jenkins 1 and powered by AngularJS, the plugin has now been completely rebuilt in React. The redesign uses components from the Jenkins Design Library and aligns with the new Jenkins interface, delivering a cleaner look, smoother navigation, theme support, and a more maintainable foundation for future development.</p> </div> <div class="paragraph"> <p><strong>Customization</strong></p> </div> <div class="paragraph"> <p>Build Monitor is now theme-aware - allowing you to match its appearance to your Jenkins theme.</p> </div> <div class="paragraph"> <p>Check out some of the themes available for Jenkins:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://plugins.jenkins.io/dark-theme">Dark theme</a> - A sleek, modern look that’s easy on the eyes.</p> </li> <li> <p><a href="https://plugins.jenkins.io/solarized-theme">Solarized theme</a> - Ethan Schoonover’s beloved, balanced theme returns with a fresh release for Jenkins.</p> </li> <li> <p><a href="https://plugins.jenkins.io/catppuccin-theme">Catppuccin theme</a> - A soothing pastel theme for Jenkins.</p> </li> <li> <p><a href="https://plugins.jenkins.io/chocolate-theme">Chocolate theme</a> - Indulge your Jenkins in rich, dark tones with golden highlights for a refined and elegant developer experience.</p> </li> <li> <p><a href="https://plugins.jenkins.io/nord-theme">Nord theme</a> - A clear, uncluttered, and elegant design to achieve undisturbed focus and excellent readability.</p> </li> </ul> </div> <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2026/03/19/theme.png" alt="Solarized theme for Jenkins" /></span> </p> <div class="paragraph"> <p>Build Monitor now also supports <a href="https://plugins.jenkins.io/customizable-header/">Customizable Header</a> plugin, allowing you to customise the header shown in the monitor.</p> </div> <div class="paragraph"> <p><strong>And more!</strong></p> </div> <div class="paragraph"> <p>Build Monitor now displays the view description and introduces several long-requested improvements, including customizable auto-refresh, user avatars, and colorful badges, making the dashboard more informative and easier to scan at a glance.</p> </div> <hr> </hr> <div class="sect2"> <h3 id="available-now"><a class="anchor" href="#available-now" />Available now 🚀</h3> <div class="paragraph"> <p>The update is available now for users on Jenkins 2.516.3 and later.</p> </div> <hr> <div class="paragraph"> <p>If you want to get involved in the UI and UX discussions of Jenkins join the <a href="https://www.jenkins.io/sigs/ux">User Experience SIG</a>.</p> </div> <div class="paragraph"> <p>Take advantage of new components and patterns in your plugin via the <a href="https://weekly.ci.jenkins.io/design-library/">Design Library</a>.</p> </div> <div class="paragraph"> <p>You can watch our monthly meetings on <a href="https://www.youtube.com/playlist?list=PLN7ajX_VdyaOnsIIsZHsv_fM9QhOcajWe">YouTube</a> and you can view in-progress work on <a href="https://github.com/jenkinsci/jenkins/pulls?q=is%3Apr+is%3Aopen+label%3Aweb-ui">GitHub</a>.</p> </div> </hr></div></div></div></hr></div> https:/www.jenkins.io/blog/2026/03/16/plugin-of-the-month/ Introducing the Jenkins Plugin of the Month 2026-03-19T18:14:09+00:00 2026-03-16T00:00:00+00:00 Introducing the Jenkins Plugin of the Month The Jenkins ecosystem thrives because of its plugins. With more than two thousand plugins available, Jenkins users can extend their automation platform in countless ways—integrating with tools, improving security, enhancing the user interface, or supporting new development workflows. Behind each plugin are maintainers and contributors who invest their time to build and support these extensions. To highlight this work and help users discover useful functionality, we are introducing a new initiative on the Jenkins blog: Plugin of the Month Each month, we will feature a Plugin of the Month. The goal is to showcase plugins that provide valuable functionality for... <div class="sect1"> <h2 id="introducing-the-jenkins-plugin-of-the-month"><a class="anchor" href="#introducing-the-jenkins-plugin-of-the-month" />Introducing the Jenkins Plugin of the Month</h2> <div class="sectionbody"> <div class="paragraph"> <p><span class="image center"><img src="https://www.jenkins.io/images/post-images/2026/03/plugin_of_the_month_march.png" alt="plugin of the month march" /></span> </p> <div class="paragraph"> <p>The Jenkins ecosystem thrives because of its plugins.</p> </div> <div class="paragraph"> <p>With more than two thousand plugins available, Jenkins users can extend their automation platform in countless ways—integrating with tools, improving security, enhancing the user interface, or supporting new development workflows. Behind each plugin are maintainers and contributors who invest their time to build and support these extensions.</p> </div> <div class="paragraph"> <p>To highlight this work and help users discover useful functionality, we are introducing a new initiative on the Jenkins blog:</p> </div> </div> </div> <div class="sect1"> <h2 id="plugin-of-the-month"><a class="anchor" href="#plugin-of-the-month" />Plugin of the Month</h2> <div class="sectionbody"> <div class="paragraph"> <p>Each month, we will feature a <strong>Plugin of the Month</strong>.</p> </div> <div class="paragraph"> <p>The goal is to showcase plugins that provide valuable functionality for Jenkins users, highlight the work of their maintainers, and help the community discover capabilities they may not yet know about.</p> </div> <div class="paragraph"> <p>Sometimes the featured plugin will be widely used but underappreciated. Other times it may be a newer plugin that solves an interesting problem. In all cases, the focus is on highlighting contributions that strengthen the Jenkins ecosystem.</p> </div> <div class="paragraph"> <p>If you maintain or use a plugin that deserves more visibility, we welcome suggestions for future editions.</p> </div> </div> </div> <div class="sect1"> <h2 id="plugin-of-the-month-oidc-provider-plugin"><a class="anchor" href="#plugin-of-the-month-oidc-provider-plugin" />Plugin of the Month: OIDC Provider Plugin</h2> <div class="sectionbody"> <div class="paragraph"> <p>Our first featured plugin is the <a href="https://plugins.jenkins.io/oidc-provider/">OIDC Provider Plugin</a>.</p> </div> <div class="paragraph"> <p>This plugin allows Jenkins to act as an <strong>OpenID Connect (OIDC) provider</strong> so that external systems can securely authenticate using identities issued by Jenkins.</p> </div> <div class="paragraph"> <p>Instead of storing long-lived credentials or secrets inside Jenkins pipelines, systems can request short-lived tokens using the OIDC standard. This significantly reduces the need to manage and rotate static secrets.</p> </div> </div> </div> <div class="sect1"> <h2 id="why-this-matters"><a class="anchor" href="#why-this-matters" />Why This Matters</h2> <div class="sectionbody"> <div class="paragraph"> <p>Managing credentials and secrets in CI/CD pipelines can quickly become complex and risky. Long-lived access keys stored in configuration or credentials stores are a common attack vector.</p> </div> <div class="paragraph"> <p>By using <strong>OIDC-based authentication</strong>, Jenkins can issue <strong>short-lived identity tokens</strong> that external systems trust. This approach improves security while simplifying credential management.</p> </div> <div class="paragraph"> <p>This is especially useful when Jenkins pipelines interact with cloud providers such as:</p> </div> <div class="ulist"> <ul> <li> <p>Microsoft Azure</p> </li> <li> <p>Google Cloud Platform (GCP)</p> </li> <li> <p>Amazon Web Services (AWS)</p> </li> </ul> </div> <div class="paragraph"> <p>Instead of storing cloud access keys in Jenkins, pipelines can authenticate using federated identity through OIDC.</p> </div> <div class="paragraph"> <p>The plugin is not limited to cloud providers. It can also be used to authenticate with <strong>internal services</strong>, such as a local <strong>Artifactory</strong> instance or other systems that support OIDC.</p> </div> </div> </div> <div class="sect1"> <h2 id="reducing-secrets-in-pipelines"><a class="anchor" href="#reducing-secrets-in-pipelines" />Reducing Secrets in Pipelines</h2> <div class="sectionbody"> <div class="paragraph"> <p>One of the biggest advantages of this approach is the ability to <strong>reduce or eliminate stored secrets</strong> in Jenkins pipelines.</p> </div> <div class="paragraph"> <p>Benefits include:</p> </div> <div class="ulist"> <ul> <li> <p>No long-lived credentials stored in pipelines</p> </li> <li> <p>Reduced secret management overhead</p> </li> <li> <p>Short-lived tokens issued on demand</p> </li> <li> <p>Better alignment with modern cloud security practices</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="looking-ahead"><a class="anchor" href="#looking-ahead" />Looking Ahead</h2> <div class="sectionbody"> <div class="paragraph"> <p>The Jenkins plugin ecosystem is one of the project’s greatest strengths. With the new <strong>Plugin of the Month</strong> series, we hope to highlight the innovation and dedication that plugin maintainers bring to the community.</p> </div> <div class="paragraph"> <p>Stay tuned for next month’s featured plugin — and if you have a favorite plugin you think should be highlighted, let us know.</p> </div> <div class="paragraph"> <p>Together, we continue to grow and strengthen the Jenkins ecosystem.</p> </div> </div> </div></div> https:/www.jenkins.io/blog/2026/03/09/contributor-summit-part-2/ Jenkins Contributor Summit: Officers View on the Present and Future 2026-03-19T18:14:09+00:00 2026-03-09T00:00:00+00:00 The Present and the Future of Jenkins This post continues the recap of the Jenkins Contributor Summit held in Brussels alongside FOSDEM. If you missed the first overview of the event, you can read it here: Impressions from the Jenkins Contributor Summit in Brussels While the first post focused on the atmosphere and discussions during the summit, this article highlights one of the key sessions of the day: “The Present and the Future – The Jenkins Officer’s View.” During this session, Jenkins project officers shared updates about the current state of the ecosystem and the work being done to keep Jenkins evolving. Release Automation and Dependency... <div class="sect1"> <h2 id="the-present-and-the-future-of-jenkins"><a class="anchor" href="#the-present-and-the-future-of-jenkins" />The Present and the Future of Jenkins</h2> <div class="sectionbody"> <div class="paragraph"> <p><span class="image center"><img src="https://www.jenkins.io/images/post-images/2026/03/contributor_summit_officers_view.jpg" alt="contributor summit officers view" /></span> </p> <div class="paragraph"> <p>This post continues the recap of the Jenkins Contributor Summit held in Brussels alongside FOSDEM. If you missed the first overview of the event, you can read it here:</p> </div> <div class="paragraph"> <p><a href="https://www.jenkins.io/blog/2026/03/02/contributor-summit/">Impressions from the Jenkins Contributor Summit in Brussels</a></p> </div> <div class="paragraph"> <p>While the first post focused on the atmosphere and discussions during the summit, this article highlights one of the key sessions of the day: <strong>“The Present and the Future – The Jenkins Officer’s View.”</strong> During this session, Jenkins project officers shared updates about the current state of the ecosystem and the work being done to keep Jenkins evolving.</p> </div> </div> </div> <div class="sect1"> <h2 id="release-automation-and-dependency-updates"><a class="anchor" href="#release-automation-and-dependency-updates" />Release Automation and Dependency Updates</h2> <div class="sectionbody"> <div class="paragraph"> <p>Automation continues to play an important role in maintaining the health of the Jenkins ecosystem.</p> </div> <div class="paragraph"> <p>Currently, <strong>673 plugins and 35 components</strong> are using automated releases. The adoption of this process has steadily grown over the past few years:</p> </div> <div class="ulist"> <ul> <li> <p>2023: 280 automated releases</p> </li> <li> <p>2024: 580 automated releases</p> </li> <li> <p>2025: 708 automated releases</p> </li> </ul> </div> <div class="paragraph"> <p>At the same time, dependency management across the Jenkins organization has improved significantly. The introduction of <strong>Renovate</strong> across the <code>jenkinsci</code> GitHub organization allows maintainers to keep dependencies up to date automatically, reducing maintenance burden and improving overall security and stability.</p> </div> </div> </div> <div class="sect1"> <h2 id="security-continuous-improvements"><a class="anchor" href="#security-continuous-improvements" />Security: Continuous Improvements</h2> <div class="sectionbody"> <div class="paragraph"> <p>Security remains a major focus for the Jenkins project.</p> </div> <div class="paragraph"> <p>Over the past several years, the Jenkins security team has continued to manage vulnerability disclosures and advisories for the ecosystem:</p> </div> <div class="ulist"> <ul> <li> <p>2022: 16 security advisories covering 297 tickets</p> </li> <li> <p>2023: 17 advisories covering 212 tickets</p> </li> <li> <p>2024: 11 advisories covering 57 tickets</p> </li> <li> <p>2025: 12 advisories covering 82 tickets</p> </li> </ul> </div> <div class="paragraph"> <p>Only <strong>two critical vulnerabilities</strong> were reported in 2025, both affecting plugins with relatively low usage.</p> </div> <div class="paragraph"> <p>Around <strong>20% of vulnerabilities are reported directly by the Jenkins security team</strong>, demonstrating the proactive work being done to improve the security of the ecosystem.</p> </div> <div class="paragraph"> <p>Security research and education also remain an important mission for the project. Over the past years, Jenkins has collaborated with students and researchers:</p> </div> <div class="ulist"> <ul> <li> <p>2021: 4 master students from Luminy</p> </li> <li> <p>2022: Valdes – 6-month internship</p> </li> <li> <p>2023: Andrea – 3-month internship</p> </li> <li> <p>2024: onboarding of Swapna Nanda</p> </li> <li> <p>2025: 7 master students from Luminy</p> </li> </ul> </div> <div class="paragraph"> <p>These collaborations have led to <strong>5 findings being fixed</strong> and <strong>30 findings being published without fixes</strong>, mostly affecting long-tail plugins that currently lack active maintainers.</p> </div> </div> </div> <div class="sect1"> <h2 id="content-security-policy-csp"><a class="anchor" href="#content-security-policy-csp" />Content Security Policy (CSP)</h2> <div class="sectionbody"> <div class="paragraph"> <p>Another long-term effort discussed during the summit was the implementation of <strong>Content Security Policy (CSP)</strong> support in Jenkins.</p> </div> <div class="paragraph"> <p>This initiative has been evolving over several years:</p> </div> <div class="ulist"> <ul> <li> <p>August 2020 – first public draft PR demonstrating the concept</p> </li> <li> <p>October 2021 – discussed during Hacktoberfest</p> </li> <li> <p>July 2022 – broader involvement with Jenkins core and documentation</p> </li> <li> <p>September 2022 – revisited during Hacktoberfest</p> </li> <li> <p>End of 2024 – major progress supported by Alpha Omega funding</p> </li> <li> <p>January 2026 – CSP support introduced as <strong>opt-in</strong> in Jenkins <strong>2.539 / 2.541.1</strong></p> </li> </ul> </div> <div class="paragraph"> <p>This work aims to strengthen the browser security model of Jenkins while ensuring compatibility with the large plugin ecosystem.</p> </div> </div> </div> <div class="sect1"> <h2 id="user-experience-progress"><a class="anchor" href="#user-experience-progress" />User Experience Progress</h2> <div class="sectionbody"> <div class="paragraph"> <p>User experience improvements have been gaining significant momentum.</p> </div> <div class="paragraph"> <p>The past year has been the <strong>biggest year yet for the Jenkins User Experience SIG</strong>, with:</p> </div> <div class="ulist"> <ul> <li> <p><strong>86 merged pull requests</strong></p> </li> <li> <p><strong>54 issues resolved</strong></p> </li> <li> <p><strong>5 blog posts</strong> sharing progress and improvements</p> </li> </ul> </div> <div class="paragraph"> <p>These efforts aim to gradually modernize the Jenkins interface and make the system easier to use for both new and experienced users.</p> </div> </div> </div> <div class="sect1"> <h2 id="looking-ahead"><a class="anchor" href="#looking-ahead" />Looking Ahead</h2> <div class="sectionbody"> <div class="paragraph"> <p>The updates from the project officers demonstrated that Jenkins continues to evolve across multiple fronts: automation, security, infrastructure, and user experience.</p> </div> <div class="paragraph"> <p>Maintaining a project of this size requires sustained effort from contributors across the globe. The numbers shared during the summit highlight not only the scale of the Jenkins ecosystem, but also the steady progress being made to keep it secure, modern, and sustainable for the future.</p> </div> </div> </div></div> https:/www.jenkins.io/blog/2026/03/06/jenkins-contributor-awards-2026-nomination-is-open/ Jenkins Contributor Awards 2026 - Nominations are Open 2026-03-19T18:14:09+00:00 2026-03-06T00:00:00+00:00 The Jenkins community thrives because of its contributors. Every day, maintainers, advocates, security researchers, and community members invest their time to improve Jenkins and support users around the world. The Jenkins Contributor Awards are our way of recognizing these efforts and celebrating the people who make the project stronger. For 2026, the Jenkins awards are being hosted by the Continuous Delivery Foundation (CDF) alongside the broader CDF Community Awards. Nominate Outstanding Contributors Nominations are now open, and any contributor is eligible for recognition. To ensure transparency and openness, nominations are being collected publicly through GitHub issues. This allows the community to see the nominations and celebrate contributors... <div class="paragraph"> <p><span class="image center"><img src="https://www.jenkins.io/images/post-images/2026/03/cdf_community_awards.png" alt="cdf community awards" /></span> </p> <div class="paragraph"> <p>The Jenkins community thrives because of its contributors.</p> </div> <div class="paragraph"> <p>Every day, maintainers, advocates, security researchers, and community members invest their time to improve Jenkins and support users around the world. The <strong>Jenkins Contributor Awards</strong> are our way of recognizing these efforts and celebrating the people who make the project stronger.</p> </div> <div class="paragraph"> <p>For 2026, the Jenkins awards are being hosted by the Continuous Delivery Foundation (CDF) alongside the broader CDF Community Awards.</p> </div> <div class="sect1"> <h2 id="nominate-outstanding-contributors"><a class="anchor" href="#nominate-outstanding-contributors" />Nominate Outstanding Contributors</h2> <div class="sectionbody"> <div class="paragraph"> <p>Nominations are now open, and <strong>any contributor is eligible</strong> for recognition.</p> </div> <div class="paragraph"> <p>To ensure transparency and openness, nominations are being collected publicly through GitHub issues. This allows the community to see the nominations and celebrate contributors together.</p> </div> <div class="paragraph"> <p>Make sure to submit your nominations before the deadline on <strong>April 2, 2026</strong>.</p> </div> </div> </div> <div class="sect1"> <h2 id="cast-your-vote"><a class="anchor" href="#cast-your-vote" />Cast Your Vote</h2> <div class="sectionbody"> <div class="paragraph"> <p>After nominations close, the community will have the opportunity to vote.</p> </div> <div class="paragraph"> <p>Voting opens on <strong>April 8</strong> and runs until <strong>May 5, 2026</strong>. During this period, everyone in the community can participate by voting through the official Google Form, which will list all nominees and award categories.</p> </div> <div class="paragraph"> <p>This is your chance to help highlight the people who move Jenkins forward.</p> </div> </div> </div> <div class="sect1"> <h2 id="jenkins-award-categories"><a class="anchor" href="#jenkins-award-categories" />Jenkins Award Categories</h2> <div class="sectionbody"> <div class="paragraph"> <p>You can nominate contributors in several Jenkins-specific categories:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://github.com/jenkins-infra/jenkins.io/issues/8919">Most Valuable Jenkins Contributor</a></p> </li> <li> <p><a href="https://github.com/jenkins-infra/jenkins.io/issues/8917">Most Valuable Jenkins Advocate</a></p> </li> <li> <p><a href="https://github.com/jenkins-infra/jenkins.io/issues/8918">Jenkins Security MVP</a></p> </li> </ul> </div> <div class="paragraph"> <p>Each category highlights a different kind of impact — from technical contributions and community advocacy to improving the security of the Jenkins ecosystem.</p> </div> <div class="paragraph"> <p>The winners will be officially announced at <a href="https://cd.foundation/cdcon-2026/">cdCon 2026</a>, taking place <strong>May 18–20, 2026</strong>.</p> </div> </div> </div> <div class="sect1"> <h2 id="additional-cdf-community-awards"><a class="anchor" href="#additional-cdf-community-awards" />Additional CDF Community Awards</h2> <div class="sectionbody"> <div class="paragraph"> <p>In addition to the Jenkins-specific awards, the Continuous Delivery Foundation also recognizes contributors across the broader CD ecosystem.</p> </div> <div class="paragraph"> <p>Categories include:</p> </div> <div class="ulist"> <ul> <li> <p>Top CDF Ambassador</p> </li> <li> <p>Top CDF Contributor</p> </li> <li> <p>Top CDF End User</p> </li> </ul> </div> <div class="paragraph"> <p>If you know someone making an impact beyond Jenkins, consider nominating them as well.</p> </div> <div class="paragraph"> <p>For full details about all award categories and the nomination process, visit the <a href="https://cd.foundation/awards-2026/">CDF Awards page</a>.</p> </div> </div> </div> <div class="sect1"> <h2 id="celebrate-the-community"><a class="anchor" href="#celebrate-the-community" />Celebrate the Community</h2> <div class="sectionbody"> <div class="paragraph"> <p>Open source projects succeed because of the people behind them. The Jenkins Contributor Awards are a chance to highlight those efforts and say <strong>thank you</strong>.</p> </div> <div class="paragraph"> <p>If someone in the community inspired you this year — submit a nomination and help us celebrate their contributions.</p> </div> </div> </div></div> https:/www.jenkins.io/blog/2026/03/02/contributor-summit/ Impressions from Jenkins Contributor Summit in Brussels 2026-03-19T18:14:09+00:00 2026-03-02T00:00:00+00:00 Jenkins Contributor Summit 2026: A Personal Reflection The Jenkins Contributor Summit in Brussels was a milestone for me. Not just because contributors from across Europe and also from the United States came together in one place. But because it was the first time I had the privilege of moderating the event. Thanks a lot to Stephane Merle for the time keeping and Bruno Verachten for the planning and organization support. Standing in front of a room full of long-time maintainers, officers, SIG leads, and community members is both humbling and inspiring. Many of us collaborate daily online, yet being physically in the same room changes the... <div class="sect1"> <h2 id="jenkins-contributor-summit-2026-a-personal-reflection"><a class="anchor" href="#jenkins-contributor-summit-2026-a-personal-reflection" />Jenkins Contributor Summit 2026: A Personal Reflection</h2> <div class="sectionbody"> <div class="paragraph"> <p>The Jenkins Contributor Summit in Brussels was a milestone for me.</p> </div> <div class="paragraph"> <p>Not just because contributors from across Europe and also from the United States came together in one place. But because it was the first time I had the privilege of moderating the event. Thanks a lot to Stephane Merle for the time keeping and Bruno Verachten for the planning and organization support.</p> </div> <div class="paragraph"> <p>Standing in front of a room full of long-time maintainers, officers, SIG leads, and community members is both humbling and inspiring. Many of us collaborate daily online, yet being physically in the same room changes the dynamic completely.</p> </div> <div class="paragraph"> <p>This summit reminded me that Jenkins is not just an automation server — it’s a living ecosystem shaped by people who care deeply about it.</p> </div> </div> </div> <div class="sect1"> <h2 id="setting-the-stage"><a class="anchor" href="#setting-the-stage" />Setting the Stage</h2> <div class="sectionbody"> <div class="paragraph"> <p>We began by welcoming everyone and outlining the goals for the day.</p> </div> <div class="paragraph"> <p>As moderator, my role wasn’t to dominate discussions but to guide them with keeping conversations focused, making sure different voices were heard, and ensuring we stayed aligned with the broader objectives. Open source thrives on open discussion, but structure helps turn discussion into progress.</p> </div> <div class="paragraph"> <p>From the beginning, the atmosphere was collaborative and forward-looking.</p> </div> </div> </div> <div class="sect1"> <h2 id="the-present-and-the-future-officer-perspectives"><a class="anchor" href="#the-present-and-the-future-officer-perspectives" />The Present and the Future - Officer Perspectives</h2> <div class="sectionbody"> <div class="paragraph"> <p>One of the core sessions focused on the present state and the year 2025 of Jenkins from the perspective of project officers.</p> </div> <div class="paragraph"> <p>We heard updates covering the year’s accomplishments, ongoing challenges, and strategic priorities from the officers’ point of view:</p> </div> <div class="ulist"> <ul> <li> <p>Infrastructure</p> </li> <li> <p>Release processes</p> </li> <li> <p>Documentation challenges and improvements</p> </li> <li> <p>Events and community engagement</p> </li> <li> <p>Security efforts</p> </li> </ul> </div> <div class="paragraph"> <p>These perspectives grounded the summit in reality. Jenkins operates at global scale, and maintaining trust — in releases, infrastructure, and security — requires continuous effort behind the scenes.</p> </div> <div class="paragraph"> <p>It was a reminder that governance and operational work are just as critical as writing code.</p> </div> <div class="paragraph"> <p>There will be a separate blog post covering the officer updates in more detail, but I want to highlight the security update here.</p> </div> <div class="sect2"> <h3 id="security-and-bug-bounty-program"><a class="anchor" href="#security-and-bug-bounty-program" />Security and Bug Bounty Program</h3> <div class="paragraph"> <p>An important aspect worth highlighting is the sponsorship support from the European Commission. The funding, managed by YesWeHack as part of a structured Bug Bounty program, strengthens the security posture of Jenkins in a very concrete way. This kind of institutional support demonstrates that open source infrastructure like Jenkins is recognized as critical digital infrastructure. If you missed the blog post about the Bug Bounty program, you can find it here: <a href="https://www.jenkins.io/blog/2026/02/17/bug-bounty-program/">Introducing the Jenkins Bug Bounty Program</a>. A big thanks also to the security team for their ongoing efforts in this area and securing nice shirts for all contributors.</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="sig-updates-and-technical-direction"><a class="anchor" href="#sig-updates-and-technical-direction" />SIG Updates and Technical Direction</h2> <div class="sectionbody"> <div class="paragraph"> <p>The Special Interest Groups shared progress and plans, particularly around User Experience and Platform topics.</p> </div> <div class="paragraph"> <p>The UX discussions highlighted how carefully the project must balance modernization with backward compatibility. Jenkins cannot simply reinvent itself overnight — it evolves incrementally, respecting the massive ecosystem built around it.</p> </div> <div class="paragraph"> <p>On the technical side, we discussed Java support, the challenges faced by community plugin maintainers, and the ongoing effort to modernize plugins at scale.</p> </div> <div class="paragraph"> <p>The session on plugin modernization and OpenRewrite stood out. Automating large-scale refactoring is essential for keeping the ecosystem healthy without overwhelming maintainers. Sustainability is not just about infrastructure, it’s also about reducing maintenance burden.</p> </div> </div> </div> <div class="sect1"> <h2 id="interaction-and-momentum"><a class="anchor" href="#interaction-and-momentum" />Interaction and Momentum</h2> <div class="sectionbody"> <div class="paragraph"> <p>We made space for interaction — including brainstorming workshop ideas and identifying areas where deeper collaboration is needed.</p> </div> <div class="paragraph"> <p>Once contributors start exchanging ideas in person, momentum builds quickly. Topics ranged from AI fabricated Pull Requests to onboarding improvements and UX refinements.</p> </div> <div class="paragraph"> <p>The energy in the room was constructive. Disagreements were pragmatic rather than ideological. Everyone shared the same goal: ensuring Jenkins remains relevant and reliable.</p> </div> <div class="paragraph"> <p>I took a photo during one of the sessions, and it captures the spirit of the summit:</p> </div> <div class="imageblock"> <div class="content"> <img src="https://www.jenkins.io/images/post-images/2026/03/contributor_summit_room.jpg" alt="Jenkins Contributor Summit Session"> </img> </div> </div> </div> <div class="sect1"> <h2 id="advocacy-and-community-building"><a class="anchor" href="#advocacy-and-community-building" />Advocacy and Community Building</h2> <div class="sectionbody"> <div class="paragraph"> <p>We also talked about advocacy and outreach.</p> </div> <div class="paragraph"> <p>How do we attract new contributors? How do we support existing maintainers? How do we communicate innovations more effectively?</p> </div> <div class="paragraph"> <p>One recurring realization: Jenkins builds valuable improvements, but we don’t always communicate them clearly enough. Strengthening community outreach is essential for long-term growth.</p> </div> </div> </div> <div class="sect1"> <h2 id="open-discussion-and-the-headstand-exercise"><a class="anchor" href="#open-discussion-and-the-headstand-exercise" />Open Discussion and the “Headstand” Exercise</h2> <div class="sectionbody"> <div class="paragraph"> <p>During the open discussion, we ran a structured “headstand” exercise to generate fresh ideas.</p> </div> <div class="paragraph"> <p>Instead of asking, “How do we achieve our goal?”</p> </div> <div class="paragraph"> <p>we deliberately flipped the challenge upside down and asked, “How could we guarantee the opposite?”</p> </div> <div class="sect2"> <h3 id="the-headstand"><a class="anchor" href="#the-headstand" />The Headstand</h3> <div class="paragraph"> <p>The concrete question we explored was:</p> </div> <div class="paragraph"> <p><strong>How can we help maintainers spend as much time as possible with first-time contributors?</strong></p> </div> <div class="paragraph"> <p>We brainstormed policies, tools, behaviors, and attitudes that would <strong>guarantee</strong> this outcome.</p> </div> <div class="paragraph"> <p>The answers were intentionally “bad” ideas:</p> </div> <div class="ulist"> <ul> <li> <p>Remove or neglect documentation</p> </li> <li> <p>Avoid automation wherever possible</p> </li> <li> <p>Make contribution guidelines unclear</p> </li> <li> <p>Spending as much time as possible on manual feedback</p> </li> <li> <p>Auto merge failing pull requests without feedback</p> </li> </ul> </div> <div class="paragraph"> <p>By exaggerating the negative, we uncovered hidden assumptions about onboarding, mentorship, and process inefficiencies.</p> </div> </div> <div class="sect2"> <h3 id="flip-it-back"><a class="anchor" href="#flip-it-back" />Flip It Back</h3> <div class="paragraph"> <p>We then inverted the ideas:</p> </div> <div class="paragraph"> <p><strong>How could we make maintainers spend as little time as possible with first-time contributors?</strong></p> </div> <div class="paragraph"> <p>Each “bad” idea was turned into its constructive opposite:</p> </div> <div class="ulist"> <ul> <li> <p>Improve documentation clarity and structure</p> </li> <li> <p>Automate repetitive feedback and checks</p> </li> <li> <p>Invest in contributor education and self-service resources</p> </li> <li> <p>Make use of bots and tools to handle common issues</p> </li> </ul> </div> <div class="paragraph"> <p>The exercise created clarity quickly. Instead of abstract discussions about “better onboarding,” we identified concrete improvement areas grounded in real maintainer experience.</p> </div> <div class="paragraph"> <p>Sometimes, thinking about how to fail is the fastest way to understand how to succeed.</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="workshops-ai-and-ux"><a class="anchor" href="#workshops-ai-and-ux" />Workshops: AI and UX</h2> <div class="sectionbody"> <div class="paragraph"> <p>We closed with focused workshop discussions, including:</p> </div> <div class="sect2"> <h3 id="ai-slop-when-automation-creates-more-noise-than-value"><a class="anchor" href="#ai-slop-when-automation-creates-more-noise-than-value" />AI Slop: When Automation Creates More Noise Than Value</h3> <div class="paragraph"> <p>One topic that surfaced in our discussions — and that clearly extends beyond Jenkins — is the growing pressure on maintainers in what some call the AI slop.</p> </div> <div class="paragraph"> <p>GitHub recently described this phenomenon: contribution has never been easier. Opening issues, submitting pull requests, and now even generating code with AI tools can be done in minutes. The barrier to entry is low — which is great for accessibility — but the review burden remains high. This creates a paradox: more contributions can mean more noise, not necessarily more value. If you are curious about this topic, check out the GitHub blog post: <a href="https://github.blog/open-source/maintainers/welcome-to-the-eternal-september-of-open-source-heres-what-we-plan-to-do-for-maintainers/">Welcome to the eternal september of open source</a>.</p> </div> </div> <div class="sect2"> <h3 id="practical-uiux-evolution-steps"><a class="anchor" href="#practical-uiux-evolution-steps" />Practical UI/UX evolution steps</h3> <div class="paragraph"> <p>There was also a workshop focused on practical steps for evolving the Jenkins UI/UX. The challenge is how to modernize the user experience without alienating existing users or breaking plugins. One way to test changes is with the feature flag system, allowing gradual rollout and feedback collection. If you are curious what is already possible, see what is already available in your Jenkins instance.</p> </div> <div class="imageblock"> <div class="content"> <img src="https://www.jenkins.io/images/post-images/2026/03/UI_Experiments.png" alt="Feature Flags in Jenkins"> </img> </div> </div> </div> </div> <div class="sect1"> <h2 id="personal-reflections"><a class="anchor" href="#personal-reflections" />Personal Reflections</h2> <div class="sectionbody"> <div class="paragraph"> <p>For me personally, moderating the summit was a learning experience.</p> </div> <div class="paragraph"> <p>It required:</p> </div> <div class="ulist"> <ul> <li> <p>Managing time without suppressing energy</p> </li> <li> <p>Encouraging quieter participants to speak</p> </li> <li> <p>Navigating strong opinions constructively</p> </li> <li> <p>Reading the room and adjusting pace</p> </li> </ul> </div> <div class="paragraph"> <p>Most of all, it reinforced something I already knew but felt more strongly in Brussels:</p> </div> <div class="paragraph"> <p>Jenkins is sustained by people who show up.</p> </div> <div class="paragraph"> <p>The Contributor Summit wasn’t just a series of agenda items.</p> </div> <div class="paragraph"> <p>It was alignment.</p> </div> <div class="paragraph"> <p>It was trust-building.</p> </div> <div class="paragraph"> <p>It was shared responsibility.</p> </div> <div class="paragraph"> <p>And I’m grateful that this time, I got to help guide the conversation from the front of the room. Thanks to everyone who participated, shared their perspectives, and contributed to the discussions.</p> </div> </div> </div></div></div> https:/www.jenkins.io/blog/2026/02/19/jenkins-accepted-as-gsoc-2026-mentoring-org/ Jenkins accepted as mentoring org for Google Summer of Code (GSoC) 2026 2026-03-19T18:14:09+00:00 2026-02-19T00:00:00+00:00 Jenkins Accepted to Google Summer of Code 2026 🎉 We are thrilled to announce that Jenkins has been accepted as a mentoring organization for Google Summer of Code (GSoC) 2026! This marks our tenth year participating in this prestigious program, and we are excited to continue welcoming new contributors into our vibrant open-source community. Why GSoC Matters Google Summer of Code is an outstanding opportunity for aspiring developers to gain hands-on experience in open-source software development. Participants work on real-world projects, collaborate closely with experienced mentors, and make meaningful contributions to the Jenkins ecosystem. We are committed to providing a supportive and inclusive environment for all... <div class="paragraph"> <p><span class="image center"><img src="https://www.jenkins.io/images/post-images/2026/Jenkins_GSoC_2026_Program.png" alt="Jenkins GSoC 2026 Program" /></span> </p> <div class="sect1"> <h2 id="jenkins-accepted-to-google-summer-of-code-2026"><a class="anchor" href="#jenkins-accepted-to-google-summer-of-code-2026" />Jenkins Accepted to Google Summer of Code 2026 🎉</h2> <div class="sectionbody"> <div class="paragraph"> <p>We are thrilled to announce that Jenkins has been accepted as a mentoring organization for Google Summer of Code (GSoC) 2026! This marks our tenth year participating in this prestigious program, and we are excited to continue welcoming new contributors into our vibrant open-source community.</p> </div> </div> </div> <div class="sect1"> <h2 id="why-gsoc-matters"><a class="anchor" href="#why-gsoc-matters" />Why GSoC Matters</h2> <div class="sectionbody"> <div class="paragraph"> <p>Google Summer of Code is an outstanding opportunity for aspiring developers to gain hands-on experience in open-source software development. Participants work on real-world projects, collaborate closely with experienced mentors, and make meaningful contributions to the Jenkins ecosystem. We are committed to providing a supportive and inclusive environment for all GSoC participants, and we look forward to seeing another summer of fruitful contributions that will emerge from this year’s program.</p> </div> </div> </div> <div class="sect1"> <h2 id="preparing-your-application"><a class="anchor" href="#preparing-your-application" />Preparing Your Application</h2> <div class="sectionbody"> <div class="paragraph"> <p>If you’re interested in applying, now is the perfect time to get started. We encourage all interested candidates to start preparing their applications and to join our upcoming webinars where we will discuss potential project ideas and provide guidance on the application process. Stay tuned for more details on how to get involved and make the most of this exciting opportunity!</p> </div> </div> </div> <div class="sect1"> <h2 id="whats-on-the-near-horizon-for-gsoc-candidates"><a class="anchor" href="#whats-on-the-near-horizon-for-gsoc-candidates" />What’s on the near horizon for GSoC candidates?</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p>Review the <a href="https://www.jenkins.io/projects/gsoc/contributors/">information for contributors</a> page for detailed application guidelines.</p> </li> <li> <p>Join our webinars for a walk through of project ideas, the details of which will be made available over the coming days via our official communication channels. Recordings of these webinars will be made available after each session.</p> </li> <li> <p>Use <a href="https://docs.google.com/document/d/1dIlPLXfLbFsvcaHFuwmH9_lSCVm9m6-SgNYTNAnSZpY/edit?usp=sharing">the official proposal template</a> to structure and draft your project proposal.</p> </li> </ul> </div> <div class="paragraph"> <p>We encourage you to start engaging with the community early, ask questions, and explore the available project ideas. The more familiar you are with Jenkins and its ecosystem, the stronger your proposal will be.</p> </div> <div class="paragraph"> <p>Refer to the <a href="https://developers.google.com/open-source/gsoc/timeline">GSoC timeline</a> for a complete list of important dates.</p> </div> </div> </div></div> https:/www.jenkins.io/blog/2026/02/16/fosdem-stand-report/ Impressions from Jenkins Stand at FOSDEM Brussels 2026-03-19T18:14:09+00:00 2026-02-16T00:00:00+00:00 Two Days Behind the Jenkins Booth at FOSDEM 2026 FOSDEM is always a blur. Two days, hundreds of conversations, one booth, and just enough coffee and beer to get through the weekend. This year at FOSDEM 2026, I had the privilege of standing behind the Jenkins booth. If you’ve ever wondered what it’s like on the other side of the table at one of the busiest open source conferences in Europe — here’s a field report. The Visitor Archetypes After about 50 conversations, patterns emerge. By the end of day two, you can almost predict the opening line. 1. The “I Just Wanted to Say Thank You” Visitor They... <div class="sect1"> <h2 id="two-days-behind-the-jenkins-booth-at-fosdem-2026"><a class="anchor" href="#two-days-behind-the-jenkins-booth-at-fosdem-2026" />Two Days Behind the Jenkins Booth at FOSDEM 2026</h2> <div class="sectionbody"> <div class="paragraph"> <p>FOSDEM is always a blur. Two days, hundreds of conversations, one booth, and just enough coffee and beer to get through the weekend.</p> </div> <div class="paragraph"> <p>This year at <a href="https://fosdem.org/">FOSDEM 2026</a>, I had the privilege of standing behind the Jenkins booth. If you’ve ever wondered what it’s like on the other side of the table at one of the busiest open source conferences in Europe — here’s a field report.</p> </div> <div class="imageblock"> <div class="content"> <img src="https://www.jenkins.io/images/post-images/2026/fosdem_stand_2026.jpg" alt="Jenkins stand at FOSDEM 2026"> </img> </div> </div> </div> <div class="sect1"> <h2 id="the-visitor-archetypes"><a class="anchor" href="#the-visitor-archetypes" />The Visitor Archetypes</h2> <div class="sectionbody"> <div class="paragraph"> <p>After about 50 conversations, patterns emerge. By the end of day two, you can almost predict the opening line.</p> </div> <div class="sect2"> <h3 id="1-the-i-just-wanted-to-say-thank-you-visitor"><a class="anchor" href="#1-the-i-just-wanted-to-say-thank-you-visitor" />1. The “I Just Wanted to Say Thank You” Visitor</h3> <div class="paragraph"> <p>They don’t want stickers. They don’t want to debate YAML vs Groovy.</p> </div> <div class="paragraph"> <p>They just walk up and say:</p> </div> <div class="paragraph"> <p>“Hey, I’ve been using Jenkins for years. Thank you.”</p> </div> <div class="paragraph"> <p>Some run builds for research labs. Some ship medical devices. Some maintain internal tooling for companies you’ve definitely heard of.</p> </div> <div class="paragraph"> <p>They’ve been quietly relying on Jenkins for a decade or more. No drama. Just pipelines running at 2am.</p> </div> <div class="paragraph"> <p>These conversations are short — but they’re the ones you carry home.</p> </div> </div> <div class="sect2"> <h3 id="2-the-wait-blue-ocean-is-being-deprecated-crowd"><a class="anchor" href="#2-the-wait-blue-ocean-is-being-deprecated-crowd" />2. The “Wait… Blue Ocean Is Being Deprecated?” Crowd</h3> <div class="paragraph"> <p>This one starts with excitement:</p> </div> <div class="paragraph"> <p>“I love Blue Ocean!”</p> </div> <div class="paragraph"> <p>And then we gently explain the status of <a href="https://plugins.jenkins.io/blueocean/">Blue Ocean</a>.</p> </div> <div class="paragraph"> <p>Cue visible surprise.</p> </div> <div class="paragraph"> <p>Blue Ocean was a bold experiment in rethinking the Jenkins UX. It brought modern pipeline visualization to a platform that predates most current frontend frameworks. But maintaining a parallel UI stack long-term is hard — especially in an open source project driven by volunteers.</p> </div> <div class="paragraph"> <p>The common reactions:</p> </div> <div class="paragraph"> <p>“Oh… I didn’t know.”</p> </div> <div class="paragraph"> <p>“What should I use instead?”</p> </div> <div class="paragraph"> <p>“Is there something new coming?”</p> </div> <div class="paragraph"> <p>Which leads directly to…</p> </div> </div> <div class="sect2"> <h3 id="3-have-you-heard-of-pipeline-graph-view"><a class="anchor" href="#3-have-you-heard-of-pipeline-graph-view" />3. “Have You Heard of Pipeline Graph View?”</h3> <div class="paragraph"> <p>Short answer: probably not. Long answer: that’s part of the problem.</p> </div> <div class="paragraph"> <p><a href="https://plugins.jenkins.io/pipeline-graph-view/">Pipeline Graph View</a> is the modern, actively maintained visualization for Jenkins pipelines. It’s lighter, integrated into the main UI direction, and not trying to be an entire alternative universe.</p> </div> <div class="paragraph"> <p>Yet over two days, most people who loved Blue Ocean had never heard of it.</p> </div> <div class="paragraph"> <p>This is the classic open source paradox:</p> </div> <div class="paragraph"> <p>We built the thing. We shipped the thing. But communicating the thing? That’s harder than merging the PR.</p> </div> <div class="paragraph"> <p>If you’re still associating Jenkins pipeline visualization exclusively with Blue Ocean, it might be time for another look.</p> </div> </div> <div class="sect2"> <h3 id="4-groovy-pipeline-confessions"><a class="anchor" href="#4-groovy-pipeline-confessions" />4. Groovy Pipeline Confessions</h3> <div class="paragraph"> <p>Some conversations begin in a whisper:</p> </div> <div class="paragraph"> <p>“I… may have abused scripted pipeline.”</p> </div> <div class="paragraph"> <p>We heard it all: 2,000-line Jenkinsfiles</p> </div> <div class="paragraph"> <p>Groovy is powerful. Maybe too powerful.</p> </div> <div class="paragraph"> <p>But here’s the interesting part: these weren’t complaints. They were confessions from people who pushed Jenkins to its limits — and sometimes beyond — because it let them.</p> </div> <div class="paragraph"> <p>Declarative pipelines helped. Shared libraries helped. But the raw flexibility of Groovy remains both Jenkins’ superpower and its chaos engine.</p> </div> <div class="paragraph"> <p>And we love you for using it creatively. Even if we gently recommend refactoring.</p> </div> </div> <div class="sect2"> <h3 id="5-the-angry-butler-sticker-phenomenon"><a class="anchor" href="#5-the-angry-butler-sticker-phenomenon" />5. The Angry Butler Sticker Phenomenon</h3> <div class="paragraph"> <p>We brought stickers. Lots of stickers.</p> </div> <div class="paragraph"> <p>One clear winner:</p> </div> <div class="imageblock"> <div class="content"> <img src="https://www.jenkins.io/images/logos/fire/fire.png" alt="Angry Jenkins"> </img> </div> <div class="paragraph"> <p>It turns out that an anthropomorphic CI server expressing mild frustration is extremely relatable.</p> </div> <div class="paragraph"> <p>There’s something deeply honest about a slightly annoyed butler judging your broken build.</p> </div> </div> <div class="sect2"> <h3 id="6-our-neighbors-gitlab"><a class="anchor" href="#6-our-neighbors-gitlab" />6. Our Neighbors: GitLab</h3> <div class="paragraph"> <p>Right next to us: GitLab.</p> </div> <div class="paragraph"> <p>You might expect rivalry vibes. Instead? It was refreshingly friendly.</p> </div> <div class="paragraph"> <p>We traded stickers. We compared notes on visitor questions. We laughed about shared CI/CD pain points.</p> </div> <div class="paragraph"> <p>At the booth level, it wasn’t “us vs them.” It was: “CI is hard. Solidarity.”</p> </div> <div class="paragraph"> <p>Open source ecosystems overlap more than marketing pages suggest. Many people run hybrid setups. Many teams experiment. The lines are blurrier than Twitter debates imply.</p> </div> <div class="paragraph"> <p>And honestly? The GitLab folks were pretty cool.</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="everywhere-ai"><a class="anchor" href="#everywhere-ai" />Everywhere AI</h2> <div class="sectionbody"> <div class="paragraph"> <p>If FOSDEM 2026 had a background soundtrack, it would be:</p> </div> <div class="paragraph"> <p>“Does it use AI?”</p> </div> <div class="paragraph"> <p>Every hallway track, every devroom, every booth.</p> </div> <div class="paragraph"> <p>So yes — Jenkins conversations also drifted there.</p> </div> <div class="paragraph"> <p>Which made this especially relevant:</p> </div> <div class="sect2"> <h3 id="the-explain-errors-plugin"><a class="anchor" href="#the-explain-errors-plugin" />The Explain Errors Plugin</h3> <div class="paragraph"> <p>If you haven’t seen it yet, check out the <a href="https://plugins.jenkins.io/explain-error/">Explain Errors Plugin</a>.</p> </div> <div class="paragraph"> <p>The idea is simple: When your pipeline fails, you don’t just get a stack trace. You get help understanding it.</p> </div> <div class="paragraph"> <p>That’s the kind of AI integration that feels aligned with CI/CD: Practical. Contextual. Opt-in.</p> </div> <div class="paragraph"> <p>Not replacing engineers. Helping them get unstuck faster.</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="behind-the-booth-learning-the-ropes"><a class="anchor" href="#behind-the-booth-learning-the-ropes" />Behind the Booth: Learning the Ropes</h2> <div class="sectionbody"> <div class="paragraph"> <p>A booth doesn’t run itself.</p> </div> <div class="paragraph"> <p>Before FOSDEM, I had no idea how much choreography is involved: sticker logistics, demo rotations, handling tough questions, knowing when to go deep and when to keep the line moving.</p> </div> <div class="paragraph"> <p>Huge thanks to Bruno Verachten and Stephane Merle for patiently teaching me how to operate the booth — from the practical details to the subtle art of engaging passersby without overwhelming them.</p> </div> <div class="paragraph"> <p>If I looked like I knew what I was doing, it’s because I had excellent teachers.</p> </div> </div> </div> <div class="sect1"> <h2 id="what-two-days-behind-the-booth-teaches-you"><a class="anchor" href="#what-two-days-behind-the-booth-teaches-you" />What Two Days Behind the Booth Teaches You</h2> <div class="sectionbody"> <div class="paragraph"> <p>Jenkins is still everywhere.</p> </div> <div class="paragraph"> <p>Communication is as important as code. Special thanks go to everyone who stopped by to share their stories, ask questions, and give feedback.</p> </div> <div class="paragraph"> <p>Stickers matter more than you think.</p> </div> <div class="paragraph"> <p>Open source is powered by humans showing up in person.</p> </div> <div class="paragraph"> <p>FOSDEM compresses an entire year of GitHub issues into two days of real conversations.</p> </div> <div class="paragraph"> <p>And behind the booth, between sticker handoffs and pipeline debates, you’re reminded:</p> </div> <div class="paragraph"> <p>Jenkins isn’t just a server. It’s a community that keeps shipping.</p> </div> <div class="paragraph"> <p>See you next year.</p> </div> </div> </div></div></div> https:/www.jenkins.io/blog/2026/02/06/tuning-java-settings-for-higher-performance/ Tuning Jenkins Java Settings For Responsiveness and Stability with Large Instances 2026-03-19T18:14:09+00:00 2026-02-06T00:00:00+00:00 Hello, Jenkins Community! As of Java 17, the JVM’s defaults have improved to the point where hand-tuned configurations often make performance worse rather than better. The runtime now: Detects container limits and sizes heaps/threads accordingly Optimizes pause times automatically using real-time profiling Allocates memory more efficiently Uses G1GC by default, which is more predictable than older collectors Using -XX:MaxRAMPercentage and -XX:InitialRAMPercentage settings instead of fixed -Xms and -Xmx has resulted in fewer GC pauses, better stability across different container sizes, and less memory pressure. Understanding the Settings Before diving into configuration, it’s important to understand what these JVM options do: G1GC (Garbage First Garbage Collector) G1GC divides the heap into regions and collects... <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2026/02/06/2026-02-06-tuning-java-settings-for-higher-performance.png" alt="Tuning Java Settings for Higher Performance" width="50%" /></span> </p> <div class="paragraph"> <p>Hello, Jenkins Community!</p> </div> <div class="paragraph"> <p>As of Java 17, the JVM’s defaults have improved to the point where hand-tuned configurations often make performance worse rather than better.</p> </div> <div class="paragraph"> <p>The runtime now:</p> </div> <div class="ulist"> <ul> <li> <p>Detects container limits and sizes heaps/threads accordingly</p> </li> <li> <p>Optimizes pause times automatically using real-time profiling</p> </li> <li> <p>Allocates memory more efficiently</p> </li> <li> <p>Uses G1GC by default, which is more predictable than older collectors</p> </li> </ul> </div> <div class="paragraph"> <p>Using <code>-XX:MaxRAMPercentage</code> and <code>-XX:InitialRAMPercentage</code> settings instead of fixed <code>-Xms</code> and <code>-Xmx</code> has resulted in fewer GC pauses, better stability across different container sizes, and less memory pressure.</p> </div> <div class="sect1"> <h2 id="understanding-the-settings"><a class="anchor" href="#understanding-the-settings" />Understanding the Settings</h2> <div class="sectionbody"> <div class="paragraph"> <p>Before diving into configuration, it’s important to understand what these JVM options do:</p> </div> <div class="dlist"> <dl> <dt class="hdlist1"><strong>G1GC (Garbage First Garbage Collector)</strong></dt> <dd> <p>G1GC divides the heap into regions and collects garbage incrementally, designed to keep pause times predictable and low. It’s the default for Java 17+ and works well for heaps from 4GB to 40GB.</p> </dd> <dt class="hdlist1"><strong>MaxRAMPercentage</strong></dt> <dd> <p>Specifies what percentage of the container’s available memory should be used for the Java heap. Unlike fixed <code>-Xmx</code>, this automatically scales if the container is resized. A value of 60.0 means 60% of the container’s RAM becomes the max heap.</p> </dd> <dt class="hdlist1"><strong>InitialRAMPercentage</strong></dt> <dd> <p>Sets the initial heap size as a percentage of available memory. Starting smaller (20%) allows the heap to grow gradually, which can reduce pressure during startup and allow the GC to tune itself as workload patterns emerge.</p> </dd> </dl> </div> </div> </div> <div class="sect1"> <h2 id="recommended-settings-for-java-17-21-and-up"><a class="anchor" href="#recommended-settings-for-java-17-21-and-up" />Recommended Settings for Java 17, 21, and up</h2> <div class="sectionbody"> <div class="paragraph"> <p><strong>For Controllers (larger instances):</strong></p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash"><span class="nv">JAVA_OPTS</span><span class="o">=</span><span class="s2">" -XX:+UseG1GC -XX:MaxRAMPercentage=60.0 -XX:InitialRAMPercentage=20.0 "</span></code></pre> </div> </div> <div class="paragraph"> <p><strong>For Workers or smaller instances:</strong></p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash"><span class="nv">JAVA_OPTS</span><span class="o">=</span><span class="s2">" -XX:+UseG1GC -XX:MaxRAMPercentage=75.0 -XX:InitialRAMPercentage=50.0 "</span></code></pre> </div> </div> <div class="paragraph"> <p>For controllers, the conservative 60% setting leaves room for OS buffers and native memory. Workers often tolerate higher heap percentages since they’re more isolated and less likely to have multiple memory-intensive processes.</p> </div> <div class="paragraph"> <p>For a more in depth analysis of what Jenkins does under the hood, view the original 2016 article here:</p> </div> <div class="paragraph"> <p><a href="https://www.jenkins.io/blog/2016/11/21/gc-tuning/#the-magic-settings/">GC Tuning, the magic settings</a></p> </div> <div class="paragraph"> <p>Cloudbees also has an article here which is more up to date:</p> </div> <div class="paragraph"> <p><a href="https://docs.cloudbees.com/docs/cloudbees-ci-kb/latest/best-practices/jvm-memory-settings-best-practice/">JVM Memory Settings Best Practice</a></p> </div> </div> </div> <div class="sect1"> <h2 id="notes-on-older-java-versions"><a class="anchor" href="#notes-on-older-java-versions" />Notes on Older Java Versions</h2> <div class="sectionbody"> <div class="paragraph"> <p>If you still run Java 11 or earlier:</p> </div> <div class="ulist"> <ul> <li> <p>Use fixed heap sizing (<code>-Xms</code> / <code>-Xmx</code>), because container support varies and automatic scaling is unreliable.</p> </li> <li> <p>Ensure <code>-XX:+UseContainerSupport</code> is set (it’s default in most builds, but verify).</p> </li> <li> <p>Set both <code>-Xms</code> and <code>-Xmx</code> to the same value to avoid pauses from heap expansion.</p> </li> <li> <p>Example for 8GB container: <code>-Xms4G -Xmx4G -XX:+UseG1GC</code></p> </li> </ul> </div> <div class="paragraph"> <p>Consider upgrading to Java 17+ if possible, as the memory management is substantially better.</p> </div> </div> </div> <div class="sect1"> <h2 id="common-pitfalls-and-anti-patterns"><a class="anchor" href="#common-pitfalls-and-anti-patterns" />Common Pitfalls and Anti-Patterns</h2> <div class="sectionbody"> <div class="dlist"> <dl> <dt class="hdlist1"><strong>Don’t set heap to 100% of container memory</strong></dt> <dd> <p>The OS needs memory for buffers, caches, and native libraries. Leaving 30–40% for the OS prevents out-of-memory kills and improves overall performance.</p> </dd> <dt class="hdlist1"><strong>Don’t mix fixed sizing with percentages</strong></dt> <dd> <p>Using both <code>-Xmx</code> and <code>-XX:MaxRAMPercentage</code> creates confusion about which takes precedence. Choose one approach and stick with it.</p> </dd> <dt class="hdlist1"><strong>Don’t use aggressive GC tuning without monitoring</strong></dt> <dd> <p>Settings like <code>-XX:MaxGCPauseMillis</code> or <code>-XX:G1HeapRegionSize</code> can worsen performance if misconfigured. G1GC’s defaults are usually optimal.</p> </dd> <dt class="hdlist1"><strong>Don’t ignore JVM warnings</strong></dt> <dd> <p>Run Jenkins once and check the logs for JVM warnings about ergonomics or container detection. These often indicate configuration issues.</p> </dd> <dt class="hdlist1"><strong>Don’t deploy to production without testing</strong></dt> <dd> <p>Run under realistic load for at least 24 hours to observe GC behavior, memory growth, and response times.</p> </dd> </dl> </div> </div> </div> <div class="sect1"> <h2 id="monitoring-and-validation"><a class="anchor" href="#monitoring-and-validation" />Monitoring and Validation</h2> <div class="sectionbody"> <div class="paragraph"> <p>Once deployed, monitor these metrics to validate your settings are working:</p> </div> <div class="dlist"> <dl> <dt class="hdlist1"><strong>Garbage Collection</strong></dt> <dd> <p>Use tools like <code>jstat</code> or observability platforms to track:</p> <div class="ulist"> <ul> <li> <p>GC pause times (should be &lt;1 second for G1GC in normal operation)</p> </li> <li> <p>Full GC frequency (should be rare or non-existent)</p> </li> <li> <p>Heap utilization patterns</p> </li> </ul> </div> </dd> <dt class="hdlist1"><strong>Memory Usage</strong></dt> <dd> <p>Monitor heap memory growth over time:</p> <div class="ulist"> <ul> <li> <p>Watch for continuous growth (memory leak indicator)</p> </li> <li> <p>Peak memory should stay below your <code>MaxRAMPercentage</code> setting</p> </li> <li> <p>Initial memory should stabilize around your <code>InitialRAMPercentage</code> setting</p> </li> </ul> </div> </dd> <dt class="hdlist1"><strong>Java Command Line</strong></dt> <dd> <p>Verify settings are applied correctly:</p> <div class="ulist"> <ul> <li> <p>Run <code>jcmd &lt;pid&gt; VM.command_line</code> to see actual JVM arguments</p> </li> <li> <p>Check <code>/proc/&lt;pid&gt;/environ</code> (Linux) or <code>ps</code> output to confirm <code>JAVA_OPTS</code> are set</p> </li> </ul> </div> </dd> <dt class="hdlist1"><strong>Simple Health Check</strong></dt> <dd> <div class="openblock"> <div class="content"> <div class="paragraph"> <p>Enable basic logging:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash"><span class="nv">JAVA_OPTS</span><span class="o">=</span><span class="s2">" -XX:+UseG1GC -XX:MaxRAMPercentage=60.0 -XX:InitialRAMPercentage=20.0 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/var/log/jenkins/gc.log "</span></code></pre> </div> </div> <div class="paragraph"> <p>Monitor <code>gc.log</code> for unexpected pause times or full GC events.</p> </div> </div> </div> </dd> </dl> </div> </div> </div> <div class="sect1"> <h2 id="quick-rules-of-thumb"><a class="anchor" href="#quick-rules-of-thumb" />Quick Rules of Thumb</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><strong>Controllers</strong>: Prefer <strong>G1</strong>, aim for <strong>50–65%</strong> of container RAM as heap.</p> </li> <li> <p><strong>Workers</strong>: Can tolerate <strong>70–75%</strong> since workload is more predictable.</p> </li> <li> <p><strong>Don’t give the JVM the entire container</strong>: Leave at least 25–30% for OS and native memory.</p> </li> <li> <p><strong>Start conservative</strong>: You can always increase percentages if memory is being left on the table.</p> </li> <li> <p><strong>Monitor before tuning further</strong>: Most performance issues aren’t solved by tweaking JVM options.</p> </li> </ul> </div> </div> </div></div> https:/www.jenkins.io/blog/2026/01/30/fosdem/ Meet Jenkins at FOSDEM Brussels 2026-03-19T18:14:09+00:00 2026-01-30T00:00:00+00:00 Meet Jenkins at FOSDEM Brussels We’re excited to share that Jenkins has a stand at FOSDEM in Brussels this year! If you’re attending, come by the Jenkins booth to say hello. Whether you want to talk CI/CD best practices, share what you’re building with Jenkins, ask questions, or just geek out about automation, we’d love to chat. What is FOSDEM? FOSDEM (Free and Open Source Developers' European Meeting) is one of the largest gatherings of open-source enthusiasts in Europe. It’s a free event that brings together developers, contributors, and users from around the world to share knowledge, collaborate on projects, and celebrate open-source software. FOSDEM... <div class="paragraph"> <p><span class="image center center"><img src="https://www.jenkins.io/images/post-images/2026/fosdem2026.png" alt="FOSDEM 2026" /></span> </p> <div class="sect1"> <h2 id="meet-jenkins-at-fosdem-brussels"><a class="anchor" href="#meet-jenkins-at-fosdem-brussels" />Meet Jenkins at FOSDEM Brussels</h2> <div class="sectionbody"> <div class="paragraph"> <p>We’re excited to share that <strong>Jenkins has a stand at FOSDEM in Brussels</strong> this year!</p> </div> <div class="paragraph"> <p>If you’re attending, come by the Jenkins booth to say hello. Whether you want to talk CI/CD best practices, share what you’re building with Jenkins, ask questions, or just geek out about automation, we’d love to chat.</p> </div> <div class="sect2"> <h3 id="what-is-fosdem"><a class="anchor" href="#what-is-fosdem" />What is FOSDEM?</h3> <div class="paragraph"> <p>FOSDEM (Free and Open Source Developers' European Meeting) is one of the largest gatherings of open-source enthusiasts in Europe. It’s a free event that brings together developers, contributors, and users from around the world to share knowledge, collaborate on projects, and celebrate open-source software.</p> </div> <div class="paragraph"> <p>FOSDEM is all about community, and this is a great chance to meet Jenkins contributors and users face to face.</p> </div> <div class="paragraph"> <p>👉 <strong>Will you be at FOSDEM?</strong> Drop by the Jenkins stand and let’s talk — see you there!</p> </div> </div> </div> </div></div> https:/www.jenkins.io/blog/2026/01/05/google-summer-of-code-2026-volunteers-needed-to-mentor-future-jenkins-contributors/ Google Summer of Code 2026: Volunteers Needed to Mentor Future Jenkins Contributors 2026-03-19T18:14:09+00:00 2026-01-05T00:00:00+00:00 shivaylamba TL,DR: Jenkins is preparing to participate in its tenth (10th) year in Google Summer of Code (GSoC). We are seeking volunteers to be Jenkins mentors in the program: Mentoring takes about 5 to 8 hours of work per week for a 10-22 weeks program. Mentors provide guidance, coaching, review proposals, pull-requests, and contributor presentations. Sign up to mentor one of these project ideas or propose your own. Don’t have time to read? Watch this video. What is Google Summer of Code? Google Summer of Code (GSoC) is a global, online mentoring program focused on introducing new contributors to open-source software development. GSoC participants undertake a programming project lasting... <div class="paragraph"> <p><span class="image center center"><img src="https://www.jenkins.io/images/post-images/2023/12/gsoc-call-for-mentors.png" alt="Google Summer of Code call for mentors." /></span> </p> <div class="sect2"> <h3 id="tldr"><a class="anchor" href="#tldr" />TL,DR:</h3> <div class="paragraph"> <p>Jenkins is preparing to participate in its tenth (10th) year in Google Summer of Code (GSoC). We are seeking volunteers to be Jenkins mentors in the program:</p> </div> <div class="ulist"> <ul> <li> <p>Mentoring takes about 5 to 8 hours of work per week for a 10-22 weeks program.</p> </li> <li> <p>Mentors provide guidance, coaching, review proposals, pull-requests, and contributor presentations.</p> </li> <li> <p>Sign up to mentor <a href="https://www.jenkins.io/projects/gsoc/2026/project-ideas/">one of these project ideas</a> or propose your own.</p> </li> </ul> </div> <div class="paragraph"> <p>Don’t have time to read? <a href="https://youtu.be/02Ygo5RAcu4">Watch this video.</a></p> </div> </div> <div class="sect1"> <h2 id="what-is-google-summer-of-code"><a class="anchor" href="#what-is-google-summer-of-code" />What is Google Summer of Code?</h2> <div class="sectionbody"> <div class="paragraph"> <p><a href="https://summerofcode.withgoogle.com/">Google Summer of Code</a> (GSoC) is a global, online mentoring program focused on introducing new contributors to open-source software development. GSoC participants undertake a programming project lasting 10 to 22 weeks, guided by mentors from their chosen open-source organizations. This experience pairs accepted contributors with experienced developers, offering valuable exposure to real-world software development techniques. Contributors gain the opportunity to learn from seasoned open-source developers while writing code for real-world projects. A small stipend is also provided to support and incentivize their open-source contributions. Refer to the <a href="https://summerofcode.withgoogle.com/get-started">GSoC contributor eligibility</a> documentation for more details.</p> </div> </div> </div> <div class="sect1"> <h2 id="why-might-you-consider-being-a-jenkins-in-gsoc-mentor"><a class="anchor" href="#why-might-you-consider-being-a-jenkins-in-gsoc-mentor" />Why might you consider being a Jenkins in GSoC mentor?</h2> <div class="sectionbody"> <div class="paragraph"> <p>Participating as a mentor is crucial to the success of GSoC. Mentoring is a wonderful opportunity to give back to the community while improving your management and people (or general “soft”) skills. In return for mentoring, a GSoC contributor works on your project full-time for 10-22 weeks. Think about the projects you’ve always wanted to tackle but never had the time to complete. The Jenkins project is excited to participate in this fantastic program again in 2026, and we hope you will join us!</p> </div> </div> </div> <div class="sect1"> <h2 id="what-does-mentoring-involve"><a class="anchor" href="#what-does-mentoring-involve" />What does mentoring involve?</h2> <div class="sectionbody"> <div class="paragraph"> <p>Potential mentors are invited to read the <a href="https://www.jenkins.io/projects/gsoc/mentors">information for mentors</a>. Serving as a GSoC mentor does not require expert knowledge of Jenkins. Mentors do not work alone, every project has at least two mentors. GSoC organization administrators will help find technical advisers, allowing you to learn together with your GSoC contributor.</p> </div> <div class="paragraph"> <p>Mentoring takes about 5 to 8 hours of work per week (more at the start, less at the end). Mentors provide guidance, coaching, and encouragement. They review GSoC contributor proposals, pull-requests, and presentations during the evaluation phase. Mentors also complete the Google-provided final evaluations at the end of the coding period.</p> </div> </div> </div> <div class="sect1"> <h2 id="so-you-want-to-be-a-mentor-but-dont-have-a-project-idea-we-can-help-with-that"><a class="anchor" href="#so-you-want-to-be-a-mentor-but-dont-have-a-project-idea-we-can-help-with-that" />So you want to be a mentor but don’t have a project idea? We can help with that!</h2> <div class="sectionbody"> <div class="paragraph"> <p>GSoC project ideas are coding projects that potential contributors are expected to accomplish in about 10-22 weeks. The projects can include new features, plugins, test frameworks, infrastructure improvements, graphical interfaces, and more. If you don’t have a specific project idea, consider being a mentor for one of <a href="https://www.jenkins.io/projects/gsoc/2026/project-ideas/">these project ideas</a>. If you do have a project in mind, please submit it before the beginning of February so it can be reviewed by the GSoC committee and the Jenkins community. We would love for you to mentor your own project idea.</p> </div> </div> </div> <div class="sect1"> <h2 id="how-to-submit-a-project-idea"><a class="anchor" href="#how-to-submit-a-project-idea" />How to submit a project idea</h2> <div class="sectionbody"> <div class="paragraph"> <p>Create a pull request with your idea in an <code>.adoc</code> file in the <a href="https://github.com/jenkins-infra/jenkins.io/tree/master/content/projects/gsoc/2026/project-ideas">project ideas directory</a>. Submitting a Google Doc is optional, though still acceptable. Refer to the <a href="https://www.jenkins.io/projects/gsoc/proposing-project-ideas/">instructions</a> for submitting ideas, which include an <code>.adoc</code> template and examples.</p> </div> </div> </div> <div class="sect1"> <h2 id="need-more-inspiration"><a class="anchor" href="#need-more-inspiration" />Need more inspiration?</h2> <div class="sectionbody"> <div class="paragraph"> <p>A great example is the <a href="https://www.jenkins.io/blog/2023/10/25/what-is-the-plugin-health-score/">Plugin Health Score</a>. This GSoC project idea began in the summer of 2022 and was implemented in the summer of 2023, benefiting millions of Jenkins users worldwide!</p> </div> <div class="paragraph"> <p>We look forward to welcoming new mentors for GSoC 2026!</p> </div> <div class="paragraph"> <p>For any questions, you can find the GSoC Org Admins, mentors, and participants on the <a href="https://app.gitter.im/#/room/#jenkinsci_gsoc-sig:gitter.im">GSoC SIG Gitter</a> chat.</p> </div> </div> </div></div> https:/www.jenkins.io/blog/2025/12/29/election-results-2025/ 2025 Jenkins Board and Officer Election Results 2026-03-19T18:14:09+00:00 2025-12-29T00:00:00+00:00 The Jenkins community has completed the 2025 elections. On behalf of the Jenkins community and the elections committee, we congratulate all newly elected board members and officers! We also thank all candidates and voters who participated this year. Election results: Daniel Krämer joins Alexander Brandes, Valentin Delaye, Alex Earl and Basil Crow on the Jenkins Governance Board Stefan Spieker will serve as Events Officer (uncontested) Tim Jacomb will continue as Release Officer (uncontested) Damien Duportal will continue as Infrastructure Officer (uncontested) Wadeck Follonier will continue as Security Officer (uncontested) Kris Stern will serve as Documentation Officer The board positions and officer roles are an essential part of the Jenkins project and... <div class="paragraph"> <p><span class="image right center"><img src="https://www.jenkins.io/images/governance/elections/2025/2025-announcement.svg" alt="Jenkins Elections" height="178" /></span> </p> <div class="paragraph"> <p>The Jenkins community has completed the 2025 elections. On behalf of the Jenkins community and the elections committee, we congratulate all newly elected board members and officers! We also thank all candidates and voters who participated this year.</p> </div> <div class="paragraph"> <p>Election results:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://www.jenkins.io/blog/authors/strangelookingnerd">Daniel Krämer</a> joins <a href="https://www.jenkins.io/blog/authors/NotMyFault">Alexander Brandes</a>, <a href="https://www.jenkins.io/blog/authors/jonesbusy">Valentin Delaye</a>, <a href="https://www.jenkins.io/blog/authors/slide_o_mix-board">Alex Earl</a> and <a href="https://www.jenkins.io/blog/authors/basil/">Basil Crow</a> on the <a href="https://www.jenkins.io/project/governance/#governance-board">Jenkins Governance Board</a></p> </li> <li> <p><a href="https://www.jenkins.io/blog/authors/stefan_spieker/">Stefan Spieker</a> will serve as <a href="https://www.jenkins.io/project/team-leads/#events">Events Officer</a> (uncontested)</p> </li> <li> <p><a href="https://www.jenkins.io/blog/authors/timja/">Tim Jacomb</a> will continue as <a href="https://www.jenkins.io/project/team-leads/#release">Release Officer</a> (uncontested)</p> </li> <li> <p><a href="https://www.jenkins.io/blog/authors/dduportal/">Damien Duportal</a> will continue as <a href="https://www.jenkins.io/project/team-leads/#infrastructure">Infrastructure Officer</a> (uncontested)</p> </li> <li> <p><a href="https://www.jenkins.io/blog/authors/wadeck/">Wadeck Follonier</a> will continue as <a href="https://www.jenkins.io/project/team-leads/#security">Security Officer</a> (uncontested)</p> </li> <li> <p><a href="https://www.jenkins.io/blog/authors/krisstern/">Kris Stern</a> will serve as <a href="https://www.jenkins.io/project/team-leads/#documentation">Documentation Officer</a></p> </li> </ul> </div> <div class="paragraph"> <p>The board positions and officer roles are an essential part of the Jenkins project and we are excited to see contributors taking these roles.</p> </div> <div class="paragraph"> <p>The board continues to require that no single company may have a majority on the Jenkins governance board.</p> </div> <div class="sect1"> <h2 id="governance-board-election-details"><a class="anchor" href="#governance-board-election-details" />Governance Board election details</h2> <div class="sectionbody"> <div class="paragraph"> <p>This year we had three candidates for the Jenkins Governance Board, two for the Documentation Officer, and one for Events Officer. All of them are awesome community leaders who actively contribute to the Jenkins project and represent its users.</p> </div> <div class="paragraph"> <p>We used the <a href="https://civs1.civs.us/">Condorcet Internet Voting Service</a> that allows voters to rank their choices rather than just picking their one favorite choice.</p> </div> <div class="paragraph"> <p>All board members are elected for a 2-year term. The estimated end of the term for them is December 15, 2027.</p> </div> </div> </div> <div class="sect1"> <h2 id="officer-election-details"><a class="anchor" href="#officer-election-details" />Officer election details</h2> <div class="sectionbody"> <div class="paragraph"> <p>All 5 officer positions were up for election this year. These roles have a 1-year term, with the estimated end of term on December 15, 2026. After the initial review of nominations and confirmations with potential candidates, 3 officer positions were uncontested:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Stefan Spieker</strong> - <a href="https://www.jenkins.io/project/team-leads/#events">Events Officer</a></p> </li> <li> <p><strong>Damien Duportal</strong> - <a href="https://www.jenkins.io/project/team-leads/#infrastructure">Infrastructure Officer</a></p> </li> <li> <p><strong>Wadeck Follonier</strong> - <a href="https://www.jenkins.io/project/team-leads/#security">Security Officer</a></p> </li> </ul> </div> <div class="paragraph"> <p>Thanks to all Jenkins officers for their continued leadership! Officers take responsibility for many day-to-day processes in the Jenkins community and lead the contributor teams working on them. It requires significant time commitment and it is not taken for granted.</p> </div> <div class="sect2"> <h3 id="statistics"><a class="anchor" href="#statistics" />Statistics</h3> <div class="paragraph"> <p>This year we had <a href="https://community.jenkins.io/g/election-voter-2025">66 registered voters</a> and 39 actual votes.</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="feedback"><a class="anchor" href="#feedback" />Feedback</h2> <div class="sectionbody"> <div class="paragraph"> <p>The Jenkins project plans to conduct elections every year. We appreciate and welcome feedback regarding the election process so that we can improve the process.</p> </div> <div class="paragraph"> <p>If you have any private feedback you would like to share, please email the <a href="mailto:[email protected]">Jenkins Board</a>. If you would like to raise any issues about the election process, please contact one of the elected Governance Board members.</p> </div> </div> </div></div> https:/www.jenkins.io/blog/2025/12/23/repository-signing-keys-changing/ Jenkins 2.543 and 2.541.1: New Linux Repository Signing Keys 2026-03-19T18:14:09+00:00 2025-12-23T00:00:00+00:00 Beginning December 23, 2025 with 2.543, the Jenkins weekly releases will use new repository signing keys for the Linux installation packages. The same change will be made in Jenkins LTS releases beginning January 21, 2026. Administrators of Linux systems must install the new signing keys on their Linux servers before installing Jenkins Jenkins weekly 2.543 or Jenkins LTS 2.541.1. Debian/Ubuntu Update Debian compatible operating systems (Debian, Ubuntu, Linux Mint Debian Edition, etc.) with the command: Debian/Ubuntu LTS release curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2026.key | sudo tee \ /usr/share/keyrings/jenkins-keyring.asc > /dev/null echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \ https://pkg.jenkins.io/debian-stable binary/ | sudo tee \ /etc/apt/sources.list.d/jenkins.list > /dev/null Debian/Ubuntu weekly release curl -fsSL... <div class="paragraph"> <p>Beginning December 23, 2025 with 2.543, the Jenkins weekly releases will use new repository signing keys for the Linux installation packages. The same change will be made in Jenkins LTS releases beginning January 21, 2026. Administrators of Linux systems <strong>must</strong> install the new signing keys on their Linux servers <strong>before</strong> installing Jenkins Jenkins weekly 2.543 or Jenkins LTS 2.541.1.</p> </div> <div class="sect1"> <h2 id="debianubuntu"><a class="anchor" href="#debianubuntu" />Debian/Ubuntu</h2> <div class="sectionbody"> <div class="paragraph"> <p>Update Debian compatible operating systems (Debian, Ubuntu, Linux Mint Debian Edition, etc.) with the command:</p> </div> <div class="listingblock"> <div class="title">Debian/Ubuntu LTS release</div> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">curl <span class="nt">-fsSL</span> https://pkg.jenkins.io/debian-stable/jenkins.io-2026.key | <span class="nb">sudo tee</span> <span class="se">\</span> /usr/share/keyrings/jenkins-keyring.asc <span class="o">&gt;</span> /dev/null <span class="nb">echo </span>deb <span class="o">[</span>signed-by<span class="o">=</span>/usr/share/keyrings/jenkins-keyring.asc] <span class="se">\</span> https://pkg.jenkins.io/debian-stable binary/ | <span class="nb">sudo tee</span> <span class="se">\</span> /etc/apt/sources.list.d/jenkins.list <span class="o">&gt;</span> /dev/null</code></pre> </div> </div> <div class="listingblock"> <div class="title">Debian/Ubuntu weekly release</div> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">curl <span class="nt">-fsSL</span> https://pkg.jenkins.io/debian/jenkins.io-2026.key | <span class="nb">sudo tee</span> <span class="se">\</span> /usr/share/keyrings/jenkins-keyring.asc <span class="o">&gt;</span> /dev/null <span class="nb">echo </span>deb <span class="o">[</span>signed-by<span class="o">=</span>/usr/share/keyrings/jenkins-keyring.asc] <span class="se">\</span> https://pkg.jenkins.io/debian binary/ | <span class="nb">sudo tee</span> <span class="se">\</span> /etc/apt/sources.list.d/jenkins.list <span class="o">&gt;</span> /dev/null</code></pre> </div> </div> </div> </div> <div class="sect1"> <h2 id="red-hatcentos"><a class="anchor" href="#red-hatcentos" />Red Hat/CentOS</h2> <div class="sectionbody"> <div class="paragraph"> <p>Update Red Hat compatible operating systems (Red Hat Enterprise Linux, Alma Linux, CentOS, Fedora, Oracle Linux, Rocky Linux, Scientific Linux, etc.) with the command:</p> </div> <div class="listingblock"> <div class="title">Red Hat/CentOS LTS release</div> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash"><span class="nb">sudo </span>rpm <span class="nt">--import</span> https://pkg.jenkins.io/rpm-stable/jenkins.io-2026.key</code></pre> </div> </div> <div class="listingblock"> <div class="title">Red Hat/CentOS weekly release</div> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash"><span class="nb">sudo </span>rpm <span class="nt">--import</span> https://pkg.jenkins.io/rpm/jenkins.io-2026.key</code></pre> </div> </div> </div> </div> <div class="sect1"> <h2 id="frequently-asked-questions"><a class="anchor" href="#frequently-asked-questions" />Frequently Asked Questions</h2> <div class="sectionbody"> <div class="sect2"> <h3 id="what-if-i-dont-update-the-repository-signing-key"><a class="anchor" href="#what-if-i-dont-update-the-repository-signing-key" />What if I don’t update the repository signing key?</h3> <div class="paragraph"> <p>Updates may be <strong>blocked</strong> or interrupted by the operating system package manager (apt, yum, dnf) on operating systems that have not installed the new repository signing key. Sample messages from the operating system may look like:</p> </div> <div class="listingblock"> <div class="title">Debian/Ubuntu</div> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">Reading package lists... Done W: GPG error: https://pkg.jenkins.io/debian-stable binary/ Release: The following signatures couldn<span class="s1">'t be verified because the public key is not available: NO_PUBKEY 7198F4B714ABFC68 E: The repository '</span>https://pkg.jenkins.io/debian-stable binary/ Release<span class="s1">' is not signed. N: Updating from such a repository can'</span>t be <span class="k">done </span>securely, and is therefore disabled by default. N: See apt-secure<span class="o">(</span>8<span class="o">)</span> manpage <span class="k">for </span>repository creation and user configuration details.</code></pre> </div> </div> </div> <div class="sect2"> <h3 id="why-is-the-repository-signing-key-being-updated"><a class="anchor" href="#why-is-the-repository-signing-key-being-updated" />Why is the repository signing key being updated?</h3> <div class="paragraph"> <p>The repository signing key expires after 3 years so that it matches with the expiration dates of the jar file signing and the MSI signing certificate. The updated GPG repository signing key is used in the weekly repositories and the stable repositories.</p> </div> </div> <div class="sect2"> <h3 id="which-operating-systems-are-affected"><a class="anchor" href="#which-operating-systems-are-affected" />Which operating systems are affected?</h3> <div class="paragraph"> <p>Operating systems that use Debian package management (apt) and operating systems that use Red Hat package management (yum and dnf) need the new repository signing key.</p> </div> <div class="paragraph"> <p>Other operating systems like Windows, macOS, FreeBSD, OpenBSD, Solaris, and OpenIndiana are not affected.</p> </div> </div> </div> </div> https:/www.jenkins.io/blog/2025/12/10/jenkins-bug-bounty-program-yeswehack-european-commission/ Announcing the new Jenkins Bug Bounty Program 2026-03-19T18:14:09+00:00 2025-12-10T00:00:00+00:00 It is with great pleasure that we announce the new Jenkins Bug Bounty Program! The European Commission (EC OSPO) has partnered with YesWeHack to launch bug bounty programs for several open source projects. The Jenkins project was selected as a valuable asset for public administration across the European Union. The program will run for one year, rewarding security researchers who find and responsibly disclose security vulnerabilities in Jenkins. Why a Bug Bounty Program? Bug bounty programs complement our existing security practices by engaging the security research community in identifying and responsibly disclosing vulnerabilities. This additional layer of scrutiny, combined with financial incentives, helps ensure Jenkins remains... <div class="paragraph"> <p>It is with great pleasure that we announce the new Jenkins Bug Bounty Program! The European Commission (<a href="https://interoperable-europe.ec.europa.eu/collection/ec-ospo">EC OSPO</a>) has partnered with <a href="https://www.yeswehack.com/">YesWeHack</a> to launch bug bounty programs for several open source projects. The Jenkins project was selected as a valuable asset for public administration across the European Union.</p> </div> <div class="paragraph"> <p>The program will run for one year, rewarding security researchers who find and responsibly disclose security vulnerabilities in Jenkins.</p> </div> <div class="sect1"> <h2 id="why-a-bug-bounty-program"><a class="anchor" href="#why-a-bug-bounty-program" />Why a Bug Bounty Program?</h2> <div class="sectionbody"> <div class="paragraph"> <p>Bug bounty programs complement our existing security practices by engaging the security research community in identifying and responsibly disclosing vulnerabilities.</p> </div> <div class="paragraph"> <p>This additional layer of scrutiny, combined with financial incentives, helps ensure Jenkins remains a secure and reliable automation server for organizations worldwide.</p> </div> </div> </div> <div class="sect1"> <h2 id="program-details"><a class="anchor" href="#program-details" />Program Details</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><strong>Initial scope</strong>: Jenkins Core and its main components, and four plugins related to security</p> </li> <li> <p><strong>Reward</strong>: Up to €5,000 for valid critical findings!</p> </li> <li> <p><strong>Platform</strong>: <a href="https://yeswehack.com/programs/jenkins-bug-bounty-program">Jenkins Bug Bounty Program on YesWeHack</a></p> </li> <li> <p><strong>Funding</strong>: European Commission</p> </li> </ul> </div> <div class="paragraph"> <p>Depending on the level of interest and quality of reports, we will consider expanding the scope to other components of the Jenkins ecosystem.</p> </div> <div class="paragraph"> <p>For security researchers, it’s an additional reason to invest time on Jenkins. In addition to the white-box testing enabled by the open-source nature of the project, you can even get financial rewards for your efforts!</p> </div> </div> </div> <div class="sect1"> <h2 id="how-does-it-work"><a class="anchor" href="#how-does-it-work" />How Does It Work?</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p>The in-scope reports are sent to the YesWeHack platform.</p> </li> <li> <p>The initial triage is done by YesWeHack team.</p> </li> <li> <p>Valid reports are then sent to the Jenkins Security Team for further analysis / validation, creating the corresponding SECURITY tickets.</p> </li> <li> <p>Then the maintainers of the components are contacted to fix the issues.</p> </li> </ul> </div> <div class="paragraph"> <p>This enhancement integrates seamlessly with our existing security workflow, while providing additional visibility and support from the European Commission and YesWeHack.</p> </div> </div> </div> <div class="sect1"> <h2 id="thank-you"><a class="anchor" href="#thank-you" />Thank You</h2> <div class="sectionbody"> <div class="paragraph"> <p>We sincerely thank the European Commission and YesWeHack for making this program possible. Their support enables the Jenkins project to further strengthen its security posture and continue serving the open source community.</p> </div> <div class="paragraph"> <p>We invite security researchers to explore the program and help us make Jenkins more secure. Whether you’re a seasoned researcher or new to bug bounties, your contributions are valuable to the Jenkins community.</p> </div> <div class="paragraph"> <p>Happy hacking!</p> </div> </div> </div> https:/www.jenkins.io/blog/2025/10/31/automating-jenkins-on-android/ Automating Jenkins on Android with Infrastructure as Code 2026-03-19T18:14:09+00:00 2025-10-31T00:00:00+00:00 From Manual to Automated In March 2023, I explored running Jenkins on Android devices using Termux, demonstrating that it’s technically possible to transform aging smartphones into CI/CD infrastructure. The manual setup worked, but it required 2-3 hours of configuration and was error-prone. Fast-forward to 2025: I’ve automated the entire process using Infrastructure as Code principles. What once took hours of manual configuration now completes in 15 minutes with a single command. This article presents the automation solution and the lessons learned while building it. Why Automate Jenkins on Android? The motivation is straightforward: Reproducibility: Manual setups are difficult to replicate across multiple devices. Automation ensures... <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2023/03/29/2023-03-22-android-and-jenkins/love.png" alt="Jenkins on Android automation" width="50%" /></span> </p> <div class="sect1"> <h2 id="from-manual-to-automated"><a class="anchor" href="#from-manual-to-automated" />From Manual to Automated</h2> <div class="sectionbody"> <div class="paragraph"> <p>In <a href="https://www.jenkins.io/blog/2023/03/30/android-and-jenkins/">March 2023</a>, I explored running Jenkins on Android devices using Termux, demonstrating that it’s technically possible to transform aging smartphones into CI/CD infrastructure. The manual setup worked, but it required 2-3 hours of configuration and was error-prone.</p> </div> <div class="paragraph"> <p>Fast-forward to 2025: I’ve automated the entire process using Infrastructure as Code principles. What once took hours of manual configuration now completes in 15 minutes with a single command. This article presents the automation solution and the lessons learned while building it.</p> </div> </div> </div> <div class="sect1"> <h2 id="why-automate-jenkins-on-android"><a class="anchor" href="#why-automate-jenkins-on-android" />Why Automate Jenkins on Android?</h2> <div class="sectionbody"> <div class="paragraph"> <p>The motivation is straightforward:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Reproducibility</strong>: Manual setups are difficult to replicate across multiple devices. Automation ensures consistency.</p> </li> <li> <p><strong>E-waste reduction</strong>: Millions of functional Android devices sit in drawers. Why not repurpose them as build agents?</p> </li> <li> <p><strong>Learning opportunity</strong>: Building this automation taught valuable lessons about service management, SSH configuration, and testing methodologies.</p> </li> <li> <p><strong>Cost-effective CI/CD</strong>: For small projects, hobbyists, or educational environments, repurposed phones offer free compute.</p> </li> </ul> </div> <div class="paragraph"> <p>The goal wasn’t just to automate <strong>my</strong> setup—it was to create a reproducible solution anyone could use.</p> </div> </div> </div> <div class="sect1"> <h2 id="the-infrastructure-as-code-solution"><a class="anchor" href="#the-infrastructure-as-code-solution" />The Infrastructure as Code Solution</h2> <div class="sectionbody"> <div class="paragraph"> <p>The complete automation is available at <a href="https://github.com/gounthar/termux-jenkins-automation">github.com/gounthar/termux-jenkins-automation</a>. The solution uses:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Ansible</strong>: Infrastructure automation across 8 reusable roles</p> </li> <li> <p><strong>Jenkins Configuration as Code (JCasC)</strong>: Declarative Jenkins configuration</p> </li> <li> <p><strong>Termux</strong>: Linux environment on Android without root access</p> </li> </ul> </div> <div class="sect2"> <h3 id="architecture-overview"><a class="anchor" href="#architecture-overview" />Architecture Overview</h3> <div class="paragraph"> <p>The automation deploys a complete Jenkins infrastructure on a single Android device:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="text">┌───────────────────────────────────────┐ │ Android Phone (Termux) │ │ ┌──────────────────────────────────┐ │ │ │ Jenkins Controller (Minimal) │ │ │ │ - Port 8080 (Web UI) │ │ │ │ - JCasC configured │ │ │ └──────────┬───────────────────────┘ │ │ │ SSH (localhost:8022) │ │ ┌──────────▼───────────────────────┐ │ │ │ Jenkins Agent (SSH) │ │ │ │ - Build tools installed │ │ │ │ - 2 executors │ │ │ └──────────────────────────────────┘ │ └───────────────────────────────────────┘</code></pre> </div> </div> <div class="paragraph"> <p>The controller handles job orchestration while delegating builds to the agent (on the same device). This architecture mirrors production setups and teaches Jenkins best practices.</p> </div> </div> <div class="sect2"> <h3 id="eight-ansible-roles"><a class="anchor" href="#eight-ansible-roles" />Eight Ansible Roles</h3> <div class="paragraph"> <p>The automation is organized into focused, reusable roles:</p> </div> <div class="olist arabic"> <ol class="arabic"> <li> <p><strong>termux-base</strong>: Core Termux setup (SSH, Python, package management)</p> </li> <li> <p><strong>termux-complete-setup</strong>: Comprehensive package installation (59+ packages including build tools, languages, dev tools)</p> </li> <li> <p><strong>jenkins-controller</strong>: Jenkins installation and initialization</p> </li> <li> <p><strong>jenkins-agent</strong>: SSH agent configuration and workspace setup</p> </li> <li> <p><strong>jenkins-jcasc</strong>: Configuration as Code deployment</p> </li> <li> <p><strong>jenkins-backup</strong>: Job and configuration backup utilities</p> </li> <li> <p><strong>termux-boot-setup</strong>: Optional auto-start on device boot</p> </li> <li> <p><strong>termux-buildtools</strong>: Legacy build tools (superseded by termux-complete-setup)</p> </li> </ol> </div> <div class="paragraph"> <p>Each role is idempotent and can be run independently or as part of the complete setup playbook.</p> </div> </div> <div class="sect2"> <h3 id="quick-start"><a class="anchor" href="#quick-start" />Quick Start</h3> <div class="paragraph"> <p>The main orchestration playbook ties everything together:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash"><span class="c"># On the Android device (in Termux)</span> pkg <span class="nb">install </span>openssh python sshd passwd <span class="nb">whoami </span>ifconfig wlan0 <span class="c"># On your laptop/PC</span> git clone https://github.com/gounthar/termux-jenkins-automation.git <span class="nb">cd </span>termux-jenkins-automation ./scripts/run-setup.sh <span class="c"># Answer prompts:</span> <span class="c"># - IP address (from ifconfig)</span> <span class="c"># - SSH port (8022 default)</span> <span class="c"># - Username (from whoami)</span> <span class="c"># - Jenkins admin password</span> <span class="c"># - Authentication method (SSH key recommended)</span> <span class="c"># Wait ~15 minutes</span> <span class="c"># Access Jenkins:</span> <span class="c"># http://&lt;phone-ip&gt;:8080</span></code></pre> </div> </div> <div class="paragraph"> <p>The script handles prerequisites checking, inventory configuration, and playbook execution. No manual Ansible configuration required.</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="key-technical-insights"><a class="anchor" href="#key-technical-insights" />Key Technical Insights</h2> <div class="sectionbody"> <div class="paragraph"> <p>Building this automation revealed several important lessons:</p> </div> <div class="sect2"> <h3 id="service-management-runit-over-background-processes"><a class="anchor" href="#service-management-runit-over-background-processes" />Service Management: runit over Background Processes</h3> <div class="paragraph"> <p>Initially, I ran Jenkins as a background process (<code>java -jar jenkins.war &amp;</code>). This approach had problems:</p> </div> <div class="ulist"> <ul> <li> <p>Process dies when terminal closes</p> </li> <li> <p>No automatic restart on failure</p> </li> <li> <p>No log management</p> </li> <li> <p>Difficult to monitor</p> </li> </ul> </div> <div class="paragraph"> <p>The solution: Termux’s service management system using <code>runit</code> and <code>sv</code>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash"><span class="c"># Jenkins runs as a managed service</span> sv status jenkins <span class="c"># Output: run: jenkins: (pid 31647) 95s; run: log: (pid 26734) 4516s</span> <span class="c"># Service management commands</span> sv up jenkins <span class="c"># Start</span> sv down jenkins <span class="c"># Stop</span> sv restart jenkins <span class="c"># Restart</span></code></pre> </div> </div> <div class="paragraph"> <p>Logs are handled by <code>svlogd</code> with automatic rotation:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash"><span class="c"># View live logs</span> <span class="nb">tail</span> <span class="nt">-f</span> ~/.jenkins/logs/current <span class="c"># All logs automatically rotated and compressed</span> <span class="nb">ls</span> <span class="nt">-lh</span> ~/.jenkins/logs/</code></pre> </div> </div> <div class="paragraph"> <p>This mirrors production service management and prevents the "my Jenkins died overnight" problem.</p> </div> </div> <div class="sect2"> <h3 id="fresh-installation-testing"><a class="anchor" href="#fresh-installation-testing" />Fresh Installation Testing</h3> <div class="paragraph"> <p>The biggest mistake: testing only on my development phone. The automation worked perfectly…​ on the device I’d been configuring manually for weeks.</p> </div> <div class="paragraph"> <p>When I tested on a fresh Termux installation, it failed immediately. Missing dependencies that I’d installed manually months ago weren’t in the playbooks.</p> </div> <div class="paragraph"> <p><strong>The fix</strong>: Systematic fresh installation testing on multiple devices. This revealed:</p> </div> <div class="ulist"> <ul> <li> <p>Missing repository configurations (needed <code>root-repo</code> and <code>pointless</code> repos for <code>gcc-8</code>)</p> </li> <li> <p>Undocumented package dependencies</p> </li> <li> <p>SSH key permission issues</p> </li> <li> <p>Service startup race conditions</p> </li> </ul> </div> <div class="paragraph"> <p>Fresh installation testing became part of the development workflow. Every change was validated on a wiped device.</p> </div> <div class="paragraph"> <p><strong>Current success rate</strong>: 98% on fresh Termux installations (the 2% failure is usually network timeouts during package installation).</p> </div> </div> <div class="sect2"> <h3 id="jenkins-configuration-as-code"><a class="anchor" href="#jenkins-configuration-as-code" />Jenkins Configuration as Code</h3> <div class="paragraph"> <p>Manual Jenkins configuration through the UI isn’t reproducible. The solution: JCasC (Jenkins Configuration as Code).</p> </div> <div class="paragraph"> <p>Complete Jenkins configuration in YAML:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="yaml"><span class="na">jenkins</span><span class="pi">:</span> <span class="na">systemMessage</span><span class="pi">:</span> <span class="s2">"</span><span class="s">Jenkins</span><span class="nv"> </span><span class="s">on</span><span class="nv"> </span><span class="s">Android</span><span class="nv"> </span><span class="s">(Termux)</span><span class="nv"> </span><span class="s">-</span><span class="nv"> </span><span class="s">Automated</span><span class="nv"> </span><span class="s">Setup"</span> <span class="na">numExecutors</span><span class="pi">:</span> <span class="m">0</span> <span class="c1"># Controller doesn't run builds</span> <span class="na">securityRealm</span><span class="pi">:</span> <span class="na">local</span><span class="pi">:</span> <span class="na">users</span><span class="pi">:</span> <span class="pi">-</span> <span class="na">id</span><span class="pi">:</span> <span class="s2">"</span><span class="s">admin"</span> <span class="na">password</span><span class="pi">:</span> <span class="s2">"</span><span class="s">${JENKINS_ADMIN_PASSWORD:-admin}"</span> <span class="na">credentials</span><span class="pi">:</span> <span class="na">system</span><span class="pi">:</span> <span class="na">domainCredentials</span><span class="pi">:</span> <span class="pi">-</span> <span class="na">domain</span><span class="pi">:</span> <span class="na">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">SSH</span><span class="nv"> </span><span class="s">Agent</span><span class="nv"> </span><span class="s">Credentials"</span> <span class="na">credentials</span><span class="pi">:</span> <span class="pi">-</span> <span class="na">basicSSHUserPrivateKey</span><span class="pi">:</span> <span class="na">id</span><span class="pi">:</span> <span class="s2">"</span><span class="s">termux-agent-key"</span> <span class="na">privateKeySource</span><span class="pi">:</span> <span class="na">directEntry</span><span class="pi">:</span> <span class="na">privateKey</span><span class="pi">:</span> <span class="s2">"</span><span class="s">${readFile:/data/data/com.termux/files/home/.jenkins/ssh/id_ed25519}"</span> <span class="na">nodes</span><span class="pi">:</span> <span class="pi">-</span> <span class="na">permanent</span><span class="pi">:</span> <span class="na">name</span><span class="pi">:</span> <span class="s2">"</span><span class="s">termux-agent-1"</span> <span class="na">remoteFS</span><span class="pi">:</span> <span class="s2">"</span><span class="s">/data/data/com.termux/files/home/jenkins-agent"</span> <span class="na">launcher</span><span class="pi">:</span> <span class="na">ssh</span><span class="pi">:</span> <span class="na">host</span><span class="pi">:</span> <span class="s2">"</span><span class="s">localhost"</span> <span class="na">port</span><span class="pi">:</span> <span class="m">8022</span> <span class="na">credentialsId</span><span class="pi">:</span> <span class="s2">"</span><span class="s">termux-agent-key"</span></code></pre> </div> </div> <div class="paragraph"> <p>The automation deploys this configuration, and Jenkins applies it on startup. No clicking through UI settings.</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="lessons-for-production-jenkins"><a class="anchor" href="#lessons-for-production-jenkins" />Lessons for Production Jenkins</h2> <div class="sectionbody"> <div class="paragraph"> <p>While this project targets Android devices, the patterns apply to any Jenkins deployment:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Infrastructure as Code</strong>: All configuration in version control</p> </li> <li> <p><strong>Service Management</strong>: Proper process supervision (systemd, runit, etc.)</p> </li> <li> <p><strong>Configuration as Code</strong>: JCasC for reproducible Jenkins configuration</p> </li> <li> <p><strong>Fresh Installation Testing</strong>: Never assume dependencies are present</p> </li> <li> <p><strong>Modular Roles</strong>: Break automation into focused, reusable components</p> </li> </ul> </div> <div class="paragraph"> <p>The <code>termux-jenkins-automation</code> repository demonstrates these principles in a constrained environment (no root, mobile platform, limited resources). If it works on Android, these patterns will definitely work on traditional servers.</p> </div> </div> </div> <div class="sect1"> <h2 id="whats-next"><a class="anchor" href="#whats-next" />What’s Next?</h2> <div class="sectionbody"> <div class="paragraph"> <p>The automation is production-ready for single-device setups. Future enhancements could include:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Multi-device clustering</strong>: Coordinate multiple Android phones as a Jenkins cluster</p> </li> <li> <p><strong>Plugin automation</strong>: Automated plugin installation and updates</p> </li> <li> <p><strong>Backup/restore workflows</strong>: Scheduled backups to cloud storage</p> </li> <li> <p><strong>Performance optimization</strong>: Memory tuning for constrained devices</p> </li> <li> <p><strong>Monitoring integration</strong>: Prometheus metrics export</p> </li> </ul> </div> <div class="paragraph"> <p>The foundation is solid. The patterns are proven. The infrastructure is code.</p> </div> </div> </div> <div class="sect1"> <h2 id="try-it-yourself"><a class="anchor" href="#try-it-yourself" />Try It Yourself</h2> <div class="sectionbody"> <div class="paragraph"> <p>The complete automation, documentation, and troubleshooting guides are available at:</p> </div> <div class="paragraph"> <p><a href="https://github.com/gounthar/termux-jenkins-automation" class="bare">https://github.com/gounthar/termux-jenkins-automation</a></p> </div> <div class="paragraph"> <p>Requirements:</p> </div> <div class="ulist"> <ul> <li> <p>Android device with Termux installed</p> </li> <li> <p>Laptop/PC with Ansible 2.10+</p> </li> <li> <p>15 minutes</p> </li> </ul> </div> <div class="paragraph"> <p>Whether you’re repurposing e-waste, building a home lab, or learning Jenkins administration, this automation provides a reproducible path from bare Android device to functioning Jenkins infrastructure.</p> </div> <div class="paragraph"> <p>From manual experiment to automated solution—that’s the Infrastructure as Code journey.</p> </div> <hr> <div class="paragraph"> <p><strong>Related articles:</strong></p> </div> <div class="ulist"> <ul> <li> <p><a href="https://www.jenkins.io/blog/2023/03/30/android-and-jenkins/">Android and Jenkins: what is the limit?</a></p> </li> <li> <p><a href="https://www.jenkins.io/blog/2023/04/07/android-and-jenkins-discovery/">Building Android apps with Jenkins: an introduction</a></p> </li> </ul> </div> </hr> </div></div></div> https:/www.jenkins.io/blog/2025/10/19/maeve-final-evaluation/ Advancing the Jenkins Tekton Client Plugin through CRD Generation, JUnit 5 Modernization, and Automated CI 2026-03-19T18:14:09+00:00 2025-10-19T00:00:00+00:00 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... <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/08/31/gsoc-maeveho-tekton.png" alt="Advancing the Jenkins Tekton Plugin" /></span> </p> <div class="paragraph"> <p>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.</p> </div> <div class="paragraph"> <p>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.</p> </div> <hr> <div class="sect2"> <h3 id="project-overview"><a class="anchor" href="#project-overview" />Project Overview</h3> <div class="paragraph"> <p>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:</p> </div> <div class="ulist"> <ul> <li> <p>Modernize the build and testing infrastructure</p> </li> <li> <p>Improve test coverage and reliability</p> </li> <li> <p>Automate the generation of Java POJOs and Jenkins UI elements from Tekton Custom Resource Definitions (CRDs)</p> </li> <li> <p>Strengthen the CI/CD integration between Jenkins and Tekton</p> </li> </ul> </div> <div class="paragraph"> <p>All work was completed in close collaboration with the Jenkins community through public pull requests, reviews, and test deployments.</p> </div> <hr> </hr> <div class="sect2"> <h3 id="continuous-integration-and-build-automation"><a class="anchor" href="#continuous-integration-and-build-automation" />Continuous Integration and Build Automation</h3> <div class="paragraph"> <p><strong>PR: <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/391">#391 – Add GitHub Actions</a></strong></p> </div> <div class="paragraph"> <p>A new GitHub Actions configuration was added to automate the build and testing process. Two workflows, <code>test.yml</code> and <code>build.yml</code>, now ensure that <code>mvn clean verify</code> and full build validation are executed on every commit. This CI layer ensures early detection of build issues and maintains consistent testing across environments.</p> </div> <div class="paragraph"> <p><strong>PR: <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/393">#393 – Update Jenkinsfile for Linux JDK 17</a></strong></p> </div> <div class="paragraph"> <p>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.</p> </div> <hr> </hr> <div class="sect2"> <h3 id="documentation-and-developer-experience"><a class="anchor" href="#documentation-and-developer-experience" />Documentation and Developer Experience</h3> <div class="paragraph"> <p><strong>PR: <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/416">#416 – Update README with comprehensive plugin documentation</a></strong></p> </div> <div class="paragraph"> <p>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.</p> </div> <div class="paragraph"> <p><strong>PR: <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/423">#423 – Rename default branch to main</a></strong></p> </div> <div class="paragraph"> <p>The default branch was renamed from <code>master</code> to <code>main</code> to follow modern repository standards. All workflow and build references were updated accordingly.</p> </div> <div class="paragraph"> <p><strong>PR: <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/427">#427 – Remove Windows support for CI</a></strong></p> </div> <div class="paragraph"> <p>Windows testing environments were deprecated to streamline CI execution and reduce maintenance complexity.</p> </div> <hr> </hr> <div class="sect2"> <h3 id="test-modernization-and-migration-to-junit-5"><a class="anchor" href="#test-modernization-and-migration-to-junit-5" />Test Modernization and Migration to JUnit 5</h3> <div class="paragraph"> <p><strong>PR: <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/421">#421 – Migrate and Refactor Tests to JUnit 5</a></strong></p> </div> <div class="paragraph"> <p>A full migration from JUnit 4 to JUnit 5 was completed. The modernized test suite enhances readability, reliability, and extensibility.</p> </div> <div class="paragraph"> <p>Highlights include: * Migration of <code>CreateRawTest</code> and <code>CreateRawMockServerTest</code> to JUnit 5 * Partial migration and modernization of <code>JenkinsFreestyleTest</code> and <code>JenkinsPipelineTest</code> * Reactivation of disabled tests * Adoption of parameterized and assertion-based testing features available in JUnit 5</p> </div> <div class="paragraph"> <p>This upgrade ensures the plugin aligns with the current Jenkins testing ecosystem.</p> </div> <hr> </hr> <div class="sect2"> <h3 id="integration-and-end-to-end-testing"><a class="anchor" href="#integration-and-end-to-end-testing" />Integration and End-to-End Testing</h3> <div class="paragraph"> <p><strong>PR: <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/433">#433 – Add Jenkins Build End-to-End Tests and JaCoCo Integration</a></strong></p> </div> <div class="paragraph"> <p>Comprehensive end-to-end tests were introduced to validate interactions between Jenkins jobs and Tekton pipelines.</p> </div> <div class="paragraph"> <p>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</p> </div> <div class="paragraph"> <p>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.</p> </div> <hr> </hr> <div class="sect2"> <h3 id="bug-fixes-and-functional-improvements"><a class="anchor" href="#bug-fixes-and-functional-improvements" />Bug Fixes and Functional Improvements</h3> <div class="paragraph"> <p><strong>PR: <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/446">#446 – Fix Duplicate @Symbol Annotation in tektonCreateRaw</a></strong></p> </div> <div class="paragraph"> <p>Resolved a long-standing UI issue where the “Create Resource (Raw)” step was missing from the Jenkins interface due to duplicate <code>@Symbol</code> annotations. The fix restored visibility and configurability of Tekton resource creation within the Jenkins UI.</p> </div> <hr> </hr> <div class="sect2"> <h3 id="crd-to-java-pojo-generation-system"><a class="anchor" href="#crd-to-java-pojo-generation-system" />CRD to Java POJO Generation System</h3> <div class="paragraph"> <p><strong>PR: <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/450">#450 – Add CRD to Java POJO Generation at Maven Build Time</a></strong></p> </div> <div class="paragraph"> <p>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.</p> </div> <div class="paragraph"> <p>Key components: * <code>CrdJavaGenerator</code> – integrates CRD generation into the Maven lifecycle * <code>EnhancedCrdProcessor</code> – parses CRD schemas and converts them into Java classes using <code>jsonschema2pojo</code> * Maven profile <code>download-binaries</code> – downloads Tekton CRD definitions during build * Generated POJOs include <code>@DataBoundConstructor</code> and extend Jenkins <code>BaseStep</code> for UI integration</p> </div> <div class="paragraph"> <p>The system now supports multiple Tekton API versions (<code>v1</code>, <code>v1beta1</code>, <code>v1alpha1</code>) and produces over one thousand Java classes that reflect the CRD specifications.</p> </div> <div class="paragraph"> <p>This automation significantly reduces maintenance burden and enables Jenkins to support new Tekton resources dynamically.</p> </div> <hr> </hr> <div class="sect2"> <h3 id="unit-testing-for-the-generation-system"><a class="anchor" href="#unit-testing-for-the-generation-system" />Unit Testing for the Generation System</h3> <div class="paragraph"> <p><strong>PR: <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/480">#480 – Unit Tests for CRD Generation System</a></strong></p> </div> <div class="paragraph"> <p>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</p> </div> <div class="paragraph"> <p>Over fifty unit and integration tests ensure the generator behaves deterministically and maintains correctness across Tekton versions.</p> </div> <hr> </hr> <div class="sect2"> <h3 id="crd-to-jenkins-ui-auto-generation"><a class="anchor" href="#crd-to-jenkins-ui-auto-generation" />CRD to Jenkins UI Auto-Generation</h3> <div class="paragraph"> <p><strong>PR: <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/484">#484 – Add CRD to Jenkins UI Auto-Generation System</a></strong></p> </div> <div class="paragraph"> <p>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.</p> </div> <div class="paragraph"> <p>Core modules: * <code>TektonCrdToJavaProcessor.java</code> * <code>AdvancedJellyConfigGenerator.java</code> * <code>JellyConfigGenerator.java</code> * <code>TektonPojoGenerator.java</code></p> </div> <div class="paragraph"> <p>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.</p> </div> <div class="paragraph"> <p>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.</p> </div> <hr> </hr> <div class="sect2"> <h3 id="technical-takeaways"><a class="anchor" href="#technical-takeaways" />Technical Takeaways</h3> <div class="paragraph"> <p>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.</p> </div> <div class="paragraph"> <p>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.</p> </div> <hr> </hr> <div class="sect2"> <h3 id="future-work"><a class="anchor" href="#future-work" />Future Work</h3> <div class="paragraph"> <p>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</p> </div> <hr> </hr> <div class="sect2"> <h3 id="acknowledgements"><a class="anchor" href="#acknowledgements" />Acknowledgements</h3> <div class="paragraph"> <p>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.</p> </div> <hr> </hr> <div class="sect2"> <h3 id="links"><a class="anchor" href="#links" />Links</h3> <div class="ulist"> <ul> <li> <p>Project repository: <a href="https://github.com/jenkinsci/tekton-client-plugin">jenkinsci/tekton-client-plugin</a></p> </li> <li> <p>Pull requests: <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/391">#391</a>, <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/393">#393</a>, <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/416">#416</a>, <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/421">#421</a>, <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/423">#423</a>, <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/427">#427</a>, <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/433">#433</a>, <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/446">#446</a>, <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/450">#450</a>, <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/480">#480</a>, <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/484">#484</a></p> </li> </ul> </div> </div></div></div></div></div></div></div></div></div></div></div></div></div></hr></div> https:/www.jenkins.io/blog/2025/10/19/birajit-saikia-gsoc-finalterm-update-blog-post/ GSoC 2025 Final Term: Build Retooling of jenkins.io 2026-03-19T18:14:09+00:00 2025-10-19T00:00:00+00:00 biru-codeastromer This post marks the successful completion of my Google Summer of Code 2025 project: Complete Build Retooling of jenkins.io. Over the past months, we’ve transformed the Jenkins documentation infrastructure from legacy systems to a modern, performant, and well-organized platform. Table of Contents Project Recap Post-Midterm Achievements Non-Versioned Site (Vite.js) Completion Versioned Site (Antora) Enhancements Technical Implementation Deep Dive Challenges & Learnings Future Roadmap Acknowledgments Project Resources Project Recap The initiative set out to achieve three core objectives for the Jenkins documentation system: Modernization: Transitioning from legacy tools to contemporary solutions (Antora + Vite.js) Performance: Implementing faster build processes and better user experience Organization: Establishing clear separation between versioned content (LTS releases) and non-versioned content (general... <div class="paragraph"> <p><span class="image right"><img src="https://www.jenkins.io/images/gsoc/jenkins-gsoc-logo_small.png" alt="Jenkins GSoC Logo" width="200" /></span> </p> <div class="paragraph"> <p>This post marks the successful completion of my Google Summer of Code 2025 project: <strong><a href="https://www.jenkins.io/projects/gsoc/2025/projects/complete-alternative-jenkins-io-build-retooling/">Complete Build Retooling of jenkins.io</a></strong>. Over the past months, we’ve transformed the Jenkins documentation infrastructure from legacy systems to a modern, performant, and well-organized platform.</p> </div> <div class="sect1"> <h2 id="table-of-contents"><a class="anchor" href="#table-of-contents" />Table of Contents</h2> <div class="sectionbody"> <div class="olist arabic"> <ol class="arabic"> <li> <p><a href="#project-recap">Project Recap</a></p> </li> <li> <p><a href="#post-midterm-achievements">Post-Midterm Achievements</a></p> <div class="olist loweralpha"> <ol class="loweralpha" type="a"> <li> <p><a href="#non-versioned-site-vite-js-completion">Non-Versioned Site (Vite.js) Completion</a></p> </li> <li> <p><a href="#versioned-site-antora-enhancements">Versioned Site (Antora) Enhancements</a></p> </li> </ol> </div> </li> <li> <p><a href="#technical-implementation-deep-dive">Technical Implementation Deep Dive</a></p> </li> <li> <p><a href="#challenges-learnings">Challenges &amp; Learnings</a></p> </li> <li> <p><a href="#future-roadmap">Future Roadmap</a></p> </li> <li> <p><a href="#acknowledgments">Acknowledgments</a></p> </li> <li> <p><a href="#project-resources">Project Resources</a></p> </li> </ol> </div> </div> </div> <div class="sect1"> <h2 id="project-recap"><a class="anchor" href="#project-recap" />Project Recap</h2> <div class="sectionbody"> <div class="paragraph"> <p>The initiative set out to achieve three core objectives for the Jenkins documentation system:</p> </div> <div class="olist arabic"> <ol class="arabic"> <li> <p><strong>Modernization</strong>: Transitioning from legacy tools to contemporary solutions (Antora + Vite.js)</p> </li> <li> <p><strong>Performance</strong>: Implementing faster build processes and better user experience</p> </li> <li> <p><strong>Organization</strong>: Establishing clear separation between versioned content (LTS releases) and non-versioned content (general documentation)</p> </li> </ol> </div> <div class="paragraph"> <p>By midterm, we had successfully laid the foundation with Antora for versioned documentation and Vite.js for non-versioned content, having migrated several core pages and established the basic architecture.</p> </div> </div> </div> <div class="sect1"> <h2 id="post-midterm-achievements"><a class="anchor" href="#post-midterm-achievements" />Post-Midterm Achievements</h2> <div class="sectionbody"> <div class="paragraph"> <p>The second half of GSoC focused on completing the migration of all remaining components and polishing the user experience.</p> </div> <div class="sect2"> <h3 id="non-versioned-site-vite-js-completion"><a class="anchor" href="#non-versioned-site-vite-js-completion" />Non-Versioned Site (Vite.js) Completion</h3> <div class="paragraph"> <p>The Vite.js site saw comprehensive completion with the migration of all critical components:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Home Page</strong>: Fully implemented with dynamic content integration</p> </li> <li> <p><strong>Blog System</strong>: Complete migration with proper date handling and categorization</p> </li> <li> <p><strong>Security Advisories</strong>: Full security folder with all advisories and individual issue pages</p> </li> <li> <p><strong>Changelogs</strong>: Both LTS and weekly changelog pages implemented</p> </li> <li> <p><strong>UI/UX Polish</strong>:</p> <div class="ulist"> <ul> <li> <p>System-aware dark/light mode throughout</p> </li> <li> <p>Proper note icons and warning elements across all pages</p> </li> <li> <p>Consistent header and footer using jenkins-io-components</p> </li> <li> <p>Mobile-responsive design improvements</p> </li> </ul> </div> </li> </ul> </div> <div class="paragraph"> <p>Key merged PRs include:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://github.com/biru-codeastromer/docs.jenkins.io-vite.js-site/pull/43">#43</a> - Home page implementation</p> </li> <li> <p><a href="https://github.com/biru-codeastromer/docs.jenkins.io-vite.js-site/pull/42">#42</a> - Note icons correction across all pages</p> </li> <li> <p><a href="https://github.com/biru-codeastromer/docs.jenkins.io-vite.js-site/pull/40">#40</a> - Changelogs integration</p> </li> <li> <p><a href="https://github.com/biru-codeastromer/docs.jenkins.io-vite.js-site/pull/39">#39</a> - Security advisories folder</p> </li> <li> <p><a href="https://github.com/biru-codeastromer/docs.jenkins.io-vite.js-site/pull/37">#37</a> - Blog system migration</p> </li> <li> <p><a href="https://github.com/biru-codeastromer/docs.jenkins.io-vite.js-site/pull/33">#33</a> - Thank-you note on download page</p> </li> <li> <p><a href="https://github.com/biru-codeastromer/docs.jenkins.io-vite.js-site/pull/31">#31</a> - Jenkins.io components header and footer</p> </li> </ul> </div> </div> <div class="sect2"> <h3 id="versioned-site-antora-enhancements"><a class="anchor" href="#versioned-site-antora-enhancements" />Versioned Site (Antora) Enhancements</h3> <div class="paragraph"> <p>The documentation repository received significant improvements:</p> </div> <div class="ulist"> <ul> <li> <p><strong>UI Modernization</strong>: Updated styling and component consistency</p> </li> <li> <p><strong>Content Cleanup</strong>: Removal of redundant security folder (now in Vite.js site)</p> </li> <li> <p><strong>Navigation Improvements</strong>: Enhanced sidebar and navigation elements</p> </li> <li> <p><strong>SEO Foundation</strong>: Meta tags and search engine optimization setup</p> </li> </ul> </div> <div class="paragraph"> <p>Key contributions:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://github.com/jenkins-infra/docs.jenkins.io/pull/380">#380</a> - Comprehensive UI changes and modernization</p> </li> <li> <p><a href="https://github.com/jenkins-infra/docs.jenkins.io/pull/379">#379</a> - Removal of deprecated security folder</p> </li> <li> <p>Ongoing cleanup and navigation link fixes</p> </li> </ul> </div> </div> </div> </div> <div class="sect1"> <h2 id="technical-implementation-deep-dive"><a class="anchor" href="#technical-implementation-deep-dive" />Technical Implementation Deep Dive</h2> <div class="sectionbody"> <div class="paragraph"> <p>The migration employed several sophisticated technical approaches:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Content Transformation</strong>: Automated conversion of AsciiDoc to structured JSON/YAML for dynamic rendering in Vite.js</p> </li> <li> <p><strong>Component Architecture</strong>: Reusable React components for consistent UI across both platforms</p> </li> <li> <p><strong>Progressive Migration</strong>: Incremental page-by-page migration ensuring zero downtime</p> </li> <li> <p><strong>Visual Parity</strong>: Pixel-perfect matching with existing jenkins.io design language</p> </li> <li> <p><strong>Build Optimization</strong>: Streamlined build processes with proper asset handling</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="challenges-learnings"><a class="anchor" href="#challenges-learnings" />Challenges &amp; Learnings</h2> <div class="sectionbody"> <div class="paragraph"> <p>This journey presented numerous learning opportunities:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Content Scale</strong>: Managing thousands of documentation pages and blog posts required careful orchestration</p> </li> <li> <p><strong>Tooling Integration</strong>: Smooth coordination between Antora and Vite.js ecosystems</p> </li> <li> <p><strong>UI Consistency</strong>: Maintaining visual parity while modernizing the underlying technology</p> </li> <li> <p><strong>Community Collaboration</strong>: Learning to effectively communicate and coordinate with the Jenkins infrastructure team</p> </li> <li> <p><strong>Personal Resilience</strong>: Overcoming technical hurdles, hardware failures, and scheduling challenges</p> </li> </ul> </div> <div class="paragraph"> <p>The experience strengthened not only my technical skills in modern web technologies and documentation systems but also my abilities in project management, communication, and open-source collaboration.</p> </div> </div> </div> <div class="sect1"> <h2 id="future-roadmap"><a class="anchor" href="#future-roadmap" />Future Roadmap</h2> <div class="sectionbody"> <div class="paragraph"> <p>While the core migration is complete, several enhancements remain for future contributors:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Search Integration</strong>: Algolia search implementation for both sites</p> </li> <li> <p><strong>Performance Optimization</strong>: Image compression and build time improvements</p> </li> <li> <p><strong>Progressive Web App</strong>: Enhanced mobile experience and offline capabilities</p> </li> <li> <p><strong>Accessibility</strong>: Comprehensive accessibility audit and improvements</p> </li> <li> <p><strong>More UI Enhancements</strong>: Continue modernizing the Antora (versioned) site with consistent components and improved user navigation.</p> </li> <li> <p><strong>Community Contribution</strong>: Streamlined processes for community documentation contributions</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="acknowledgments"><a class="anchor" href="#acknowledgments" />Acknowledgments</h2> <div class="sectionbody"> <div class="paragraph"> <p>This project’s success is a testament to the incredible support and guidance from my mentors: <strong><a href="https://www.jenkins.io/blog/authors/krisstern">Kris Stern</a></strong>, <strong><a href="https://www.jenkins.io/blog/authors/gounthar">Bruno Verachten</a></strong>, <strong><a href="https://www.jenkins.io/blog/authors/kmartens27">Kevin Martens</a></strong>, and <strong><a href="https://www.jenkins.io/blog/authors/iamrajiv">Rajiv Singh</a></strong>. Their technical expertise, strategic guidance, and unwavering support were instrumental throughout this complex migration.</p> </div> <div class="paragraph"> <p>Special thanks to the entire Jenkins infrastructure team for their support and review, and to Alexander Brandes for guidance on search integration. The Jenkins GSoC org admins created a nurturing environment that made this learning journey possible.</p> </div> <div class="paragraph"> <p>For me, this has been more than a summer project; it’s been a transformative experience in open-source contribution, technical architecture, and professional growth.</p> </div> <div class="sect2"> <h3 id="final-presentation"><a class="anchor" href="#final-presentation" />Final Presentation</h3> <div class="paragraph"> <p>The final project presentation delivered a comprehensive overview of the completed work and technical achievements. You can view all GSoC 2025 presentations <a href="https://www.jenkins.io/projects/gsoc/#gsoc-2025">on the Jenkins in Google Summer of Code page</a>.</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="project-resources"><a class="anchor" href="#project-resources" />Project Resources</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/jenkins-infra/docs.jenkins.io">Versioned Documentation Repository (Antora)</a></p> </li> <li> <p><a href="https://github.com/biru-codeastromer/docs.jenkins.io-vite.js-site">Non-Versioned Site Implementation (Vite.js)</a></p> </li> </ul> </div> <div class="paragraph"> <p>The Complete Build Retooling project has initiated the retooling of the jenkins.io website as a modern, scalable, and maintainable documentation platform that will serve the Jenkins community for years to come. Thank you to everyone who supported this journey!</p> </div> </div> </div></div> https:/www.jenkins.io/blog/2025/10/16/revamped-tests-in-jenkins/ Revamped Tests UI in Jenkins 2026-03-19T18:14:09+00:00 2025-10-16T00:00:00+00:00 The JUnit plugin has received a major redesign, focusing on a cleaner and more consistent UI. This work draws directly from the Pipeline Graph View plugin and the Jenkins Design Library, bringing much-needed polish to one of Jenkins' oldest plugins. So what’s new? New user interface The plugin has been redesigned to make test results easier to understand at a glance. Pages have been streamlined, components simplified and standardized, and the overall experience given a major cleanup. Test names are split more intuitively, based on method, class, and package. This makes scanning large test suites easier. Stacktraces are now also syntax-highlighted for better readability, and they can now... <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/10/16/revamped-tests-in-jenkins.png" alt="Revamped Tests in Jenkins" /></span> </p> <div class="paragraph"> <p>The JUnit plugin has received a major redesign, focusing on a cleaner and more consistent UI. This work draws directly from the Pipeline Graph View plugin and the Jenkins Design Library, bringing much-needed polish to one of Jenkins' oldest plugins.</p> </div> <hr> <div class="sect2"> <h3 id="so-whats-new"><a class="anchor" href="#so-whats-new" />So what’s new?</h3> <div class="paragraph"> <p><strong>New user interface</strong></p> </div> <div class="paragraph"> <p>The plugin has been redesigned to make test results easier to understand at a glance. Pages have been streamlined, components simplified and standardized, and the overall experience given a major cleanup.</p> </div> <div class="paragraph"> <p>Test names are split more intuitively, based on method, class, and package. This makes scanning large test suites easier.</p> </div> <div class="paragraph"> <p>Stacktraces are now also syntax-highlighted for better readability, and they can now be copied with a single click.</p> </div> <div class="paragraph"> <p><strong>Responsive</strong></p> </div> <div class="paragraph"> <p>The interface now scales from the largest screen to the smallest, so you can check results even on the go.</p> </div> <div class="paragraph"> <p><strong>Moments of joy</strong></p> </div> <div class="paragraph"> <p>When all of your tests pass, enjoy <a href="https://ci.jenkins.io/job/Core/job/jenkins/job/master/lastSuccessfulBuild/testReport/">celebratory confetti</a>. Because we know the satisfaction of watching a suite go green after a stubborn failure.</p> </div> <hr> </hr> <div class="sect2"> <h3 id="available-now"><a class="anchor" href="#available-now" />Available now 🚀</h3> <div class="paragraph"> <p>The update is available now for users on Jenkins 2.504.3 and later.</p> </div> <div class="paragraph"> <p>See it in action in the <a href="https://ci.jenkins.io/job/Core/job/jenkins/job/master/lastUnstableBuild/testReport/">Jenkins core build on ci.jenkins.io</a>.</p> </div> <hr> <div class="paragraph"> <p>If you want to get involved in the UI and UX discussions of Jenkins join the <a href="https://www.jenkins.io/sigs/ux">User Experience SIG</a>.</p> </div> <div class="paragraph"> <p>Take advantage of new components and patterns in your plugin via the <a href="https://weekly.ci.jenkins.io/design-library/">Design Library</a>.</p> </div> <div class="paragraph"> <p>You can watch our monthly meetings on <a href="https://www.youtube.com/playlist?list=PLN7ajX_VdyaOnsIIsZHsv_fM9QhOcajWe">YouTube</a> and you can view in-progress work on <a href="https://github.com/jenkinsci/jenkins/pulls?q=is%3Apr+is%3Aopen+label%3Aweb-ui">GitHub</a>.</p> </div> </hr></div></div></hr></div> https:/www.jenkins.io/blog/2025/09/24/hacktoberfest-2025-intro/ Hacktoberfest 2025 2026-03-19T18:14:09+00:00 2025-09-24T00:00:00+00:00 krisstern The annual Hacktoberfest is back! Please join us as we celebrate and support open-source during the month of October. Contributors can earn badges and improve their open source contribution skills. The Jenkins project will participate once again in the event. We invite you to contribute to the Jenkins project but also, as maintainers, to welcome and help newcomers. Contributors This is what contributors need to know to participate and complete Hacktoberfest: Register on the event website anytime between September 15 and October 31 Pull requests can be made in any jenkinsci or jenkins-infra GitHub repository that’s participating in Hacktoberfest (look for the "hacktoberfest" topic in the repo) Project maintainers... <div class="paragraph"> <p><span class="image center"><img src="https://www.jenkins.io/images/hacktoberfest/hacktoberfest_2025_logo.svg" alt="Hacktoberfest" width="75%" /></span> </p> <div class="paragraph"> <p>The annual <a href="https://hacktoberfest.com/">Hacktoberfest</a> is back! Please join us as we celebrate and support open-source during the month of October. Contributors can earn badges and improve their open source contribution skills.</p> </div> <div class="paragraph"> <p>The Jenkins project will participate once again in the event. We invite you to contribute to the Jenkins project but also, as maintainers, to welcome and help newcomers.</p> </div> <div class="sect1"> <h2 id="contributors"><a class="anchor" href="#contributors" />Contributors</h2> <div class="sectionbody"> <div class="paragraph"> <p>This is what <strong>contributors</strong> need to know to participate and complete Hacktoberfest:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://hacktoberfest.com/">Register on the event website</a> anytime between September 15 and October 31</p> </li> <li> <p>Pull requests can be made in any <a href="https://github.com/jenkinsci/">jenkinsci</a> or <a href="https://github.com/jenkins-infra/">jenkins-infra</a> GitHub repository that’s participating in Hacktoberfest (look for the "hacktoberfest" topic in the repo)</p> </li> <li> <p>Project maintainers must accept your pull requests for them to count towards your total</p> </li> <li> <p>Have a total of 6 high-quality pull requests accepted between October 1 and October 31 to complete Hacktoberfest</p> </li> <li> <p>You will unlock a digital badge when you register for Hacktoberfest, and level it up with each of your 6 pull requests accepted during Hacktoberfest</p> </li> </ul> </div> <div class="paragraph"> <p>Jenkins’ specific details can be found on the <a href="https://www.jenkins.io/events/hacktoberfest/">Jenkins Hacktoberfest page</a>.</p> </div> <div class="paragraph"> <p>Some good resources for beginners can be found here:</p> </div> <div class="ulist"> <ul> <li> <p>Good first issues in Jenkins repositories:</p> <div class="ulist"> <ul> <li> <p><a href="https://github.com/search?q=org%3Ajenkinsci+label%3A%22good+first+issue%22+state%3Aopen&amp;type=issues/">jenkinsci</a></p> </li> <li> <p><a href="https://github.com/search?q=org%3Ajenkins-infra+label%3A%22good+first+issue%22+state%3Aopen&amp;type=issues/">jenkins-infra</a></p> </li> </ul> </div> </li> <li> <p>Intro to open source</p> <div class="ulist"> <ul> <li> <p>GitHub: <a href="https://opensource.guide/how-to-contribute/">How to contribute to Open Source</a></p> </li> <li> <p>DigitalOcean: <a href="https://www.digitalocean.com/community/tutorial-series/an-introduction-to-open-source/">Introduction to GitHub and Open Source Projects</a></p> </li> <li> <p>DigitalOcean: <a href="https://www.digitalocean.com/community/tutorials/what-is-open-source/">What is Open Source</a></p> </li> <li> <p>DigitalOcean: <a href="https://www.digitalocean.com/community/cheatsheets/how-to-use-git-a-reference-guide/">How to use Git: A Reference Guide</a></p> </li> </ul> </div> </li> <li> <p>Sharpen your skills</p> <div class="ulist"> <ul> <li> <p><a href="https://training.github.com/">GitHub training kit</a></p> </li> <li> <p>Understanding the <a href="https://docs.github.com/en/get-started/using-github/github-flow/">GitHub flow</a></p> </li> <li> <p><a href="https://www.digitalocean.com/community/tutorial-series/an-introduction-to-open-source/">Introduction to GitHub and Open-Source Projects</a></p> </li> <li> <p><a href="https://opensource.com/article/19/5/how-get-job-doing-open-source/">How to advance your career by contributing to open source projects</a></p> </li> <li> <p><a href="https://github.blog/developer-skills/github/how-to-write-the-perfect-pull-request/">How to write the perfect pull request</a></p> </li> <li> <p><a href="https://dev.to/chrissiemhrk/git-commit-message-5e21/">How to write a good commit message</a></p> </li> </ul> </div> </li> <li> <p>The “<a href="https://www.jenkins.io/doc/developer/tutorial-improve/">improve a plugin tutorial</a>” is an introduction to contributing to Jenkins.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="maintainers"><a class="anchor" href="#maintainers" />Maintainers</h2> <div class="sectionbody"> <div class="paragraph"> <p>Jenkins plugin maintainers can prepare for Hacktoberfest contributions by following these best practices:</p> </div> <div class="ulist"> <ul> <li> <p>Add the "hacktoberfest" topic to your repository to opt in to Hacktoberfest and indicate you’re looking for contributions. Only add the "hacktoberfest" topic to your repository if you are willing to promptly review Hacktoberfest pull requests</p> </li> <li> <p>Add a CONTRIBUTING.md file with contribution guidelines to your repository</p> </li> <li> <p>Apply the "good-first-issue" label to <a href="https://github.com/search?q=org%3Ajenkinsci+is%3Aissue+label%3Agood-first-issue+is%3Aopen&amp;type=issues/">GitHub issues</a> you want contributors to help with in your GitHub project</p> </li> <li> <p>Add the “newbie-friendly” label to <a href="https://issues.jenkins.io/issues/?filter=20847/">Jira issues</a> that are well suited to new contributors</p> </li> <li> <p>Choose issues that have a well-defined scope and are self-contained</p> </li> <li> <p>Be ready to review pull requests, accepting those that are valid by merging them, leaving an overall approving review, or by adding the "hacktoberfest-accepted" label</p> </li> <li> <p>Reject any spammy requests you receive by labeling them as "spam" and any other invalid contributions by closing them or labeling them as "invalid"</p> </li> </ul> </div> </div> </div></div> https:/www.jenkins.io/blog/2025/08/31/aarav-mahajan-gsoc-gradle-convention-plugin-for-jenkins-plugin-development/ Introducing the Gradle Convention Plugin for Jenkins Plugin Development 2026-03-19T18:14:09+00:00 2025-08-31T00:00:00+00:00 aaravmahajanofficial Building Jenkins plugins with Gradle just got easier! Meet the modern, Kotlin-first, and convention-based Jenkins Gradle Convention Plugin. Plugin development made effortless 🏄‍♂️🏎️. 🌀 Try it today on the Gradle Plugin Portal Today’s Jenkins Plugin Development Landscape Apache Maven remains the primary and officially recommended build tool for Jenkins plugin development, powering the vast majority of plugins in the ecosystem. Its strong integration with the Jenkins plugin parent POM, extensive documentation, and mature lifecycle support make it the safest and default choice for most developers. Gradle, while technically capable and widely adopted across the broader Java ecosystem, has seen limited adoption in the Jenkins community.... <div class="paragraph"> <p><strong>Building Jenkins plugins with Gradle just got easier!</strong><br> Meet the modern, Kotlin-first, and convention-based Jenkins Gradle Convention Plugin. Plugin development made effortless 🏄‍♂️🏎️.<br> 🌀 Try it today on the <a href="https://plugins.gradle.org/plugin/io.github.aaravmahajanofficial.jenkins-gradle-convention-plugin">Gradle Plugin Portal</a></br> </br> <div class="sect1"> <h2 id="todays-jenkins-plugin-development-landscape"><a class="anchor" href="#todays-jenkins-plugin-development-landscape" />Today’s Jenkins Plugin Development Landscape</h2> <div class="sectionbody"> <div class="paragraph"> <p>Apache Maven remains the primary and officially recommended build tool for Jenkins plugin development, powering the vast majority of plugins in the ecosystem. Its strong integration with the Jenkins plugin parent POM, extensive documentation, and mature lifecycle support make it the safest and default choice for most developers.</p> </div> <div class="paragraph"> <p>Gradle, while technically capable and widely adopted across the broader Java ecosystem, has seen limited adoption in the Jenkins community. It offers powerful advantages, including:</p> </div> <div class="ulist"> <ul> <li> <p>Extensible build logic defined in code rather than rigid XML.</p> </li> <li> <p>Faster build times with incremental builds, caching, and the Gradle Daemon.</p> </li> <li> <p>A developer-friendly experience with Kotlin and Groovy DSLs, plus interactive tooling.</p> </li> <li> <p><a href="https://docs.gradle.org/current/samples/sample_convention_plugins.html"><strong>Convention Plugins</strong></a> — a powerful way to share and reuse standardized build logic across projects. They can be combined like traits, much like multiple or diamond inheritance in OOP. In contrast, Maven’s parent POM model only allows a single parent (since Maven 3), forcing developers to rely on heavy profile usage and boilerplate.</p> </li> </ul> </div> <div class="paragraph"> <p>Despite these strengths, Jenkins plugin development continues to be dominated by Maven. The primary reasons are that the core build infrastructure, tooling ecosystem, and CI pipelines are deeply aligned with Maven conventions.</p> </div> <div class="paragraph"> <p>The following table highlights some key differences between Maven and Gradle in the context of Jenkins plugin development.</p> </div> <div class="imageblock"> <div class="content"> <img src="https://www.jenkins.io/images/post-images/2025/08/aaravmahajan/jenkins-plugin-with-maven-vs-gradle.png" alt="Comparison table showing differences between Maven and Gradle for Jenkins plugin development"> </img> </div> </div> </div> <div class="sect1"> <h2 id="motivation"><a class="anchor" href="#motivation" />Motivation</h2> <div class="sectionbody"> <div class="paragraph"> <p>In late 2022, the Jenkins community identified significant gaps in Gradle support for plugin hosting and automation. At that time, new open source Jenkins plugins using Gradle were even blocked from hosting until those requirements were addressed.</p> </div> <div class="paragraph"> <p>This sparked discussions and community initiatives to close the gaps. The <strong>Jenkins Gradle Convention Plugin</strong> is a direct outcome of that effort, providing a standardized and supported way to build Jenkins plugins with Gradle.</p> </div> </div> </div> <div class="sect1"> <h2 id="where-the-gradle-jpi-plugin-falls-short"><a class="anchor" href="#where-the-gradle-jpi-plugin-falls-short" />Where the Gradle JPI Plugin falls short ?</h2> <div class="sectionbody"> <div class="paragraph"> <p>The <a href="https://github.com/jenkinsci/gradle-jpi-plugin">Gradle JPI Plugin</a> provides a Maven-free path for Jenkins plugin development, but it falls short in matching the full Maven-based experience. Key limitations include:</p> </div> <div class="ulist"> <ul> <li> <p><span class="icon"><i class="fa fa-times" title="Cross" /></span> <strong>Non-compliance with Jenkins hosting requirements</strong> → blocks acceptance</p> </li> <li> <p><span class="icon"><i class="fa fa-times" title="Cross" /></span> <strong>No <a href="https://github.com/jenkinsci/plugin-compat-tester">Plugin Compatibility Tester (PCT)</a> support</strong> → weak cross-version testing</p> </li> <li> <p><span class="icon"><i class="fa fa-times" title="Cross" /></span> <strong>Dependency management &amp; BOM gaps</strong> → unreliable builds</p> </li> <li> <p><span class="icon"><i class="fa fa-times" title="Cross" /></span> <strong>Outdated Groovy-based codebase</strong> → harder to maintain</p> </li> <li> <p><span class="icon"><i class="fa fa-times" title="Cross" /></span> <strong>No convention plugin</strong> → developers face more configuration overhead</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="meet-the-jenkins-gradle-convention-plugin"><a class="anchor" href="#meet-the-jenkins-gradle-convention-plugin" />Meet the Jenkins Gradle Convention Plugin</h2> <div class="sectionbody"> <div class="paragraph"> <p>A Kotlin-first, Gradle convention plugin that acts as the Maven Parent POM equivalent for Jenkins plugin development with Gradle. Built on top of the well-established <code>gradle-jpi-plugin</code>, it provides a unified, opinionated foundation for building, testing, and publishing Jenkins plugins—standardizing best practices, automating quality checks, and eliminating boilerplate.</p> </div> <div class="admonitionblock note"> <table> <tr> <td class="icon"> <i class="fa icon-note" title="Note" /> </td> <td class="content"> A new “JPI2” variant of the Gradle JPI Plugin was introduced by Rahul and Steve, adding support for Gradle 8+, improved dependency handling, and a modern architecture. The gradle convention plugin is designed to be forward-compatible, once JPI2 APIs stabilize, we plan to migrate the convention plugin to leverage it for an even better experience. </td> </tr> </table> </div> <div class="paragraph"> <p>Built by me, as part of <strong>Google Summer of Code (GSoC) 2025</strong> in collaboration with <strong>Gradle</strong>, <strong>Netflix</strong>, and the <strong>Kotlin Foundation</strong>, under the expert mentorship of <a href="https://github.com/oleg-nenashev">Oleg Nenashev</a>, <a href="https://github.com/sghill">Steve Hill</a> and <a href="https://github.com/rahulsom">Rahul Somasunderam</a>. Their mentorship has been invaluable, and the plugin continues to be actively maintained.</p> </div> </div> </div> <div class="sect1"> <h2 id="what-it-brings"><a class="anchor" href="#what-it-brings" />What it brings ?</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><span class="icon"><i class="fa fa-check" title="Check" /></span> <strong>Modern language standards enforcement</strong>: Minimal/Zero configuration, maximum productivity for Java, Kotlin, and Groovy</p> </li> <li> <p><span class="icon"><i class="fa fa-check" title="Check" /></span> <strong>Jenkins Hosting Compliance</strong>: PCT support, metadata, and structure all handled</p> </li> <li> <p><span class="icon"><i class="fa fa-check" title="Check" /></span> <strong>Smart dependency management</strong>: Automatic BOM alignment and zero version conflicts -<br> say goodbye to <a href="https://en.wikipedia.org/wiki/Dependency_hell"><em>Dependency Hell</em></a></br> </p> <li> <p><span class="icon"><i class="fa fa-check" title="Check" /></span> <strong>Quality gates &amp; reporting</strong>: Pre-configured tools with unified, CI-ready reports</p> </li> <li> <p><span class="icon"><i class="fa fa-check" title="Check" /></span> <strong>Modern testing ecosystem</strong>: Ready-to-use test stack with optimized execution for reliable, fast Jenkins plugin testing</p> </li> <li> <p><span class="icon"><i class="fa fa-check" title="Check" /></span> <strong>Configuration &amp; extensibility</strong>: Flexible DSL or properties-based setup for multi-module projects</p> </li> <li> <p><span class="icon"><i class="fa fa-check" title="Check" /></span> <strong>Future-Proof</strong>: Embraces Gradle 9 best practices like Configuration Cache, Version Catalogs, and caching</p> </li> </li> </ul> </div> </div> <div class="sect1"> <h2 id="getting-started-in-seconds"><a class="anchor" href="#getting-started-in-seconds" />Getting started in seconds</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><strong>Step 1</strong>: Define the plugin in the project’s <code>libs.versions.toml</code> file</p> </li> </ul> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="toml"><span class="nn">[versions]</span> <span class="py">jenkinsConvention</span> <span class="p">=</span> <span class="s">"&lt;LATEST_VERSION&gt;"</span> <span class="nn">[plugins]</span> <span class="py">jenkinsConvention</span> <span class="o">=</span> <span class="p">{</span> <span class="py">id</span> <span class="p">=</span> <span class="s">"io.github.aaravmahajanofficial.jenkins-gradle-convention-plugin"</span><span class="p">,</span> <span class="py">version.ref</span> <span class="p">=</span> <span class="s">"jenkinsConvention"</span> <span class="p">}</span></code></pre> </div> </div> <div class="ulist"> <ul> <li> <p><strong>Step 2</strong>: Configure the Version Catalog</p> </li> </ul> </div> <div class="paragraph"> <p>In the root <code>settings.gradle.kts`</code>, add the plugin’s version catalog:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="kotlin"><span class="nf">dependencyResolutionManagement</span> <span class="p">{</span> <span class="nf">repositories</span> <span class="p">{</span> <span class="nf">mavenCentral</span><span class="p">()</span> <span class="p">}</span> <span class="nf">versionCatalogs</span> <span class="p">{</span> <span class="nf">create</span><span class="p">(</span><span class="s">"baseLibs"</span><span class="p">)</span> <span class="p">{</span> <span class="nf">from</span><span class="p">(</span><span class="s">"io.github.aaravmahajanofficial:version-catalog:&lt;LATEST_VERSION&gt;"</span><span class="p">)</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span></code></pre> </div> </div> <div class="ulist"> <ul> <li> <p><strong>Step 3</strong>: Basic Build Script</p> </li> </ul> </div> <div class="paragraph"> <p>In the root <code>build.gradle.kts</code>, add the following:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="kotlin"><span class="nf">plugins</span> <span class="p">{</span> <span class="nf">alias</span><span class="p">(</span><span class="n">libs</span><span class="p">.</span><span class="n">plugins</span><span class="p">.</span><span class="n">jenkinsConvention</span><span class="p">)</span> <span class="p">}</span> <span class="nf">jenkinsConvention</span> <span class="p">{</span> <span class="c1">// Only override the defaults that need to be customized for your plugin.</span> <span class="c1">// Set the Jenkins version (default: as per version catalog).</span> <span class="n">jenkinsVersion</span> <span class="p">=</span> <span class="s">"2.525"</span> <span class="p">}</span></code></pre> </div> </div> <div class="paragraph"> <p>That’s it! <span class="icon"><i class="fa fa-smile-o" title="Smile" /></span> Enjoy pre-configured tools, synced BOMs, PCT support, and ready-to-go compliance checks.</p> </div> </div> </div> <div class="sect1"> <h2 id="roadmap"><a class="anchor" href="#roadmap" />Roadmap</h2> <div class="sectionbody"> <div class="paragraph"> <p>Next steps for plugin delivery and integration:</p> </div> <div class="ulist"> <ul> <li> <p>Support continuous delivery for Jenkins plugins</p> </li> <li> <p>Integrate seamlessly with Jenkins pipelines (e.g., <a href="https://github.com/jenkins-infra/pipeline-library/blob/master/vars/buildPluginWithGradle.groovy"><code>buildPluginWithGradle</code></a> for CI)</p> </li> <li> <p>Migrate to Gradle JPI2 Plugin once new APIs stabilize</p> </li> </ul> </div> <div class="paragraph"> <p>I invite all the Jenkins community developers - especially maintainers of Gradle-based plugins - to try it out, provide feedback, and help refine it into a stable toolchain that benefits all. Contributions, real-world testing, and discussions are very welcome <span class="icon"><i class="fa fa-coffee" title="Coffee" /></span>.</p> </div> </div> </div> <div class="sect1"> <h2 id="learn-more"><a class="anchor" href="#learn-more" />Learn more</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://kotlinlang.org/docs/gsoc-2025.html#gradle-convention-plugin-for-developing-jenkins-plugins-easy-to-hard-90-hrs-to-350-hrs">Project Idea Page</a></p> </li> <li> <p><a href="https://community.gradle.org/events/gsoc/2025/jenkins-plugins-toolchain">My Project Page</a></p> </li> <li> <p><a href="https://docs.google.com/document/d/1W-_rDWrnHSgV3fGdQWSryOmym15e9TEoHlBvQJysJgw/edit?usp=sharing">My Proposal</a></p> </li> <li> <p><a href="https://github.com/aaravmahajanofficial/jenkins-gradle-convention-plugin">GitHub Repository</a></p> </li> <li> <p>Official Slack Channel - <a href="https://gradle-community.slack.com/archives/C08S0GKMB5G"><strong><code>#jenkins-plugin-toolchain</code></strong></a></p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="concluding-with-the-elephant"><a class="anchor" href="#concluding-with-the-elephant" />Concluding with the Elephant 🐘</h2> <div class="sectionbody"> <div class="paragraph"> <p>This plugin isn’t just another build tool tweak—it’s about making Gradle a <em>first-class</em> citizen in Jenkins plugin development. Let’s bring modern productivity engineering to the Jenkins ecosystem.</p> </div> <div class="paragraph"> <p><strong>Thanks for reading!</strong> <span class="icon"><i class="fa fa-star" title="Star" /></span> <strong>Star or contribute to the repo if you found this useful.</strong></p> </div> </div> </div></div></div></p></div> https:/www.jenkins.io/blog/2025/08/30/raunak-madan-gsoc-endterm-blog-post/ GSoC 2025 Endterm - Improving Plugin Modernizer 2026-03-19T18:14:09+00:00 2025-08-30T00:00:00+00:00 Hello everyone, This blog showcases the work done on the Plugin Modernizer Tool during Google Summer of Code 2025. For a detailed description of the project, please refer to the project page. Table of Contents About the Project Phase 1 Phase 2 Next Steps Acknowledgements Useful Links About the Project The project aims to extract modernization metadata, such as whether the modernization was successful and what PR it generated for the plugin, etc. It helps to track the impact of the plugin-modernizer-tool, the success and failure rate of the modernization. We aim to extract the metadata and push to a public repository with additional actions over there, validating the changes. Additionally, we... <div class="paragraph"> <p>Hello everyone,</p> </div> <div class="paragraph"> <p>This blog showcases the work done on the <a href="https://github.com/jenkins-infra/plugin-modernizer-tool">Plugin Modernizer Tool</a> during Google Summer of Code 2025. For a detailed description of the project, please refer to the <a href="https://www.jenkins.io/projects/gsoc/2025/projects/plugin-modernizer-improvements/">project page</a>.</p> </div> <div class="sect1"> <h2 id="table-of-contents"><a class="anchor" href="#table-of-contents" />Table of Contents</h2> <div class="sectionbody"> <div class="olist arabic"> <ol class="arabic"> <li> <p><a href="#about-the-project">About the Project</a></p> </li> <li> <p><a href="#phase-1">Phase 1</a></p> </li> <li> <p><a href="#phase-2">Phase 2</a></p> </li> <li> <p><a href="#next-steps">Next Steps</a></p> </li> <li> <p><a href="#acknowledgements">Acknowledgements</a></p> </li> <li> <p><a href="#useful-links">Useful Links</a></p> </li> </ol> </div> </div> </div> <div class="sect1"> <h2 id="about-the-project"><a class="anchor" href="#about-the-project" />About the Project</h2> <div class="sectionbody"> <div class="paragraph"> <p>The project aims to extract modernization metadata, such as whether the modernization was successful and what PR it generated for the plugin, etc. It helps to track the impact of the <a href="https://github.com/jenkins-infra/plugin-modernizer-tool">plugin-modernizer-tool</a>, the success and failure rate of the modernization.</p> </div> <div class="paragraph"> <p>We aim to extract the metadata and push to a public repository with additional actions over there, validating the changes. Additionally, we extract comprehensive reports on applied recipes and plugin migrations to provide a high-level overview.</p> </div> </div> </div> <div class="sect1"> <h2 id="phase-1"><a class="anchor" href="#phase-1" />Phase 1</h2> <div class="sectionbody"> <div class="paragraph"> <p>In this phase, we accomplished the following tasks:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Automatic Extraction of Modernization Metadata:</strong> Record migration status, pull request URL and status, check runs information, and more.</p> </li> <li> <p><strong>Metadata Publishing:</strong> Automatically pushes metadata to a public repository — <a href="https://github.com/jenkins-infra/metadata-plugin-modernizer/">metadata-plugin-modernizer</a>.</p> </li> <li> <p><strong>GitHub Action Workflows:</strong></p> <div class="ulist"> <ul> <li> <p>Validate incoming metadata and auto-merge PRs.</p> </li> <li> <p>Dynamically update metadata.</p> </li> <li> <p>Consolidate metadata for each plugin.</p> </li> <li> <p>Generate comprehensive reports on applied recipes and plugin migrations to provide a high-level overview.</p> </li> </ul> </div> </li> </ul> </div> <div class="paragraph"> <p>Check out the demonstration of the tool from the <a href="https://www.jenkins.io/projects/gsoc/#gsoc-2025">Jenkins in Google Summer of Code page</a>.</p> </div> </div> </div> <div class="sect1"> <h2 id="phase-2"><a class="anchor" href="#phase-2" />Phase 2</h2> <div class="sectionbody"> <div class="paragraph"> <p>In this phase, we accomplished the following tasks:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Created and Improved Recipes:</strong> Added new recipes such as <code>Migrate to Java 25</code>, <code>Migrate Commons Lang 2 to Lang 3 and Commons Text</code>, and improved the <code>Migrate to JUnit 5</code> recipe.</p> </li> <li> <p><strong>Bug Fixes:</strong> Resolved minor bugs.</p> </li> <li> <p><strong>Documentation</strong>: Updated the documentation to be more beginner-friendly.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="next-steps"><a class="anchor" href="#next-steps" />Next Steps</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p>Push the consolidated metadata and the reports to the <a href="https://reports.jenkins.io/">Jenkins reports site</a>.</p> </li> <li> <p>Visualizing the metadata on the <a href="https://stats.jenkins.io/">Jenkins statistics site</a>.</p> </li> <li> <p>Automate Running Recipes on Plugins with Low Health Scores.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="acknowledgements"><a class="anchor" href="#acknowledgements" />Acknowledgements</h2> <div class="sectionbody"> <div class="paragraph"> <p>A huge thank you to my mentors, <a href="https://www.jenkins.io/blog/authors/jonesbusy">Valentin Delaye</a>, <a href="https://www.jenkins.io/blog/authors/gounthar">Bruno Verachten</a>, <a href="https://www.jenkins.io/blog/authors/sridamul">Sridhar Sivakumar</a>, <a href="https://www.jenkins.io/blog/authors/TheMeinerLP">Phillipp Glanz</a>, for their constant support, refining the approach, and timely reviews throughout the journey. They were a great reason for making this a success.</p> </div> <div class="paragraph"> <p>I’d also like to thank the organization admins <a href="https://www.jenkins.io/blog/authors/krisstern">Kris Stern</a>, <a href="https://www.jenkins.io/blog/authors/gounthar">Bruno Verachten</a>, and <a href="https://www.jenkins.io/blog/authors/alyssat">Alyssa Tong</a> for always checking in and offering help, your kindness and support mean a lot.</p> </div> </div> </div> <div class="sect1"> <h2 id="useful-links"><a class="anchor" href="#useful-links" />Useful Links</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/jenkins-infra/plugin-modernizer-tool">Plugin Modernizer Tool</a></p> </li> <li> <p><a href="https://github.com/jenkins-infra/metadata-plugin-modernizer/">Metadata Repository</a></p> </li> <li> <p><a href="https://docs.google.com/document/d/1QaEa4lvjdMi3JRXBOAN2eD2cjJkJ1-bfU-XHg4dlI0s/edit?tab=t.0">Project Proposal</a></p> </li> <li> <p><a href="https://cdeliveryfdn.slack.com/archives/C071YTZ807N">Project Slack Channel</a></p> </li> <li> <p><a href="https://sedate-marscapone-74c.notion.site/208fcbf0cc328028b936c73963de640b?v=208fcbf0cc3280dd8f94000c986ac3a3">Weekly Meetings</a></p> </li> <li> <p><a href="https://sedate-marscapone-74c.notion.site/GSoC-Jenkins-Improving-Plugin-Modernizer-206fcbf0cc328085b44ffefae8f232e8">Daily Progress/Notes</a></p> </li> <li> <p><a href="https://www.youtube.com/playlist?list=PLN7ajX_VdyaM-aDF6haC55MT7mh_kyB_1">Jenkins GSoC 2025 Playlist </a></p> </li> </ul> </div> <div class="paragraph"> <p>Reflecting back it was a really great experience with Jenkins, which enabled me to learn new skills, mindset, and make meaningful contributions. Looking forward to continue contributing at Jenkins in the future.</p> </div> </div> </div> https:/www.jenkins.io/blog/2025/08/08/board-officer-election-announcement/ Jenkins Board and Officer Elections 2025 - Nominations Open 2026-03-19T18:14:09+00:00 2025-08-08T00:00:00+00:00 We are excited to announce the 2025 Jenkins Governance Board and Officer elections! Nominations Nominations can be submitted for governance board positions and all officer positions (Security, Events, Release, Infrastructure, and Documentation). During the registration period, we invite community members to nominate candidates by sending a message to the election-committee group. In your message, please include the name of the nominee, the specific position and your reasons for nominating that person. A tutorial is available that shows the steps to nominate a candidate. The nomination period ends on September 22. Nominees will be notified and asked to confirm that they are interested in running as a candidate. The... <div class="paragraph"> <p><strong>We are excited to announce the 2025 Jenkins Governance Board and Officer elections!</strong></p> </div> <div class="sect1"> <h2 id="nominations"><a class="anchor" href="#nominations" />Nominations</h2> <div class="sectionbody"> <div class="paragraph"> <p>Nominations can be submitted for <a href="https://www.jenkins.io/project/board/">governance board</a> positions and all <a href="https://www.jenkins.io/project/team-leads/">officer</a> positions (<a href="https://www.jenkins.io/project/team-leads/#security">Security</a>, <a href="https://www.jenkins.io/project/team-leads/#events">Events</a>, <a href="https://www.jenkins.io/project/team-leads/#release">Release</a>, <a href="https://www.jenkins.io/project/team-leads/#infrastructure">Infrastructure</a>, and <a href="https://www.jenkins.io/project/team-leads/#documentation">Documentation</a>).</p> </div> <div class="paragraph"> <p>During the registration period, we invite community members to nominate candidates by sending a message to the <a href="https://community.jenkins.io/g/election-committee">election-committee</a> group. In your message, please include the name of the nominee, the specific position and your reasons for nominating that person. A tutorial is available that shows the steps to <a href="https://www.jenkins.io/project/election-walkthrough/#nominate-a-candidate">nominate a candidate</a>.</p> </div> <div class="paragraph"> <p>The nomination period ends on <strong>September 22</strong>. Nominees will be notified and asked to confirm that they are interested in running as a candidate. The list of candidates will be announced on September 23.</p> </div> <div class="paragraph"> <p><strong>Anyone can nominate anyone as a candidate!</strong></p> </div> <div class="paragraph"> <p>Many thanks to <a href="https://www.jenkins.io/blog/authors/markewaite/">Mark Waite</a> and <a href="https://www.jenkins.io/blog/authors/basil/">Basil Crow</a> for serving on the <a href="https://www.jenkins.io/project/board/">Jenkins Governance Board</a>. We also want to thank <a href="https://www.jenkins.io/blog/authors/dduportal/">Damien Duportal</a> as <a href="https://www.jenkins.io/project/team-leads/#infrastructure">Infrastructure Officer</a>, <a href="https://www.jenkins.io/blog/authors/wadeck/">Wadeck Follonier</a> as <a href="https://www.jenkins.io/project/team-leads/#security">Security Officer</a>, <a href="https://www.jenkins.io/blog/authors/alyssat/">Alyssa Tong</a> as <a href="https://www.jenkins.io/project/team-leads/#events">Events Officer</a>, <a href="https://www.jenkins.io/blog/authors/timja/">Tim Jacomb</a> as <a href="https://www.jenkins.io/project/team-leads/#release">Release Officer</a>, and <a href="https://www.jenkins.io/blog/authors/kmartens27/">Kevin Martens</a> as <a href="https://www.jenkins.io/project/team-leads/#documentation">Documentation Officer</a> for all of their work over the last term.</p> </div> </div> </div> <div class="sect1"> <h2 id="the-election-consists-of-4-phases"><a class="anchor" href="#the-election-consists-of-4-phases" />The election consists of 4 phases:</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p>Nomination of candidates (August 8 - September 22)</p> </li> <li> <p>Voter registration (September 16 - October 31)</p> </li> <li> <p>Voting (November 1 - November 30)</p> </li> <li> <p>Results announcement (December 1)</p> </li> </ul> </div> <div class="sect2"> <h3 id="voting"><a class="anchor" href="#voting" />Voting</h3> <div class="paragraph"> <p>Participation in the election process requires registering an account on the <a href="https://community.jenkins.io">Jenkins community forums</a> and at least one contribution made before September 1, 2025. When registering, you can use an existing GitHub account or create a new account specifically for <a href="https://community.jenkins.io">Jenkins community forums</a>. We ask all community members who are interested in voting and meet the requirements to join the <a href="https://community.jenkins.io/g/election-voter-2025">election-voter-2025</a> group during the registration period. Previous elections utilized their own groups, so joining the <a href="https://community.jenkins.io/g/election-voter-2025">election-voter-2025</a> group is required for participation.</p> </div> <div class="paragraph"> <p>We have made the decision to trust participants and not require that you provide evidence of contribution as part of your voter registration. We reserve the right to ban any account from the election process if we identify abuse. Once registration is over, a list of email addresses will be sent to the <a href="https://civs1.civs.us/">Condorcet Internet Voting Service (CIVS)</a>.</p> </div> </div> <div class="sect2"> <h3 id="contributing"><a class="anchor" href="#contributing" />Contributing</h3> <div class="paragraph"> <p>As shown on the <a href="https://www.jenkins.io/participate/">Participate and Contribute</a> page, there are many different ways to contribute to Jenkins. You can contribute by:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://www.jenkins.io/participate/connect/">Connecting with the community</a></p> </li> <li> <p><a href="https://www.jenkins.io/participate/meet/">Joining or organizing a meetup</a></p> </li> <li> <p><a href="https://www.jenkins.io/participate/code/">Contributing code to Jenkins</a></p> </li> <li> <p><a href="https://www.jenkins.io/participate/help/">Helping Jenkins users</a></p> </li> <li> <p><a href="https://www.jenkins.io/doc/developer/internationalization/">Translating Jenkins resources</a></p> </li> <li> <p><a href="https://www.jenkins.io/participate/test/">Testing Jenkins core and plugins</a></p> </li> <li> <p><a href="https://www.jenkins.io/participate/document/">Contributing to Jenkins documentation</a></p> </li> <li> <p><a href="https://www.jenkins.io/participate/design/">Creating art or updating the Jenkins UI</a></p> </li> <li> <p><a href="https://www.jenkins.io/participate/review-changes/">Reviewing open pull requests</a></p> </li> <li> <p><a href="https://www.jenkins.io/donate/">Donating to Jenkins</a></p> </li> </ul> </div> <div class="paragraph"> <p>All contributions to Jenkins and its community are welcome</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="election"><a class="anchor" href="#election" />Election</h2> <div class="sectionbody"> <div class="paragraph"> <p>Candidates will be announced September 23. Voter registration closes on October 31. Voting begins November 1. Registered voters will be notified by email to participate using the <a href="https://civs1.civs.us/">Condorcet Internet Voting System</a>. All votes must be submitted by end of day November 30.</p> </div> </div> </div> <div class="sect1"> <h2 id="results"><a class="anchor" href="#results" />Results</h2> <div class="sectionbody"> <div class="paragraph"> <p>Election results will be published December 1. The new term starts on December 1, when the newly elected members will transition to their roles.</p> </div> </div> </div> <div class="sect1"> <h2 id="important-dates"><a class="anchor" href="#important-dates" />Important Dates</h2> <div class="sectionbody"> <table class="tableblock frame-all grid-all stretch"> <colgroup> <col style="width: 50%;"> <col style="width: 50%;"> </col> <thead> <tr> <th class="tableblock halign-left valign-top">Important Dates</th> <th class="tableblock halign-left valign-top">Time</th> </tr> </thead> <tbody> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock">Nomination of candidates open</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">August 8</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock">Voter registration opens</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">September 16</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock">Nomination of candidates closes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">September 22</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock">Candidates announced</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">September 23</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock">Voter registration closes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">October 31</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock">Voting starts</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">November 1</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock">Voting closes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">November 30</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock">Results announced</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">December 1</p></td> </tr> </tbody> </col> </colgroup> </table> <div class="sect1"> <h2 id="troubleshooting"><a class="anchor" href="#troubleshooting" />Troubleshooting</h2> <div class="sectionbody"> <div class="paragraph"> <p>If you are new to Jenkins elections, unfamiliar with the Condorcet Internet Voting Service (CIVS) or the community forums, or feel overwhelmed with the process, don’t worry, we’ve got you covered. We published a <a href="https://www.jenkins.io/project/election-walkthrough/">step-by-step guide</a>, outlining how to to join the <a href="https://community.jenkins.io/g/election-voter-2025">election-voter-2025</a>, activate your CIVS account and cast your vote.</p> </div> <div class="paragraph"> <p>If you encounter issues still or need assistance, don’t hesitate to contact the <a href="https://community.jenkins.io/g/election-committee">election committee</a>.</p> </div> <div class="paragraph"> <p>Thank you, as always, and don’t forget to register to vote by October 31!</p> </div> </div> </div></div></div> https:/www.jenkins.io/blog/2025/08/04/update-center-enforce-https/ Enforced HTTPS for Update Center 2026-03-19T18:14:09+00:00 2025-08-04T00:00:00+00:00 Summary (TL;DR) The service https://updates.jenkins.io will enforce HTTPS protocol beginning Wednesday 06 August 2025. All Jenkins users are impacted but should not see any functional change. Any plain-HTTP request made to the Jenkins update center will be redirected to the same location but upgraded to HTTPS scheme. What is the "Update Center"? Jenkins Update Center is a web server at the core of the Jenkins public infrastructure that distributes the plugins, tool installers, and versions index to all Jenkins servers across the world. From the installation wizard to regular plugin updates, if you run Jenkins, then you use this service under the hood. Today, it serves around... <div class="sect1"> <h2 id="summary-tldr"><a class="anchor" href="#summary-tldr" />Summary (<a href="https://en.wikipedia.org/wiki/Wikipedia:Too_long;_didn%27t_read">TL;DR</a>)</h2> <div class="sectionbody"> <div class="paragraph"> <p>The service <a href="https://updates.jenkins.io">https://updates.jenkins.io</a> will enforce HTTPS protocol beginning Wednesday 06 August 2025.</p> </div> <div class="paragraph"> <p>All Jenkins users are impacted but should not see any functional change.</p> </div> <div class="paragraph"> <p>Any plain-HTTP request made to the Jenkins update center will be redirected to the same location but upgraded to HTTPS scheme.</p> </div> </div> </div> <div class="sect1"> <h2 id="what-is-the-update-center"><a class="anchor" href="#what-is-the-update-center" />What is the "Update Center"?</h2> <div class="sectionbody"> <div class="paragraph"> <p>Jenkins <a href="https://updates.jenkins.io">Update Center</a> is a web server at the core of the Jenkins public infrastructure that distributes the plugins, tool installers, and versions index to all Jenkins servers across the world.</p> </div> <div class="paragraph"> <p>From the installation wizard to regular plugin updates, if you run Jenkins, then you use this service under the hood.</p> </div> <div class="paragraph"> <p>Today, it serves around 50 Tb of data (outbound bandwidth) each month from a network of mirrors spread across 3 cloud providers and 2 continents.</p> </div> <div class="paragraph"> <p>Additional information is available in the <a href="https://github.com/jenkins-infra/helpdesk/issues/4758">GitHub issue</a>.</p> </div> </div> </div> <div class="sect1"> <h2 id="what-does-it-change-for-me"><a class="anchor" href="#what-does-it-change-for-me" />What Does It Change for Me?</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p>Short answer: <strong>Nothing</strong></p> <div class="ulist"> <ul> <li> <p>Since October 2024 with <a href="https://www.jenkins.io/changelog-old/#v2.480">Jenkins Weekly 2.480</a> and <a href="https://www.jenkins.io/changelog-stable/#v2.479.1">Jenkins LTS 2.479.1</a>, Jenkins automatically migrates the Update Center URL from HTTP to HTTPS.</p> </li> </ul> </div> </li> <li> <p>Long answer:</p> <div class="ulist"> <ul> <li> <p>Your Jenkins controllers should already be using HTTPS for the Update Center since January 2025.</p> </li> <li> <p>Any other tool or old configuration using the plain-HTTP requests will be redirected to HTTPS.</p> </li> <li> <p>If you are still using a Jenkins version released before 2025 with an old Update Center configuration:</p> <div class="ulist"> <ul> <li> <p>In the Web Interface: browse to "Manage Jenkins" &gt; "Plugins" &gt; "Advanced settings" and click the "Reset" link in the "Update site" section to automatically update the outdated URL.</p> </li> <li> <p>Or replace <code>http://</code> by <code>https://</code> in your Jenkins Configuration as Code.</p> </li> </ul> </div> </li> </ul> </div> </li> </ul> </div> </div> </div> https:/www.jenkins.io/blog/2025/08/03/chirag-gupta-gsoc-community-bonding-blog-post/ GSoC 2025 Midterm - An AI Agent for Jenkins Failure Diagnosis 2026-03-19T18:14:09+00:00 2025-08-03T00:00:00+00:00 Hello, Jenkins Community! I’m Chirag Gupta, and this is the midterm update for my Google Summer of Code 2025 project: "Domain-specific LLM based on actual Jenkins usage using ci.jenkins.io data. The project’s vision is to accelerate the often complex process of diagnosing build failures in Jenkins using AI. For a detailed overview, please refer to the project page. We’ve just crossed the midterm evaluations, so I’d like to share a progress update on the project. Table of Contents The Pivot: From Fine-Tuning to a Flexible Agentic System Midterm Accomplishments: A Functional Prototype What’s Next? The Road to the Target Architecture Acknowledgements The Pivot: From Fine-Tuning to a Flexible Agentic... <div class="paragraph"> <p>Hello, Jenkins Community!</p> </div> <div class="paragraph"> <p>I’m Chirag Gupta, and this is the midterm update for my Google Summer of Code 2025 project: <strong>"Domain-specific LLM based on actual Jenkins usage using ci.jenkins.io data</strong>. The project’s vision is to accelerate the often complex process of diagnosing build failures in Jenkins using AI.</p> </div> <div class="paragraph"> <p>For a detailed overview, please refer to the <a href="https://www.jenkins.io/projects/gsoc/2025/projects/domain-specific-LLM-based-on-jenkins-usage-using-ci-jenkins-io-data/">project page</a>.</p> </div> <div class="paragraph"> <p>We’ve just crossed the midterm evaluations, so I’d like to share a progress update on the project.</p> </div> <div class="sect1"> <h2 id="table-of-contents"><a class="anchor" href="#table-of-contents" />Table of Contents</h2> <div class="sectionbody"> <div class="olist arabic"> <ol class="arabic"> <li> <p><a href="#the-pivot-from-fine-tuning-to-a-flexible-agentic-system">The Pivot: From Fine-Tuning to a Flexible Agentic System</a></p> </li> <li> <p><a href="#midterm-accomplishments-a-functional-prototype">Midterm Accomplishments: A Functional Prototype</a></p> </li> <li> <p><a href="#whats-next-the-road-to-the-target-architecture">What’s Next? The Road to the Target Architecture</a></p> </li> <li> <p><a href="#acknowledgements">Acknowledgements</a></p> </li> </ol> </div> </div> </div> <div class="sect1"> <h2 id="the-pivot-from-fine-tuning-to-a-flexible-agentic-system"><a class="anchor" href="#the-pivot-from-fine-tuning-to-a-flexible-agentic-system" />The Pivot: From Fine-Tuning to a Flexible Agentic System</h2> <div class="sectionbody"> <div class="paragraph"> <p>One of the most significant developments has been a pivot from the original goal of fine-tuning one or more LLMs, to building a more future-proof and universal agentic architecture.</p> </div> <div class="paragraph"> <p>Why the change?</p> </div> <div class="ulist"> <ul> <li> <p><strong>Flexibility &amp; User Choice:</strong> A single fine-tuned model locks users in. Our new agentic framework allows users to plug in any capable LLM, from cloud services like OpenAI and Claude to self-hosted models.</p> </li> <li> <p><strong>Future-Proofing:</strong> A specialized, fine-tuned model for Jenkins is still a future goal, but it can now be integrated as just one of many options within the agent, rather than being the entire system.</p> </li> <li> <p><strong>Extensibility:</strong> The agent’s capabilities are now defined by its tools, not just its training data. This makes it far easier to add new functionalities over time, like interacting with live Jenkins instances.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="midterm-accomplishments-a-functional-prototype"><a class="anchor" href="#midterm-accomplishments-a-functional-prototype" />Midterm Accomplishments: A Functional Prototype</h2> <div class="sectionbody"> <div class="paragraph"> <p>We have successfully developed a fully functional prototype that establishes this new core architecture. This prototype proves the viability of the agent-based diagnosis model.</p> </div> <div class="ulist"> <ul> <li> <p><strong>Interactive CLI:</strong> We built a user-friendly command-line interface using <code>Typer</code> and <code>Rich</code>. It guides the user through the diagnosis process, handles file I/O, and presents the final report in an easy to read formatted way.</p> </li> <li> <p><strong>Multi-Agent Pipeline:</strong> The core logic operates on a "Chain of Responsibility" model:</p> <div class="olist arabic"> <ol class="arabic"> <li> <p>A <strong>Router Agent</strong> first classifies the failure type.</p> </li> <li> <p>A <strong>Specialist Agent</strong> then uses a suite of tools to perform an in-depth investigation.</p> </li> <li> <p>An optional <strong>Critic Agent</strong> enables a self-correction loop, reviewing the diagnosis for quality and forcing a retry if the report is flawed.</p> </li> </ol> </div> </li> <li> <p><strong>Advanced RAG Tool:</strong> We integrated a sophisticated Retrieval-Augmented Generation (RAG) pipeline using <code>LightRAG</code>. This tool provides the agent with external knowledge and features a hybrid stack of local <code>sentence-transformers</code> for embeddings and <code>Cohere</code> for high-quality reranking.</p> </li> <li> <p><strong>Robust Logging &amp; Sandboxing:</strong> The CLI features a dual-logging system for both application debugging and detailed AI interaction auditing. For safety and reproducibility, each diagnosis runs in an isolated, timestamped directory, ensuring the user’s original workspace files are never touched.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="whats-next-the-road-to-the-target-architecture"><a class="anchor" href="#whats-next-the-road-to-the-target-architecture" />What’s Next? The Road to the Target Architecture</h2> <div class="sectionbody"> <div class="paragraph"> <p>The next phase will focus on evolving the prototype into the powerful, integrated system envisioned in our target architecture.</p> </div> <div class="ulist"> <ul> <li> <p><strong>Expanding LLM Backend Support:</strong> We will build out the provider-agnostic LLM adapter to include support for a wider range of backends. This will give users the freedom to choose their preferred provider based on cost, performance, or privacy needs, including direct integrations for <strong>OpenAI, Anthropic (Claude), and Groq</strong>.</p> </li> <li> <p><strong>RAG for Jenkins Knowledge:</strong> Build a comprehensive vector store from the official Jenkins documentation, wikis, and community discussions to give the agent deep domain knowledge with different-different embeddings model to suit the users needs.</p> </li> <li> <p><strong>Comprehensive Evaluation Framework:</strong> Create a framework using techniques like "LLM-as-a-Judge" to rigorously test the quality of the diagnoses and produce valuable insights for the community.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="acknowledgements"><a class="anchor" href="#acknowledgements" />Acknowledgements</h2> <div class="sectionbody"> <div class="paragraph"> <p>A heartfelt thank you to my mentors, Kris Stern, Shivay Lamba, Bruno Verachten, Harsh Pratap Singh, and Vutukuri Sreenivas. Their expertise, guidance, and timely reviews have been really helpful in refining the project’s technical roadmap and navigating the challenges.</p> </div> <div class="paragraph"> <p>I’d also like to thank the organization admins Kris Stern, Bruno Verachten, and Alyssa Tong for always checking in and offering help; your kindness and support mean a lot.</p> </div> <div class="paragraph"> <p>Excited for the second phase of the project!</p> </div> <div class="paragraph"> <p><strong>Project Repository:</strong> <a href="https://github.com/chiruu12/jenkins-domain-LLM">chiru12/jenkins-domain-LLM</a></p> </div> </div> </div> https:/www.jenkins.io/blog/2025/07/28/raunak-madan-gsoc-midterm-blog-post/ GSoC 2025 Midterm - Improving Plugin Modernizer 2026-03-19T18:14:09+00:00 2025-07-28T00:00:00+00:00 Hello everyone, I’m Raunak Madan, currently working on the Improving Plugin Modernizer project — a generic CLI tool designed to automate the modernization of Jenkins plugins. It leverages OpenRewrite recipes to apply code transformations, validate the results, and create pull requests with the proposed changes. For a detailed overview of the project, please refer to the project page. Table of Contents What we’ve accomplished so far? What I’ve Learned? What’s Next? Acknowledgements Useful Links We’ve reached halfway and successfully completed the first phase of the project. What we’ve accomplished so far? Automatic Extraction of Modernization Metadata: Record migration status, related pull requests, and more. Metadata Publishing: Automatically pushes metadata to a public GitHub... <div class="paragraph"> <p>Hello everyone,</p> </div> <div class="paragraph"> <p>I’m Raunak Madan, currently working on the <a href="https://github.com/jenkins-infra/plugin-modernizer-tool">Improving Plugin Modernizer</a> project — a generic CLI tool designed to automate the modernization of Jenkins plugins. It leverages OpenRewrite recipes to apply code transformations, validate the results, and create pull requests with the proposed changes. For a detailed overview of the project, please refer to the <a href="https://www.jenkins.io/projects/gsoc/2025/projects/plugin-modernizer-improvements/">project page</a>.</p> </div> <div class="sect1"> <h2 id="table-of-contents"><a class="anchor" href="#table-of-contents" />Table of Contents</h2> <div class="sectionbody"> <div class="olist arabic"> <ol class="arabic"> <li> <p><a href="#what-weve-accomplished-so-far">What we’ve accomplished so far?</a></p> </li> <li> <p><a href="#what-ive-learned">What I’ve Learned?</a></p> </li> <li> <p><a href="#whats-next">What’s Next?</a></p> </li> <li> <p><a href="#acknowledgements">Acknowledgements</a></p> </li> <li> <p><a href="#useful-links">Useful Links</a></p> </li> </ol> </div> <div class="paragraph"> <p>We’ve reached halfway and successfully completed the first phase of the project.</p> </div> </div> </div> <div class="sect1"> <h2 id="what-weve-accomplished-so-far"><a class="anchor" href="#what-weve-accomplished-so-far" />What we’ve accomplished so far?</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><strong>Automatic Extraction of Modernization Metadata:</strong> Record migration status, related pull requests, and more.</p> </li> <li> <p><strong>Metadata Publishing:</strong> Automatically pushes metadata to a public GitHub repository.</p> </li> <li> <p><strong>GitHub Action Workflows</strong>:</p> <div class="ulist"> <ul> <li> <p>Validate incoming metadata and auto-merge PRs.</p> </li> <li> <p>Dynamically update metadata.</p> </li> <li> <p>Consolidate metadata for each plugin.</p> </li> <li> <p>Generate comprehensive reports on applied recipes and plugin migrations to provide a high-level overview.</p> </li> </ul> </div> </li> </ul> </div> <div class="paragraph"> <p>Check out the demonstration of the tool from the <a href="https://www.jenkins.io/projects/gsoc/#gsoc-2025">Jenkins in Google Summer of Code page</a>.</p> </div> </div> </div> <div class="sect1"> <h2 id="what-ive-learned"><a class="anchor" href="#what-ive-learned" />What I’ve Learned?</h2> <div class="sectionbody"> <div class="paragraph"> <p>This experience has been a great opportunity for learning by doing. Beyond the technical skills, I think open source is not just about writing code, it’s about collaboration with the mentors and the community and having a shared growth mindset. Asking for help publicly, supporting others, and contributing back are core aspects of this culture.</p> </div> </div> </div> <div class="sect1"> <h2 id="whats-next"><a class="anchor" href="#whats-next" />What’s Next?</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p>Automate running recipes on plugins with low health scores.</p> </li> <li> <p>Create and improve recipes (e.g., a recipe to migrate plugins to Java 25).</p> </li> <li> <p>Push consolidated metadata and reports to <a href="https://reports.jenkins.io/">Jenkins reports site</a>.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="acknowledgements"><a class="anchor" href="#acknowledgements" />Acknowledgements</h2> <div class="sectionbody"> <div class="paragraph"> <p>A huge thank you to my mentors, <a href="https://www.jenkins.io/blog/authors/jonesbusy">Valentin Delaye</a>, <a href="https://www.jenkins.io/blog/authors/gounthar">Bruno Verachten</a>, <a href="https://www.jenkins.io/blog/authors/sridamul">Sridhar Sivakumar</a>, <a href="https://www.jenkins.io/blog/authors/TheMeinerLP">Phillipp Glanz</a>, for their constant support, responsiveness, and timely reviews throughout the journey.</p> </div> <div class="paragraph"> <p>I’d also like to thank the organization admins <a href="https://www.jenkins.io/blog/authors/krisstern">Kris Stern</a>, <a href="https://www.jenkins.io/blog/authors/gounthar">Bruno Verachten</a>, and <a href="https://www.jenkins.io/blog/authors/alyssat">Alyssa Tong</a> for always checking in and offering help, your kindness and support mean a lot.</p> </div> <div class="paragraph"> <p>Excited for the second phase of the project!</p> </div> </div> </div> <div class="sect1"> <h2 id="useful-links"><a class="anchor" href="#useful-links" />Useful Links</h2> <div class="sectionbody"> <div class="paragraph"> <p>You can find all the project-related notes and discussions here:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://sedate-marscapone-74c.notion.site/208fcbf0cc328028b936c73963de640b?v=208fcbf0cc3280dd8f94000c986ac3a3">Weekly Meetings</a></p> </li> <li> <p><a href="https://sedate-marscapone-74c.notion.site/GSoC-Jenkins-Improving-Plugin-Modernizer-206fcbf0cc328085b44ffefae8f232e8">Daily Progress/Notes</a></p> </li> <li> <p><a href="https://www.youtube.com/playlist?list=PLN7ajX_VdyaM-aDF6haC55MT7mh_kyB_1">Jenkins GSoC 2025 Playlist </a></p> </li> </ul> </div> </div> </div> https:/www.jenkins.io/blog/2025/07/28/maeve-ho-gsoc-midterm-update-post/ GSoC Midterm Update, Modernizing and Stabilizing the Jenkins Tekton Plugin 2026-03-19T18:14:09+00:00 2025-07-28T00:00:00+00:00 Hello everyone! I’m Maeve, a Computer Science student at Lehigh University, currently participating in Google Summer of Code 2025. My project involves modernizing the Jenkins Tekton Plugin to create a stable, production-ready integration between Jenkins and Kubernetes-native Tekton pipelines. As we reach the midpoint of the coding period, I wanted to share the progress and achievements from the first half of this exciting journey. Major Achievements This Period The work accomplished so far has focused on establishing a solid foundation for the plugin: Technical Modernization I’ve successfully upgraded the plugin’s core infrastructure from outdated Java 8 and Jenkins 4.18 to Java 17 and Jenkins 2.440+. This modernization effort... <div class="paragraph"> <p>Hello everyone!</p> </div> <div class="paragraph"> <p>I’m Maeve, a Computer Science student at Lehigh University, currently participating in Google Summer of Code 2025. My project involves <a href="https://www.jenkins.io/projects/gsoc/2025/projects/improving-tekton-client-plugin/">modernizing the Jenkins Tekton Plugin</a> to create a stable, production-ready integration between Jenkins and Kubernetes-native Tekton pipelines.</p> </div> <div class="paragraph"> <p>As we reach the midpoint of the coding period, I wanted to share the progress and achievements from the first half of this exciting journey.</p> </div> <div class="sect1"> <h2 id="major-achievements-this-period"><a class="anchor" href="#major-achievements-this-period" />Major Achievements This Period</h2> <div class="sectionbody"> <div class="paragraph"> <p>The work accomplished so far has focused on establishing a solid foundation for the plugin:</p> </div> <div class="sect2"> <h3 id="technical-modernization"><a class="anchor" href="#technical-modernization" />Technical Modernization</h3> <div class="paragraph"> <p>I’ve successfully upgraded the plugin’s core infrastructure from outdated Java 8 and Jenkins <code>4.18</code> to Java 17 and Jenkins <code>2.440+</code>. This modernization effort involved updating numerous dependencies and API calls to ensure the plugin works seamlessly with current Jenkins installations.</p> </div> </div> <div class="sect2"> <h3 id="testing-revolution"><a class="anchor" href="#testing-revolution" />Testing Revolution</h3> <div class="paragraph"> <p>The testing landscape has been completely transformed. I migrated the entire test suite from JUnit 4 to JUnit 5, converting 21 existing unit tests while implementing modern testing patterns including parameterized tests and improved lifecycle management. The broken test logic has been rewritten to align with current plugin behavior.</p> </div> </div> <div class="sect2"> <h3 id="end-to-end-testing-infrastructure"><a class="anchor" href="#end-to-end-testing-infrastructure" />End-to-End Testing Infrastructure</h3> <div class="paragraph"> <p>Perhaps the most significant achievement is the creation of comprehensive E2E testing capabilities. I’ve built four new integration tests that automatically provision Kind Kubernetes clusters, install Tekton components, create Jenkins jobs, and verify complete workflow execution. These tests run in our GitHub Actions pipeline and complete in just 3 - 4 minutes.</p> </div> </div> <div class="sect2"> <h3 id="continuous-integration-pipeline"><a class="anchor" href="#continuous-integration-pipeline" />Continuous Integration Pipeline</h3> <div class="paragraph"> <p>A robust CI/CD pipeline now powers the development process. The GitHub Actions workflow handles everything from environment setup to test execution and reporting, providing immediate feedback on every code change.</p> </div> </div> <div class="sect2"> <h3 id="code-quality-monitoring"><a class="anchor" href="#code-quality-monitoring" />Code Quality Monitoring</h3> <div class="paragraph"> <p>JaCoCo integration now provides detailed code coverage insights. While we’re at 12% overall coverage, certain critical packages like the build module achieve 73% coverage, giving us clear visibility into testing priorities.</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="technical-insights-and-learning"><a class="anchor" href="#technical-insights-and-learning" />Technical Insights and Learning</h2> <div class="sectionbody"> <div class="paragraph"> <p>Working on this project has provided deep insights into the challenges of maintaining compatibility between different CI/CD paradigms. The integration between Jenkins' traditional approach and Kubernetes-native Tekton execution requires careful consideration of resource management, authentication, and error propagation.</p> </div> <div class="paragraph"> <p>The E2E testing approach has proven particularly valuable - these tests catch integration issues that would be impossible to detect through unit testing alone. Watching real Tekton TaskRuns and PipelineRuns execute in our test clusters provides confidence that the plugin works correctly in real-world scenarios.</p> </div> </div> </div> <div class="sect1"> <h2 id="upcoming-development-focus"><a class="anchor" href="#upcoming-development-focus" />Upcoming Development Focus</h2> <div class="sectionbody"> <div class="paragraph"> <p>The remaining coding period will concentrate on several key areas:</p> </div> <div class="sect2"> <h3 id="dynamic-crd-support"><a class="anchor" href="#dynamic-crd-support" />Dynamic CRD Support</h3> <div class="paragraph"> <p>Implementing support for dynamic Tekton Custom Resource Definitions will enable users to leverage advanced Tekton features and create more flexible integration patterns.</p> </div> </div> <div class="sect2"> <h3 id="enhanced-user-experience"><a class="anchor" href="#enhanced-user-experience" />Enhanced User Experience</h3> <div class="paragraph"> <p>Focus will shift toward improving error handling, expanding documentation, and providing clear examples for common use cases to make the plugin more accessible to users.</p> </div> </div> <div class="sect2"> <h3 id="performance-and-scalability"><a class="anchor" href="#performance-and-scalability" />Performance and Scalability</h3> <div class="paragraph"> <p>Optimizations for large-scale Kubernetes deployments and improved resource management will ensure the plugin performs well in enterprise environments.</p> </div> </div> <div class="sect2"> <h3 id="migration-path-development"><a class="anchor" href="#migration-path-development" />Migration Path Development</h3> <div class="paragraph"> <p>Building tools and documentation to help teams transition from traditional Jenkins pipelines to cloud-native Tekton workflows represents a crucial long-term goal.</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="community-and-mentorship"><a class="anchor" href="#community-and-mentorship" />Community and Mentorship</h2> <div class="sectionbody"> <div class="paragraph"> <p>This experience has highlighted the value of open-source collaboration. Working with experienced Jenkins community members has provided insights not just into technical implementation, but into the broader ecosystem considerations that make plugins successful.</p> </div> <div class="paragraph"> <p>The mentorship aspect of GSoC has been particularly enriching - having access to experts who understand both the Jenkins plugin architecture and Kubernetes ecosystem nuances has accelerated the learning process significantly.</p> </div> </div> </div> <div class="sect1"> <h2 id="midterm-demonstration"><a class="anchor" href="#midterm-demonstration" />Midterm Demonstration</h2> <div class="sectionbody"> <div class="paragraph"> <p>During our recent midterm presentation, I demonstrated the current capabilities, including the automated testing pipeline and real-world integration scenarios. For those interested in the technical details of our testing strategy and modernization approach, the presentation recording is available on the <a href="https://www.jenkins.io/projects/gsoc/#gsoc-2025">Jenkins in Google Summer of Code page</a>.</p> </div> </div> </div> <div class="sect1"> <h2 id="project-repository"><a class="anchor" href="#project-repository" />Project Repository</h2> <div class="sectionbody"> <div class="paragraph"> <p>Development progress can be tracked at: <a href="https://github.com/jenkinsci/tekton-client-plugin">GitHub Repository</a></p> </div> <div class="paragraph"> <p>The foundation is now solid, and I’m energized to continue building features that will help development teams seamlessly integrate cloud-native CI/CD practices into their existing Jenkins workflows!</p> </div> </div> </div> https:/www.jenkins.io/blog/2025/07/24/redesigning-jenkins-part-two/ Redesigning Jenkins (Part Two) 2026-03-19T18:14:09+00:00 2025-07-24T00:00:00+00:00 :root { --aurora: radial-gradient(at 81% 35%, var(--orange) 0, transparent 50%), radial-gradient(at 80% 84%, var(--cyan) 0, transparent 50%), radial-gradient(at 88% 31%, var(--purple) 0, transparent 50%), radial-gradient(at 94% 32%, var(--pink) 0, transparent 50%), ... <style> :root { --aurora: radial-gradient(at 81% 35%, var(--orange) 0, transparent 50%), radial-gradient(at 80% 84%, var(--cyan) 0, transparent 50%), radial-gradient(at 88% 31%, var(--purple) 0, transparent 50%), radial-gradient(at 94% 32%, var(--pink) 0, transparent 50%), radial-gradient(at 49% 21%, var(--brown) 0, transparent 50%), radial-gradient(at 31% 46%, var(--teal) 0, transparent 50%), radial-gradient(at 90% 16%, var(--red) 0, transparent 50%), radial-gradient(at 0% 88%, var(--yellow) 0, transparent 50%), radial-gradient(at 42% 63%, var(--brown) 0, transparent 50%), radial-gradient(at 96% 0%, var(--yellow) 0, transparent 50%); } .app-blog-image--masthead { overflow: clip !important; perspective: 600px; .app-jenkins-preview { position: absolute; inset: 50%; translate: -50% -25%; transform-style: preserve-3d; backdrop-filter: blur(10px); background-color: color-mix(in srgb, white 80%, transparent); box-shadow: 0 0 30px rgba(0, 0, 0, 0.15); border-radius: 12px; width: 85%; aspect-ratio: 2938 / 1376; &amp;::after { content: ""; position: absolute; inset: 0; background-image: url("/images/post-images/2025/07/24/preview.png"); background-size: contain; background-position: top; } } .app-jenkins-preview:nth-child(1) { z-index: 3; transform: rotateX(var(--masthead-rotation-1)) translateY(110px); } .app-jenkins-preview:nth-child(2) { z-index: 2; transform: rotateX(var(--masthead-rotation-2)) translateY(50px) scale(0.9); background-color: color-mix(in srgb, white 70%, transparent); &amp;::after { opacity: 0.9; } } .app-jenkins-preview:nth-child(3) { z-index: 1; transform: rotateX(var(--masthead-rotation-3)) translateY(-5px) scale(0.8); background-color: color-mix(in srgb, white 50%, transparent); &amp;::after { opacity: 0.6; } } .app-jenkins-preview:nth-child(4) { z-index: 0; transform: rotateX(var(--masthead-rotation-4)) translateY(-55px) scale(0.7); background-color: color-mix(in srgb, white 30%, transparent); &amp;::after { opacity: 0.3; } } .app-jenkins-preview:nth-child(5) { z-index: -1; transform: rotateX(var(--masthead-rotation-5)) translateY(-100px) scale(0.6); background-color: color-mix(in srgb, white 10%, transparent); &amp;::after { opacity: 0.1; } } } .app-blog-image { position: relative; aspect-ratio: 1800 / 630; margin: 0 0 1.5rem 0 !important; border-radius: 10px; overflow: hidden; z-index: 0; background-color: rgba(255, 255, 255, 0.5); &amp;::before { content: ""; position: absolute; inset: 0; background-attachment: fixed; background-color: var(--pink); background-image: var(--aurora); opacity: 0.35; z-index: -1; } &amp;::after { content: ""; position: absolute; inset: 0; border: 1.5px solid color-mix(in srgb, var(--color) 5%, transparent); border-radius: 10px; z-index: 10; } } .developer-exp { display: flex; align-items: center; justify-content: center; gap: 40px; img { width: 90px; height: 90px; &amp;:nth-of-type(3) { scale: 0.9; } &amp;:nth-of-type(even) { width: 40px; height: 40px; rotate: 45deg; mix-blend-mode: overlay; } } } </style> <div class="app-blog-image app-blog-image--masthead"> <div class="app-jenkins-preview" /> <div class="app-jenkins-preview" /> <div class="app-jenkins-preview" /> <div class="app-jenkins-preview" /> <div class="app-jenkins-preview" /> </div> <script> (function () { const startDeg = [-12, -9, -8, -7, -6]; const maxShift = -20; const expFactor = 0.5; const scrollSpeed = 0.004; const maxDelay = 100; // max scroll delay in px for the first layer const endDeg = startDeg.map( (s, i) =&gt; +(s + maxShift * Math.pow(expFactor, i)).toFixed(2) ); const delay = startDeg.map( (_, i) =&gt; +(maxDelay * Math.pow(expFactor, i)).toFixed(2) ); const diffs = startDeg.map((s, i) =&gt; Math.abs(endDeg[i] - s)); const maxDiff = Math.max(...diffs); const lerp = (a, b, t) =&gt; a + (b - a) * t; function updateVars() { startDeg.forEach((start, i) =&gt; { const effectiveScroll = Math.max(window.scrollY - delay[i], 0); const base = effectiveScroll * scrollSpeed; const t = Math.min(base * (maxDiff / diffs[i]), 1); const rot = lerp(start, endDeg[i], t).toFixed(2); document.body.style.setProperty(`--masthead-rotation-${i + 1}`, `${rot}deg`); }); } updateVars(); window.addEventListener('scroll', updateVars, { passive: true }); })(); </script> <div class="paragraph"> <p>In <a href="https://www.jenkins.io/blog/2025/03/26/design-post/">Part One</a> we discussed the motivation behind redesigning Jenkins, the most used CI/CD platform in the world, and the technical challenges that come with such an effort.</p> </div> <div class="paragraph"> <p>Today, we’ll dive deeper into the design decisions behind some of the new UI features, how we’re improving the developer experience, and what we’re doing to ensure compatibility across the plugin ecosystem without slowing down progress.</p> </div> <div class="sect1"> <h2 id="part-two-lift-off"><a class="anchor" href="#part-two-lift-off" />Part Two - Lift-off</h2> <div class="sectionbody"> <div class="paragraph"> <p>With Jenkins 2.516.1, we’ve reworked large amounts of the Jenkins user interface - the result of years of dedicated work by the community. This release marks a major milestone in the evolution of Jenkins, with nearly every part of the interface having been refined for clarity and usability. From the navigation and theming to pipeline visualization and customization, the entire experience has been reimagined to better serve both new and old users.</p> </div> <hr> <div class="sect2"> <h3 id="refined-interface"><a class="anchor" href="#refined-interface" />Refined interface</h3> <iframe width="100%" height="500" src="https://www.youtube.com/embed/xLbkNo-Pwac" frameborder="0" allowfullscreen="" /> <div class="paragraph"> <p>One of the most noticeable changes in Jenkins 2.516.1 is the introduction of the redesigned header. This new header merges the traditional top bar and breadcrumb navigation into a single, streamlined component. The result is a cleaner, more modern interface that not only looks better but also improves usability by saving valuable vertical space - approximately <em>60 pixels</em> per page.</p> </div> <div class="paragraph"> <p>Beyond its appearance, the new header is fully responsive. Breadcrumbs and actions dynamically adjust to different screen sizes. Additionally, global actions like <em>Manage Jenkins</em>, which were previously only accessible from the dashboard, are now embedded directly into the header, making them accessible from any page.</p> </div> <div class="paragraph"> <p>Redesigning a platform as extensible as Jenkins means every change must be carefully considered for its impact on the plugin ecosystem. Throughout the ongoing redesign, maintaining compatibility with existing plugins has been prioritised. This involved extensive testing, clear deprecation paths, and providing migration guides for plugin authors. The goal is to do as much heavy lifting for plugin developers as possible, so that only small tweaks would be needed by plugins.</p> </div> <div class="paragraph"> <p>Accessibility was a core focus of the redesign. We improved color contrast ratios across the interface, making Jenkins easier to use for everyone, including those with visual impairments. Interactive elements now have more contrast, and we’ve enhanced keyboard navigation throughout the UI.</p> </div> <div class="paragraph"> <p>We’ve also introduced new border variables that developers can use: <code>--jenkins-border</code> and <code>--jenkins-border—​subtle</code>. These borders automatically change size and color depending on context, ensuring that they are always visible and accessible. When your system is set to increased contrast mode, borders automatically adapt - ensuring components remain visible and easy to distinguish throughout Jenkins.</p> </div> <hr> </hr> <div class="sect2"> <h3 id="revamped-pipeline-visualisation"><a class="anchor" href="#revamped-pipeline-visualisation" />Revamped pipeline visualisation</h3> <div class="app-blog-image"> <img src="https://www.jenkins.io/images/post-images/2025/07/24/pipeline-graph-view.png" alt="Pipeline Graph View plugin" /> </div> <div class="paragraph"> <p>Pipelines are central to how Jenkins automates the process of building, testing, and deploying software. They outline the entire workflow from code commit to production. As these pipelines become more complex, it can be challenging to track progress or identify issues. This is where pipeline visualization becomes essential - turning a series of abstract steps into a clear, interactive flow.</p> </div> <div class="paragraph"> <p>The <a href="https://plugins.jenkins.io/pipeline-graph-view">Pipeline Graph View</a> plugin does just that, displaying each stage of a run in a clean, intuitive graph. It’s designed to help users quickly grasp the structure and status of their pipelines at a glance.</p> </div> <div class="paragraph"> <p>This year, the plugin has been completely rebuilt, and the response from the community has been <em>fantastic</em>. We’ve moved the plugin from Webpack to Rspack and Vite, and replaced class components with functional ones. This cleanup removed thousands of lines of code, improving performance and maintainability.</p> </div> <div class="paragraph"> <p>The new interface, based on the <a href="https://weekly.ci.jenkins.io/design-library/">Jenkins Design Library</a>, now supports full-page scrolling, sticky headings, and pan-and-zoom capabilities for the pipeline graph. New animations, loading skeletons, and clear stage progress indicators create a smoother, more responsive user experience.</p> </div> <div class="paragraph"> <p>A unified view brings together the pipeline graph, stage details, and logs into a single layout, so you can now track execution and output in one place. The layout is customizable - the graph can be moved and columns resized or hidden.</p> </div> <div class="paragraph"> <p>Finally, performance has been significantly boosted. The plugin loads faster, scrolls more smoothly, and handles large pipelines more efficiently than ever before.</p> </div> <div class="paragraph"> <p>Want to learn more about Pipeline Graph View? Read our <a href="https://www.jenkins.io/blog/2025/05/02/pipeline-graph-view/">previous article</a>.</p> </div> <hr> </hr> <div class="sect2"> <h3 id="new-ways-to-customize-jenkins"><a class="anchor" href="#new-ways-to-customize-jenkins" />New ways to customize Jenkins</h3> <div class="app-blog-image"> <img src="https://www.jenkins.io/images/post-images/2025/07/24/themes.png" alt="Themes" /> </div> <div class="paragraph"> <p>Jenkins 2.516.1 is the most customizable version of Jenkins yet. There’s more themes than ever before, and a whole new way of changing themes on the fly. Just hover over your user account icon to get access to the new theme picker.</p> </div> <div class="paragraph"> <p>Make Jenkins your own with a variety of themes:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://plugins.jenkins.io/dark-theme">Dark theme</a> - A sleek, modern look that’s easy on the eyes.</p> </li> <li> <p><a href="https://plugins.jenkins.io/solarized-theme">Solarized theme</a> - Ethan Schoonover’s beloved, balanced theme returns with a fresh release for Jenkins.</p> </li> <li> <p><a href="https://plugins.jenkins.io/catppuccin-theme">Catppuccin theme</a> - A soothing pastel theme for Jenkins.</p> </li> <li> <p><a href="https://plugins.jenkins.io/chocolate-theme">Chocolate theme</a> - Indulge your Jenkins in rich, dark tones with golden highlights for a refined and elegant developer experience.</p> </li> <li> <p><a href="https://plugins.jenkins.io/nord-theme">Nord theme</a> - A clear, uncluttered, and elegant design to achieve undisturbed focus and excellent readability.</p> </li> </ul> </div> <div class="paragraph"> <p>Want to create your own theme? We’ve made it simple with a brand-new Maven archetype – <a href="https://github.com/jenkinsci/archetypes">check it out</a>.</p> </div> <div class="paragraph"> <p>On top of that, there’s the <a href="https://plugins.jenkins.io/customizable-header">Customizable Header Plugin</a>. This lets you fully customize the new header - change the logo, links, or actions to tailor Jenkins to your organization’s workflow and brand.</p> </div> <hr> </hr> <div class="sect2"> <h3 id="evolving-the-developer-experience"><a class="anchor" href="#evolving-the-developer-experience" />Evolving the developer experience</h3> <div class="app-blog-image developer-exp"> <img src="https://www.jenkins.io/images/logos/jenkins/jenkins.svg" alt="Jenkins logo" /> <img src="https://www.jenkins.io/images/post-images/2025/07/24/plus.svg" alt="Plus" /> <img src="https://www.jenkins.io/images/post-images/2025/07/24/design-library.svg" alt="Jenkins Design Library icon" /> <img src="https://www.jenkins.io/images/post-images/2025/07/24/plus.svg" alt="Plus" /> <img src="https://www.jenkins.io/images/post-images/2025/07/24/intellij.png" alt="IntelliJ icon" /> </div> <div class="paragraph"> <p>Jenkins is powered by hundreds of contributors, but working with its proprietary technologies – particularly Jelly and Stapler – can be a challenge for newcomers.</p> </div> <div class="sect3"> <h4 id="jenkins-design-library"><a class="anchor" href="#jenkins-design-library" />Jenkins Design Library</h4> <div class="paragraph"> <p>At the end of last year, <a href="https://weekly.ci.jenkins.io/design-library/">Jenkins Design Library 3</a> was introduced - a major step forward in modernizing the Jenkins UI and improving the development experience. Jenkins Design Library is a comprehensive system of reusable UI components, layout patterns, and style guidelines tailored specifically for Jenkins. It standardizes how interfaces are built, ensuring consistency across plugins and core features while aligning with modern web practices and accessibility standards.</p> </div> <div class="paragraph"> <p>For contributors, this means a more efficient and reliable way to build user interfaces. Instead of creating components from scratch or reverse-engineering existing ones, contributors can rely on a shared set of well-documented, pre-tested elements. This not only speeds up development and reduces bugs, but also makes it easier for new contributors to get started and follow established UI conventions.</p> </div> </div> <div class="sect3"> <h4 id="plugin-for-intellij"><a class="anchor" href="#plugin-for-intellij" />Plugin for IntelliJ</h4> <div class="paragraph"> <p>To help lower the barrier to entry, the Jenkins community offers an <a href="https://plugins.jetbrains.com/plugin/1885-jenkins-development-support">IntelliJ IDEA plugin</a>. The plugin streamlines Jenkins development in various ways, such as offering autocompletion and inline documentation for Jelly tags, as well as autocomplete for <a href="https://weekly.ci.jenkins.io/design-library/symbols/">Jenkins Symbols</a>.</p> </div> <hr> </hr> </div> <div class="sect2"> <h3 id="get-involved"><a class="anchor" href="#get-involved" />Get involved</h3> <div class="paragraph"> <p>Jenkins has come a long way in the last few years, and we’re incredibly excited for what the future holds.</p> </div> <div class="paragraph"> <p>If you want to get involved in the UI and UX discussions of Jenkins join the <a href="https://www.jenkins.io/sigs/ux">User Experience SIG</a>.</p> </div> <div class="paragraph"> <p>Take advantage of new components and patterns in your plugin via the <a href="https://weekly.ci.jenkins.io/design-library/">Design Library</a>.</p> </div> <div class="paragraph"> <p>You can watch our monthly meetings on <a href="https://www.youtube.com/playlist?list=PLN7ajX_VdyaOnsIIsZHsv_fM9QhOcajWe">YouTube</a> and you can view in-progress work on <a href="https://github.com/jenkinsci/jenkins/pulls?q=is%3Apr+is%3Aopen+label%3Aweb-ui">GitHub</a>.</p> </div> </div> </div> </div></div></div></hr></div></div> https:/www.jenkins.io/blog/2025/07/24/giovanni-vaccarino-gsoc-midterm-post/ GSoC Midterm Update, Building an AI-Powered Chatbot 2026-03-19T18:14:09+00:00 2025-07-24T00:00:00+00:00 Hello everyone! I’m Giovanni Vaccarino, and I’m working on the AI-Powered Chatbot for Quick Access to Jenkins Resources project as part of Google Summer of Code 2025. This project focuses on developing a Jenkins plugin that integrates an AI chatbot to help users quickly find relevant Jenkins documentation, plugins, and community resources. We’ve just crossed the midpoint of July, so I’d like to share a progress update on the project. What I’ve Accomplished So Far Here are the major milestones I’ve achieved in this period: Built the complete data pipeline for the RAG-based chatbot, from data collection to embedding and vector storage Implemented a REST API... <div class="paragraph"> <p>Hello everyone!</p> </div> <div class="paragraph"> <p>I’m Giovanni Vaccarino, and I’m working on the <strong>AI-Powered Chatbot for Quick Access to Jenkins Resources</strong> project as part of Google Summer of Code 2025. This project focuses on developing a Jenkins plugin that integrates an AI chatbot to help users quickly find relevant Jenkins documentation, plugins, and community resources.</p> </div> <div class="paragraph"> <p>We’ve just crossed the midpoint of July, so I’d like to share a progress update on the project.</p> </div> <div class="sect1"> <h2 id="what-ive-accomplished-so-far"><a class="anchor" href="#what-ive-accomplished-so-far" />What I’ve Accomplished So Far</h2> <div class="sectionbody"> <div class="paragraph"> <p>Here are the major milestones I’ve achieved in this period:</p> </div> <div class="ulist"> <ul> <li> <p>Built the complete <strong>data pipeline</strong> for the RAG-based chatbot, from data collection to embedding and vector storage</p> </li> <li> <p>Implemented a <strong>REST API</strong> to serve the chatbot functionalities</p> </li> <li> <p>Developed the <strong>plugin UI</strong>, which was integrated into the Jenkins user interface</p> </li> <li> <p>Written unit and integration <strong>tests</strong> for both the backend and frontend components</p> </li> <li> <p>Continuously update the project <strong>documentation</strong></p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="what-ive-learned"><a class="anchor" href="#what-ive-learned" />What I’ve Learned</h2> <div class="sectionbody"> <div class="paragraph"> <p>While this journey has been full of technical growth, GSoC has been about much more than just writing code. It’s been about having meaningful discussions, valuable mentorship, and collaboration by exchanging ideas and opinions.</p> </div> </div> </div> <div class="sect1"> <h2 id="whats-next"><a class="anchor" href="#whats-next" />What’s Next?</h2> <div class="sectionbody"> <div class="paragraph"> <p>With several weeks still ahead, I’m fully committed to continue the work on the project. The second phase will focus on enhancing the quality of the chatbot’s responses. I plan to explore agentic approaches and develop more complex chains and flows, all while keeping the response time constraints in mind.</p> </div> </div> </div> <div class="sect1"> <h2 id="acknowledgements"><a class="anchor" href="#acknowledgements" />Acknowledgements</h2> <div class="sectionbody"> <div class="paragraph"> <p>A huge thank you to my mentors <strong>Vutukuri Sreenivas</strong>, <strong>Kris Stern</strong>, <strong>Bervianto Leo Pratama</strong>, and <strong>Bruno Verachten</strong> for their constant availability, quick responses, code reviews, and thoughtful guidance.</p> </div> <div class="paragraph"> <p>Also, a big shout-out to the Jenkins org admins <strong>Kris Stern</strong>, <strong>Bruno Verachten</strong>, and <strong>Alyssa Tong</strong> for their continuous support throughout the coding period.</p> </div> </div> </div> <div class="sect1"> <h2 id="midterm-presentation"><a class="anchor" href="#midterm-presentation" />Midterm Presentation</h2> <div class="sectionbody"> <div class="paragraph"> <p>We’ve recently completed the GSoC midterm presentation for the project, where I walked through the current status, key features and future plans. If you are interested in a more detailed overview, <a href="https://www.jenkins.io/projects/gsoc/#gsoc-2025">the recording is available on the GSoC project page</a>.</p> </div> </div> </div> <div class="sect1"> <h2 id="want-to-track-the-project"><a class="anchor" href="#want-to-track-the-project" />Want to Track the Project?</h2> <div class="sectionbody"> <div class="paragraph"> <p>Follow the plugin’s development: <a href="https://github.com/jenkinsci/resources-ai-chatbot-plugin">GitHub Repo</a></p> </div> <div class="paragraph"> <p>I’m excited for the weeks ahead and to keep building with the Jenkins community!</p> </div> </div> </div> https:/www.jenkins.io/blog/2025/07/24/birajit-saikia-gsoc-midterm-update-blog-post/ GSoC 2025 Midterm: Complete Build Retooling of jenkins.io 2026-03-19T18:14:09+00:00 2025-07-24T00:00:00+00:00 biru-codeastromer This post details the progress made during the first half of Google Summer of Code 2025 on the Complete Build Retooling of jenkins.io project, which aims to modernize the Jenkins documentation infrastructure. Table of Contents Project Objectives Technical Implementation Architecture Components Migration Approach Progress Highlights Documentation System (Antora) Web Platform (Vite.js) Challenges Overcome Roadmap Ahead Acknowledgments Project Resources Project Objectives The initiative focuses on three core improvements to the Jenkins documentation system: Modernization: Transitioning from legacy tools to contemporary solutions Performance: Implementing faster build processes Organization: Establishing clear separation between: Versioned content (tied to LTS releases) Non-versioned content (general documentation) Technical Implementation Architecture Components Antora: Chosen for versioned documentation management Vite.js: Selected for non-versioned content after evaluating Gatsby Material UI: Implementing modern UI components YAML:... <div class="paragraph"> <p><span class="image right"><img src="https://www.jenkins.io/images/gsoc/jenkins-gsoc-logo_small.png" alt="Jenkins GSoC Logo" width="200" /></span> </p> <div class="paragraph"> <p>This post details the progress made during the first half of Google Summer of Code 2025 on the <strong><a href="https://www.jenkins.io/projects/gsoc/2025/projects/complete-alternative-jenkins-io-build-retooling/">Complete Build Retooling of jenkins.io</a></strong> project, which aims to modernize the Jenkins documentation infrastructure.</p> </div> <div class="sect1"> <h2 id="table-of-contents"><a class="anchor" href="#table-of-contents" />Table of Contents</h2> <div class="sectionbody"> <div class="olist arabic"> <ol class="arabic"> <li> <p><a href="#project-objectives">Project Objectives</a></p> </li> <li> <p><a href="#technical-implementation">Technical Implementation</a></p> <div class="olist loweralpha"> <ol class="loweralpha" type="a"> <li> <p><a href="#architecture-components">Architecture Components</a></p> </li> <li> <p><a href="#migration-approach">Migration Approach</a></p> </li> </ol> </div> </li> <li> <p><a href="#progress-highlights">Progress Highlights</a></p> <div class="olist loweralpha"> <ol class="loweralpha" type="a"> <li> <p><a href="#documentation-system-antora">Documentation System (Antora)</a></p> </li> <li> <p><a href="#web-platform-vite-js">Web Platform (Vite.js)</a></p> </li> </ol> </div> </li> <li> <p><a href="#challenges-overcome">Challenges Overcome</a></p> </li> <li> <p><a href="#roadmap-ahead">Roadmap Ahead</a></p> </li> <li> <p><a href="#acknowledgments">Acknowledgments</a></p> </li> <li> <p><a href="#project-resources">Project Resources</a></p> </li> </ol> </div> </div> </div> <div class="sect1"> <h2 id="project-objectives"><a class="anchor" href="#project-objectives" />Project Objectives</h2> <div class="sectionbody"> <div class="paragraph"> <p>The initiative focuses on three core improvements to the Jenkins documentation system:</p> </div> <div class="olist arabic"> <ol class="arabic"> <li> <p><strong>Modernization</strong>: Transitioning from legacy tools to contemporary solutions</p> </li> <li> <p><strong>Performance</strong>: Implementing faster build processes</p> </li> <li> <p><strong>Organization</strong>: Establishing clear separation between:</p> <div class="ulist"> <ul> <li> <p>Versioned content (tied to LTS releases)</p> </li> <li> <p>Non-versioned content (general documentation)</p> </li> </ul> </div> </li> </ol> </div> </div> </div> <div class="sect1"> <h2 id="technical-implementation"><a class="anchor" href="#technical-implementation" />Technical Implementation</h2> <div class="sectionbody"> <div class="sect2"> <h3 id="architecture-components"><a class="anchor" href="#architecture-components" />Architecture Components</h3> <div class="ulist"> <ul> <li> <p><strong>Antora</strong>: Chosen for versioned documentation management</p> </li> <li> <p><strong>Vite.js</strong>: Selected for non-versioned content after evaluating Gatsby</p> </li> <li> <p><strong>Material UI</strong>: Implementing modern UI components</p> </li> <li> <p><strong>YAML</strong>: Structured content management for dynamic pages</p> </li> </ul> </div> </div> <div class="sect2"> <h3 id="migration-approach"><a class="anchor" href="#migration-approach" />Migration Approach</h3> <div class="paragraph"> <p>The transition strategy involved:</p> </div> <div class="olist arabic"> <ol class="arabic"> <li> <p><strong>Content Analysis</strong>:</p> <div class="ulist"> <ul> <li> <p>Comprehensive audit of existing documentation</p> </li> <li> <p>Identification of versioned vs. non-versioned content</p> </li> </ul> </div> </li> <li> <p><strong>Toolchain Implementation</strong>:</p> <div class="ulist"> <ul> <li> <p>Automated content synchronization via Python scripts</p> </li> <li> <p>Visual diff verification using Beyond Compare</p> </li> <li> <p>Incremental page migration to ensure stability</p> </li> </ul> </div> </li> </ol> </div> </div> </div> </div> <div class="sect1"> <h2 id="progress-highlights"><a class="anchor" href="#progress-highlights" />Progress Highlights</h2> <div class="sectionbody"> <div class="sect2"> <h3 id="documentation-system-antora"><a class="anchor" href="#documentation-system-antora" />Documentation System (Antora)</h3> <div class="ulist"> <ul> <li> <p>Successfully synchronized the docs.jenkins.io repository with current content of jenkins.io</p> </li> <li> <p>Resolved many broken navigation links across the documentation</p> </li> <li> <p>Established LTS 2.504x as the new branch with changes up to 25 June</p> </li> <li> <p>Removed deprecated Gatsby infrastructure</p> </li> </ul> </div> </div> <div class="sect2"> <h3 id="web-platform-vite-js"><a class="anchor" href="#web-platform-vite-js" />Web Platform (Vite.js)</h3> <div class="ulist"> <ul> <li> <p>Implemented a modern Vite.js foundation with:</p> <div class="ulist"> <ul> <li> <p>Preview deployment capabilities</p> </li> <li> <p>Automated branch protection</p> </li> <li> <p>Integrated issue tracking</p> </li> </ul> </div> </li> <li> <p>Migrated core pages including:</p> <div class="ulist"> <ul> <li> <p>Roadmap</p> </li> <li> <p>Download</p> </li> <li> <p>Events</p> </li> <li> <p>Chat</p> </li> <li> <p>Participate</p> </li> <li> <p>Books</p> </li> <li> <p>Awards</p> </li> <li> <p>Avatars</p> </li> <li> <p>Conduct</p> </li> <li> <p>Mailing Lists</p> </li> </ul> </div> </li> <li> <p>Achieved near-perfect visual parity with the current jenkins.io site</p> </li> <li> <p>Introduced system-aware dark/light mode</p> </li> </ul> </div> </div> </div> </div> <div class="sect1"> <h2 id="challenges-overcome"><a class="anchor" href="#challenges-overcome" />Challenges Overcome</h2> <div class="sectionbody"> <div class="paragraph"> <p>The migration presented several technical hurdles:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Content Structure</strong>: Maintaining accurate inter-document relationships during transition</p> </li> <li> <p><strong>Tooling Transition</strong>: Smooth migration from Gatsby to Vite.js mid-project</p> </li> <li> <p><strong>UI Consistency</strong>: Ensuring pixel-perfect alignment with existing design</p> </li> <li> <p><strong>Workflow Management</strong>: Coordinating multiple interdependent PRs</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="roadmap-ahead"><a class="anchor" href="#roadmap-ahead" />Roadmap Ahead</h2> <div class="sectionbody"> <div class="paragraph"> <p>The final phase will focus on:</p> </div> <div class="olist arabic"> <ol class="arabic"> <li> <p>Completing the migration of remaining components:</p> <div class="ulist"> <ul> <li> <p>Security advisories</p> </li> <li> <p>Changelogs</p> </li> <li> <p>Blog</p> </li> <li> <p>Home page</p> </li> </ul> </div> </li> <li> <p>Performance optimization:</p> <div class="ulist"> <ul> <li> <p>Build time improvements</p> </li> <li> <p>Asset delivery optimization</p> </li> </ul> </div> </li> <li> <p>Final integration:</p> <div class="ulist"> <ul> <li> <p>Unified platform architecture</p> </li> <li> <p>Comprehensive SEO implementation</p> </li> </ul> </div> </li> </ol> </div> </div> </div> <div class="sect1"> <h2 id="acknowledgments"><a class="anchor" href="#acknowledgments" />Acknowledgments</h2> <div class="sectionbody"> <div class="paragraph"> <p>This project’s progress owes much to the exceptional guidance from my mentors: <strong><a href="https://www.jenkins.io/blog/authors/krisstern">Kris Stern</a></strong>, <strong><a href="https://www.jenkins.io/blog/authors/gounthar">Bruno Verachten</a></strong>, <strong><a href="https://www.jenkins.io/blog/authors/kmartens27">Kevin Martens</a></strong>, and <strong><a href="https://www.jenkins.io/blog/authors/iamrajiv">Rajiv Singh</a></strong>. Their technical expertise and strategic advice have been instrumental in navigating the project’s complexities.</p> </div> <div class="paragraph"> <p>For me, the learning has been immense — not only in terms of technical depth, but also in strengthening collaboration, communication, and open-source best practices.</p> </div> <div class="paragraph"> <p>Additional thanks to the Jenkins GSoC org admins for their support and for fostering such a collaborative open-source environment.</p> </div> <div class="sect2"> <h3 id="midterm-presentation"><a class="anchor" href="#midterm-presentation" />Midterm Presentation</h3> <div class="paragraph"> <p>We recently completed our midterm presentations, where I delivered a high-level overview of the work that has been completed so far and what the rest of the project timeline will look like. You can check out my presentation, as well as the others, <a href="https://www.jenkins.io/projects/gsoc/#gsoc-2025">on the Jenkins in Google Summer of Code</a> page.</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="project-resources"><a class="anchor" href="#project-resources" />Project Resources</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/jenkins-infra/docs.jenkins.io">Documentation Repository</a></p> </li> <li> <p><a href="https://github.com/biru-codeastromer/docs.jenkins.io-vite.js-site">Vite.js Implementation</a></p> </li> <li> <p><a href="https://github.com/biru-codeastromer/My-GSoC-Jenkins-2025">Project Journal</a></p> </li> </ul> </div> <div class="paragraph"> <p>The second half of GSoC promises exciting developments as we work toward delivering a modern, high-performance documentation platform for the Jenkins community.</p> </div> </div> </div></div> https:/www.jenkins.io/blog/2025/07/11/aws-sponsorship/ Amazon donates $60,000 to Jenkins 2026-03-19T18:14:09+00:00 2025-07-11T00:00:00+00:00 Amazon Web Services has graciously donated $60,000 in cloud credits to the Jenkins project. Their continued support of the Jenkins project is massively important for several services and functions. AWS' support for Jenkins over the years has enabled the Jenkins project to run its infrastructure and services efficiently. AWS provides the central distribution point for Jenkins core and Jenkins plugin downloads through the Jenkins update center. We’ve used AWS Graviton servers (Arm architecture) and AWS Intel servers with the Amazon Elastic Kubernetes Service and as Elastic Compute Cloud virtual machines. In addition to these services, ci.jenkins.io was recently migrated to AWS through the work of... <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2024/07/24/2024-07-24-amazon-donates-to-jenkins.png" alt="image" width="839" /></span> </p> <div class="paragraph"> <p>Amazon Web Services has graciously donated $60,000 in cloud credits to the Jenkins project. Their continued support of the Jenkins project is massively important for several services and functions. AWS' support for Jenkins over the years has enabled the Jenkins project to run its infrastructure and services efficiently.</p> </div> <div class="paragraph"> <p>AWS provides the central distribution point for Jenkins core and Jenkins plugin downloads through the Jenkins update center. We’ve used <a href="https://docs.aws.amazon.com/whitepapers/latest/aws-graviton-performance-testing/what-is-aws-graviton.html">AWS Graviton servers</a> (Arm architecture) and AWS Intel servers with the Amazon <a href="https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html">Elastic Kubernetes Service</a> and as <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html">Elastic Compute Cloud</a> virtual machines.</p> </div> <div class="paragraph"> <p>In addition to these services, <a href="https://github.com/jenkins-infra/helpdesk/issues/4688">ci.jenkins.io was recently migrated to AWS</a> through the work of the Jenkins infrastructure team. This migration was necessary so that Jenkins can continue to provide a stable and reliable environment for its users and community. This was no small task, involving many moving parts and requiring careful planning and execution to ensure a smooth transition. Without the support and sponsorship of AWS, this migration would not have been possible.</p> </div> <div class="paragraph"> <p>We are sincerely grateful for Amazon’s most recent contribution to the Jenkins project and thank them for their continued support of open-source software.</p> </div></div> https:/www.jenkins.io/blog/2025/07/10/yourkit-sponsorship/ YourKit sponsors the Jenkins project 2026-03-19T18:14:09+00:00 2025-07-10T00:00:00+00:00 We’re proud to welcome YourKit as a new sponsor of the Jenkins project! YourKit has generously provided free licenses for the YourKit Java Profiler to Jenkins core maintainers and active contributors. This tool is a powerful asset when analyzing performance regressions, debugging memory leaks, or resolving concurrency issues in Jenkins core and plugin code. YourKit supports open source projects with innovative and intelligent tools for monitoring and profiling Java and .NET applications. YourKit is the creator of YourKit Java Profiler, YourKit .NET Profiler, and YourKit YouMonitor. While YourKit offers a suite of tools, this sponsorship specifically provides licenses for the YourKit Java Profiler to eligible... <div class="paragraph"> <p>We’re proud to welcome <strong>YourKit</strong> as a new sponsor of the Jenkins project!</p> </div> <div class="paragraph"> <p>YourKit has generously provided free licenses for the <strong>YourKit Java Profiler</strong> to Jenkins core maintainers and active contributors. This tool is a powerful asset when analyzing performance regressions, debugging memory leaks, or resolving concurrency issues in Jenkins core and plugin code.</p> </div> <div class="paragraph"> <p><span class="image"><a class="image" href="https://www.yourkit.com/"><img src="https://www.jenkins.io/images/post-images/2025/07/yourkit-logo.svg" alt="Yourkit" /></a></span> </p> <div class="paragraph"> <p>YourKit supports open source projects with innovative and intelligent tools for monitoring and profiling Java and .NET applications. YourKit is the creator of <a href="https://www.yourkit.com/java/profiler/">YourKit Java Profiler</a>, <a href="https://www.yourkit.com/dotnet-profiler/">YourKit .NET Profiler</a>, and <a href="https://www.yourkit.com/youmonitor/">YourKit YouMonitor</a>.</p> </div> <div class="paragraph"> <p>While YourKit offers a suite of tools, this sponsorship specifically provides licenses for the <strong>YourKit Java Profiler</strong> to eligible Jenkins contributors.</p> </div> <div class="sect1"> <h2 id="how-to-request-a-license"><a class="anchor" href="#how-to-request-a-license" />How to Request a License</h2> <div class="sectionbody"> <div class="paragraph"> <p>If you’re actively contributing to Jenkins and would benefit from a YourKit Java Profiler license, please contact Alexander Brandes (@NotMyFault) via email. His contact information are available on his GitHub profile: <a href="https://github.com/NotMyFault" class="bare">https://github.com/NotMyFault</a></p> </div> <div class="paragraph"> <p>Include your GitHub handle and a short note indicating your interest in a YourKit license.</p> </div> </div> </div> <div class="sect1"> <h2 id="thank-you"><a class="anchor" href="#thank-you" />Thank You</h2> <div class="sectionbody"> <div class="paragraph"> <p>We’re incredibly grateful to YourKit for supporting the Jenkins project and enabling our contributors to go deeper into performance tuning and diagnostics. Their support strengthens the quality and reliability of Jenkins for everyone.</p> </div> </div> </div></div> https:/www.jenkins.io/blog/2025/07/10/jetbrains-sponsorship/ JetBrains sponsors the Jenkins project 2026-03-19T18:14:09+00:00 2025-07-10T00:00:00+00:00 We’re excited to welcome JetBrains as a new sponsor of the Jenkins project! JetBrains has generously provided free annual All Products Pack subscriptions to Jenkins core maintainers and active contributors. This subscription grants access to the full suite of JetBrains IDEs, including IntelliJ IDEA Ultimate Edition, which is widely used by Jenkins developers for writing, debugging, and maintaining the project’s codebase. JetBrains: Tools that Support Jenkins Development JetBrains develops a comprehensive set of development tools that cover many programming languages and workflows. IntelliJ IDEA Ultimate Edition, in particular, is a popular choice among Jenkins contributors for its advanced code analysis, refactoring tools, and seamless integration... <div class="paragraph"> <p>We’re excited to welcome <strong>JetBrains</strong> as a new sponsor of the Jenkins project!</p> </div> <div class="paragraph"> <p>JetBrains has generously provided free annual <strong>All Products Pack</strong> subscriptions to Jenkins core maintainers and active contributors. This subscription grants access to the full suite of JetBrains IDEs, including IntelliJ IDEA Ultimate Edition, which is widely used by Jenkins developers for writing, debugging, and maintaining the project’s codebase.</p> </div> <div class="sect1"> <h2 id="jetbrains-tools-that-support-jenkins-development"><a class="anchor" href="#jetbrains-tools-that-support-jenkins-development" />JetBrains: Tools that Support Jenkins Development</h2> <div class="sectionbody"> <div class="paragraph"> <p><span class="image"><a class="image" href="https://jb.gg/OpenSource"><img src="https://www.jenkins.io/images/post-images/2025/07/jetbrains-logo.svg" alt="JetBrains logo" /></a></span> </p> <div class="paragraph"> <p>JetBrains develops a comprehensive set of development tools that cover many programming languages and workflows. IntelliJ IDEA Ultimate Edition, in particular, is a popular choice among Jenkins contributors for its advanced code analysis, refactoring tools, and seamless integration with build and test systems.</p> </div> </div> </div> <div class="sect1"> <h2 id="how-to-request-a-license"><a class="anchor" href="#how-to-request-a-license" />How to Request a License</h2> <div class="sectionbody"> <div class="paragraph"> <p>If you’re a core maintainer or active contributor to Jenkins and would like to receive a JetBrains All Products Pack subscription, please contact Alexander Brandes (@NotMyFault) via email. His contact details are available on his GitHub profile: <a href="https://github.com/NotMyFault" class="bare">https://github.com/NotMyFault</a></p> </div> <div class="paragraph"> <p>Include your GitHub handle and a brief note indicating your interest in a JetBrains subscription for the Jenkins community.</p> </div> </div> </div> <div class="sect1"> <h2 id="thank-you"><a class="anchor" href="#thank-you" />Thank You</h2> <div class="sectionbody"> <div class="paragraph"> <p>We sincerely thank JetBrains for their generous support of the Jenkins project. Their sponsorship helps us continue to improve Jenkins, making it a better tool for our users worldwide.</p> </div> </div> </div></div> https:/www.jenkins.io/blog/2025/06/25/Celebrating-the-2025-Jenkins-Contributor-Award-Winners/ 🌟 Celebrating the 2025 Jenkins Contributor Award Winners 2026-03-19T18:14:09+00:00 2025-06-25T00:00:00+00:00 At cdCon 2025 in Colorado this week, we proudly recognized outstanding contributions within both the Continuous Delivery Foundation (CDF) and the Jenkins community. These awards celebrate exceptional ambassadors, contributors, documentation champions, and users who drive CI/CD excellence. 🎖️ Jenkins Project Honors Jenkins presented three distinguished awards: Jenkins Security MVP Most Valuable Jenkins Contributor Most Valuable Jenkins Advocate 🏅 Award Recipients Most Valuable Contributor: Jan Faracik Jan has made tremendous contributions to the UI/UX front of the Jenkins project as the UI/UX SIG Lead, not just this year but throughout the years, and for helping to foster a collaborative environment especially in helping newcomers of the Jenkins ecosystem... <div class="paragraph"> <p>At <a href="https://www.jenkins.io//cd.foundation/cdcon-2025/">cdCon 2025 in Colorado</a> this week, we proudly recognized outstanding contributions within both the Continuous Delivery Foundation (CDF) and the Jenkins community. These awards celebrate exceptional ambassadors, contributors, documentation champions, and users who drive CI/CD excellence.</p> </div> <div class="paragraph"> <p><strong>🎖️ Jenkins Project Honors</strong></p> </div> <div class="paragraph"> <p>Jenkins presented three distinguished awards:</p> </div> <div class="ulist"> <ul> <li> <p>Jenkins Security MVP</p> </li> <li> <p>Most Valuable Jenkins Contributor</p> </li> <li> <p>Most Valuable Jenkins Advocate</p> </li> </ul> </div> <div class="paragraph"> <p><strong>🏅 Award Recipients</strong></p> </div> <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/avatars/janfaracik.jpg" alt="image" width="99" height="99" /> <strong>Most Valuable Contributor: <a href="https://github.com/janfaracik">Jan Faracik</a></strong></span> </p> <div class="paragraph"> <p>Jan has made tremendous contributions to the UI/UX front of the Jenkins project as the UI/UX SIG Lead, not just this year but throughout the years, and for helping to foster a collaborative environment especially in helping newcomers of the Jenkins ecosystem via code reviews.</p> </div> <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2023/05/16/2023-05-16-jenkins-2023-award-winners/image3.png" alt="image" width="99" height="99" /> <strong>Security MVP: <a href="https://github.com/daniel-beck">Daniel Beck</a></strong></span> </p> <div class="paragraph"> <p>Daniel brought skills and thorough efforts to maintain and improve the security of Jenkins. His code reviews for Jenkins core are great examples of attention to detail and awareness of impact. He reviews security threats carefully and keeps himself current on recent security topics. He works well with release leads when delivering Jenkins security releases and works well with the Jenkins infrastructure team in many different areas.</p> </div> <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2024/04/19/stefan-spieker.png" alt="image" width="99" height="99" /> <strong>Most Valuable Advocate: <a href="https://github.com/StefanSpieker">Stefan Spieker</a></strong></span> </p> <div class="paragraph"> <p>Stefan has made continuous efforts in advocating Jenkins in his company with excellent explanations and showcases. He organized Hacktoberfest, and encouraged other colleagues to contribute to Open Source, specifically Jenkins. He speaks at conferences to advocate for Jenkins. He also wrote a successful book where he shared his insights on the open source and Jenkins.</p> </div> <div class="paragraph"> <p><strong>📌 Closing Thoughts</strong></p> </div> <div class="paragraph"> <p>These award winners exemplify the collaborative spirit that drives the Jenkins community forward. By spotlighting their achievements, we shine a light on security vigilance, code craftsmanship, educational outreach, and unwavering community support.</p> </div> <div class="paragraph"> <p>Every nominee deserves a huge thank you and congratulations - your contributions are felt through the performance and reliability Jenkins provides users.</p> </div> <div class="paragraph"> <p>Thank you to every voter, and participant who submitted nominations - your involvement continues to make Jenkins thrive.</p> </div></div></div></div> https:/www.jenkins.io/blog/2025/06/11/chirag-gupta-gsoc-community-bonding-blog-post/ Meet Chirag Gupta, GSoC 2025 Contributor Building an LLM for Jenkins Failure Diagnosis 2026-03-19T18:14:09+00:00 2025-06-11T00:00:00+00:00 Hello, Jenkins Community! I’m Chirag Gupta, and I’m incredibly excited to announce that I’ve been selected for the Google Summer of Code 2025 program to work with the Jenkins project! It’s an honor to contribute to such a cornerstone of the open-source CI/CD landscape. My project, "Domain-specific LLM based on actual Jenkins usage using ci.jenkins.io data," aims to create a specialized Large Language Model (LLM) to assist Jenkins users in diagnosing build failures more effectively. The core idea is to leverage the wealth of real-world data from ci.jenkins.io to fine-tune an LLM, making it adept at understanding Jenkins-specific issues. You can check... <div class="paragraph"> <p>Hello, Jenkins Community!</p> </div> <div class="paragraph"> <p>I’m Chirag Gupta, and I’m incredibly excited to announce that I’ve been selected for the Google Summer of Code 2025 program to work with the Jenkins project! It’s an honor to contribute to such a cornerstone of the open-source CI/CD landscape.</p> </div> <div class="paragraph"> <p>My project, <strong>"Domain-specific LLM based on actual Jenkins usage using ci.jenkins.io data,"</strong> aims to create a specialized Large Language Model (LLM) to assist Jenkins users in diagnosing build failures more effectively. The core idea is to leverage the wealth of real-world data from <code>ci.jenkins.io</code> to fine-tune an LLM, making it adept at understanding Jenkins-specific issues. You can check out <a href="https://www.jenkins.io/projects/gsoc/2025/projects/domain-specific-LLM-based-on-jenkins-usage-using-ci-jenkins-io-data/">my project</a> for more details.</p> </div> <div class="sect1"> <h2 id="diving-in-the-community-bonding-period"><a class="anchor" href="#diving-in-the-community-bonding-period" />Diving In: The Community Bonding Period</h2> <div class="sectionbody"> <div class="paragraph"> <p>The past few weeks of the community bonding period have been an invaluable learning experience, focused on laying a solid foundation for the coding phases ahead:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Deep Dive into ci.jenkins.io Data:</strong> The dataset is the lifeblood of the project. I’ve been exploring its structure, which includes a vast array of build logs, XML metadata (<code>build.xml</code>, <code>changelog.xml</code>, <code>config.xml</code>), and other artifacts. Understanding the sheer scale (approx. 400,000 files!) and the diversity within this data is crucial. My initial analysis, as outlined in my proposal, has focused on identifying key characteristics, potential challenges (like log noise and token inflation), and patterns that will inform our data preprocessing and fine-tuning strategies.</p> </li> <li> <p><strong>Understanding the Jenkins Ecosystem:</strong> Beyond the data, I’ve been deepening my understanding of Jenkins CI/CD principles, common failure scenarios, and existing tools like the Build Failure Analyzer and Log Parser. This broader context is essential for building a truly useful LLM.</p> </li> <li> <p><strong>Collaboration with Mentors:</strong> I’ve had insightful discussions with my mentors, Kris Stern, Shivay Lamba, Bruno Verachten, Harsh Pratap Singh, and Vutukuri Sreenivas. Their expertise and guidance have been instrumental in refining the project’s technical roadmap, from model selection (exploring options like Phi-4 and Qwen) to planning our evaluation strategies.</p> </li> </ul> </div> <div class="paragraph"> <p>The bonding period has truly highlighted the importance of high-quality, structured data for effective LLM training. The <code>ci.jenkins.io</code> dataset, with its real-world complexities, offers both a significant challenge and a fantastic opportunity.</p> </div> </div> </div> <div class="sect1"> <h2 id="what-lies-ahead"><a class="anchor" href="#what-lies-ahead" />What Lies Ahead?</h2> <div class="sectionbody"> <div class="paragraph"> <p>As we transition into the coding period, the immediate focus will be on:</p> </div> <div class="ulist"> <ul> <li> <p>Implementing robust log cleaning and preprocessing pipelines.</p> </li> <li> <p>Systematically parsing metadata to create a comprehensive index of builds and their outcomes.</p> </li> <li> <p>Beginning the critical task of structuring the data into a format suitable for fine-tuning our chosen LLM, including generating QA pairs.</p> </li> <li> <p>Preparing for and executing the initial fine-tuning runs.</p> </li> </ul> </div> <div class="paragraph"> <p>I’m incredibly excited to move forward and start bringing this project to life. I believe that an LLM tailored for Jenkins can significantly enhance the user experience by providing more intuitive and actionable insights into build issues, and also reduce the time taken by people to parse their build failures.</p> </div> <div class="paragraph"> <p>A heartfelt thank you to my mentors and the entire Jenkins community for this amazing opportunity and for the warm welcome. I’m eager to learn, contribute, and share my progress with all of you.</p> </div> <div class="paragraph"> <p>Let’s build a smarter Jenkins together!</p> </div> </div> </div> https:/www.jenkins.io/blog/2025/06/06/raunak-madan-gsoc-community-bonding-blog-post/ Meet Raunak Madan – GSoC 2025 Contributor Working on Improving Plugin Modernizer Tool 2026-03-19T18:14:09+00:00 2025-06-06T00:00:00+00:00 Hey everyone, I am Raunak Madan, currently in my sophomore year pursuing my Bachelor’s in Computer Applications. It’s been fun and engaging working with such an amazing community in the past couple of weeks. Table of Contents About the Plugin Modernizer Tool What I did in the Community Bonding Period? What lies ahead (Coding Period)? Acknowledgements Useful Links About the Plugin Modernizer Tool The Plugin Modernizer Tool is a generic CLI tool designed to automate the modernization of Jenkins plugins. It utilizes OpenRewrite recipes to apply transformations to the plugin, validating the applied transformations and creating pull requests with the results. For a detailed description of the project, please refer... <div class="paragraph"> <p>Hey everyone, I am Raunak Madan, currently in my sophomore year pursuing my Bachelor’s in Computer Applications. It’s been fun and engaging working with such an amazing community in the past couple of weeks.</p> </div> <div class="sect1"> <h2 id="table-of-contents"><a class="anchor" href="#table-of-contents" />Table of Contents</h2> <div class="sectionbody"> <div class="olist arabic"> <ol class="arabic"> <li> <p><a href="#about-the-plugin-modernizer-tool">About the Plugin Modernizer Tool</a></p> </li> <li> <p><a href="#what-i-did-in-the-community-bonding-period">What I did in the Community Bonding Period?</a></p> </li> <li> <p><a href="#what-lies-ahead-coding-period">What lies ahead (Coding Period)?</a></p> </li> <li> <p><a href="#acknowledgements">Acknowledgements</a></p> </li> <li> <p><a href="#useful-links">Useful Links</a></p> </li> </ol> </div> </div> </div> <div class="sect1"> <h2 id="about-the-plugin-modernizer-tool"><a class="anchor" href="#about-the-plugin-modernizer-tool" />About the Plugin Modernizer Tool</h2> <div class="sectionbody"> <div class="paragraph"> <p>The <a href="https://github.com/jenkins-infra/plugin-modernizer-tool">Plugin Modernizer Tool</a> is a generic CLI tool designed to automate the modernization of Jenkins plugins. It utilizes OpenRewrite recipes to apply transformations to the plugin, validating the applied transformations and creating pull requests with the results. For a detailed description of the project, please refer to the <a href="https://www.jenkins.io/projects/gsoc/2025/projects/plugin-modernizer-improvements/">project page</a>.</p> </div> <div class="paragraph"> <p>Why is This Tool Important?</p> </div> <div class="paragraph"> <p>With over 2000+ plugins in Jenkins, keeping them updated manually is a daunting task. The Plugin Modernizer Tool automates much of this work, ensuring:</p> </div> <div class="ulist"> <ul> <li> <p>Plugins stay up to date with modern Jenkins practices.</p> </li> <li> <p>Compatibility with the latest Java and Jenkins versions.</p> </li> <li> <p>Reduced technical debt for plugin maintainers.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="what-i-did-in-the-community-bonding-period"><a class="anchor" href="#what-i-did-in-the-community-bonding-period" />What I did in the Community Bonding Period?</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><strong>Contributions:</strong> I worked on enhancing the existing recipes, such as <code>MigrateToJUnit5</code>, adding new recipes - <code>AddThrowsExceptionWhereAssertThrows</code>, fixing bugs, and addressing chore issues like updating the OpenRewrite BOM version and updating test coverage.</p> </li> <li> <p><strong>Documenting Everything:</strong> Maintaining a record of the work done each day on tools like Notion, which helps to track daily progress and ensures transparency, as everyone can see your work and give feedback to improve. It also helps future contributors to see what work has been done.</p> </li> <li> <p><strong>Communication is key:</strong> One of the mentors, <a href="https://www.jenkins.io/blog/authors/gounthar">Bruno Verachten</a> taught me that there is no such thing as “overcommunicating”, definitely asking questions without doing your research is not good, but if you feel there is anything your mentors should know or can help you out, feel free to reach out to them. Communication prevents roadblocks early on.</p> </li> <li> <p><strong>Planning and Scheduling:</strong> Plan the following weeks and months, discussing the proposal’s phases to gain more clarity, and communicate any time commitments, such as exams, to adjust the schedule accordingly.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="what-lies-ahead-coding-period"><a class="anchor" href="#what-lies-ahead-coding-period" />What lies ahead (Coding Period)?</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p>Storing metadata about the modernization process on the <a href="https://reports.jenkins.io/">Jenkins reports site</a> or maybe on an open-source repository for now.</p> </li> <li> <p>Making REST API endpoints to access the modernization metadata.</p> </li> <li> <p>Automating Running Recipes on Plugins with Low Health Scores.</p> </li> <li> <p>Visualizing the metadata on the <a href="https://stats.jenkins.io/">Jenkins Statistics Site</a>.</p> </li> <li> <p>Implementing more recipes that help in the modernization of plugins.</p> </li> </ul> </div> <div class="paragraph"> <p>By automating modernization on plugins with low health scores and providing APIs to access the metadata, we can measure the impact of this tool in the Jenkins ecosystem.</p> </div> <div class="paragraph"> <p>This tool can reduce a lot of technical debt, and with the vast Jenkins Ecosystem, it surely has the potential to create a lot of impact; that’s what is amazing about this project. It will be fun working this summer on the plugin modernizer tool with my amazing team.</p> </div> </div> </div> <div class="sect1"> <h2 id="acknowledgements"><a class="anchor" href="#acknowledgements" />Acknowledgements</h2> <div class="sectionbody"> <div class="paragraph"> <p>I would like to thank my mentors, <a href="https://www.jenkins.io/blog/authors/jonesbusy">Valentin Delaye</a>, <a href="https://www.jenkins.io/blog/authors/gounthar">Bruno Verachten</a>, <a href="https://www.jenkins.io/blog/authors/sridamul">Sridhar Sivakumar</a>, <a href="https://www.jenkins.io/blog/authors/TheMeinerLP">Phillipp Glanz</a>, and the community for giving me this opportunity. I am excited to learn, contribute, and share my experience with others.</p> </div> </div> </div> <div class="sect1"> <h2 id="useful-links"><a class="anchor" href="#useful-links" />Useful Links</h2> <div class="sectionbody"> <div class="paragraph"> <p>You can find all the project-related notes and discussions here:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://sedate-marscapone-74c.notion.site/208fcbf0cc328028b936c73963de640b?v=208fcbf0cc3280dd8f94000c986ac3a3">Weekly Meetings</a></p> </li> <li> <p><a href="https://sedate-marscapone-74c.notion.site/GSoC-Jenkins-Improving-Plugin-Modernizer-206fcbf0cc328085b44ffefae8f232e8">Daily Progress/Notes</a></p> </li> </ul> </div> </div> </div> https:/www.jenkins.io/blog/2025/06/06/giovanni-vaccarino-gsoc-community-bonding-blog-post/ Meet Giovanni Vaccarino GSoC 2025 Contributor Working on AI-Powered Chatbot for Quick Access to Jenkins Resources 2026-03-19T18:14:09+00:00 2025-06-06T00:00:00+00:00 Hello everyone! I’m Giovanni Vaccarino, and I’m excited to be part of Google Summer of Code 2025 as a contributor to the Jenkins project. This summer, I’ll be working on building an AI-Powered Chatbot for Quick Access to Jenkins Resources, a project aimed at creating a Jenkins plugin that integrates an AI chatbot that helps users to quickly find relevant Jenkins documentation, plugins, and other community resources. Kicking Off the Journey Just a day after the official GSoC announcements, we had a warm welcome session with all Jenkins mentors and mentees. We had the opportunity to introduce ourselves and break the ice. Seeing... <div class="paragraph"> <p>Hello everyone!</p> </div> <div class="paragraph"> <p>I’m Giovanni Vaccarino, and I’m excited to be part of Google Summer of Code 2025 as a contributor to the Jenkins project. This summer, I’ll be working on building an <strong>AI-Powered Chatbot for Quick Access to Jenkins Resources</strong>, a project aimed at creating a Jenkins plugin that integrates an AI chatbot that helps users to quickly find relevant Jenkins documentation, plugins, and other community resources.</p> </div> <div class="sect1"> <h2 id="kicking-off-the-journey"><a class="anchor" href="#kicking-off-the-journey" />Kicking Off the Journey</h2> <div class="sectionbody"> <div class="paragraph"> <p>Just a day after the official GSoC announcements, we had a warm welcome session with all Jenkins mentors and mentees. We had the opportunity to introduce ourselves and break the ice. Seeing how dedicated the other mentees are to their projects and how supportive the community it has been fantastic.</p> </div> <div class="paragraph"> <p>A few days after, I had my first dedicated project meeting, where I got to connect with my mentors. That’s when things started moving fast as my mentors proposed to start coding immediately, with the idea of delivering an MVP by the start of the coding period.</p> </div> </div> </div> <div class="sect1"> <h2 id="project-description"><a class="anchor" href="#project-description" />Project Description</h2> <div class="sectionbody"> <div class="paragraph"> <p>The project aims to support the Jenkins users by providing an intuitive, conversational assistant embedded directly into the Jenkins UI, via a plugin.</p> </div> <div class="paragraph"> <p>It will use a Retrieval-Augmented Generation (RAG) architecture to search through official documentation, Discourse threads, and StackOverflow posts. The backend will be powered by a locally hosted quantized LLM served via FastAPI, while the frontend, built with React and TypeScript, will provide a modern and quick-access to the assistant.</p> </div> </div> </div> <div class="sect1"> <h2 id="community-bonding-period-works"><a class="anchor" href="#community-bonding-period-works" />Community Bonding Period Works</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p>Joined onboarding and introductory call with Jenkins GSoC mentors and org admins.</p> </li> <li> <p>Attended a couple of meetings with mentors.</p> </li> <li> <p>Maintained a daily diary document to track my tasks, considerations, and questions.</p> </li> <li> <p>Set up the development environment, forking the plugin repository.</p> </li> <li> <p>Worked on the RAG pipeline, initial user interface, and API integration.</p> </li> <li> <p>Opened and merged: <a href="https://github.com/jenkinsci/resources-ai-chatbot-plugin/pull/1">#1</a> (data collection), <a href="https://github.com/jenkinsci/resources-ai-chatbot-plugin/pull/3">#3</a> (data preprocessing), <a href="https://github.com/jenkinsci/resources-ai-chatbot-plugin/pull/6">#6</a> (chunking), <a href="https://github.com/jenkinsci/resources-ai-chatbot-plugin/pull/8">#8</a> (standardized logging).</p> </li> <li> <p>Opened (under review): <a href="https://github.com/jenkinsci/resources-ai-chatbot-plugin/pull/7">#7</a> (user interface), <a href="https://github.com/jenkinsci/resources-ai-chatbot-plugin/pull/9">#9</a> (embedding &amp; storage), <a href="https://github.com/jenkinsci/resources-ai-chatbot-plugin/pull/10">#10</a> (API integration).</p> </li> <li> <p>Performed additional research to maximize RAG performance.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="what-ive-learned-so-far"><a class="anchor" href="#what-ive-learned-so-far" />What I’ve Learned So Far</h2> <div class="sectionbody"> <div class="paragraph"> <p>The first few weeks taught me a lot about working in a production-scale environment. In particular, my top three takeaways so far are:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Communicating</strong> clearly and consistently, in PRs, issues, and chat discussions.</p> </li> <li> <p>Thinking like a <strong>maintainer</strong>, taking care of future supported versions, and writing clear documentation for future contributors.</p> </li> <li> <p>The importance of <strong>attention to details</strong>, especially when handling edge cases, and producing significative, helpful logs.</p> </li> </ul> </div> <div class="paragraph"> <p>Without any doubts there’s still a lot to learn, but I’m happy of the progress made so far.</p> </div> </div> </div> <div class="sect1"> <h2 id="my-gsoc-coding-period-goals"><a class="anchor" href="#my-gsoc-coding-period-goals" />My GSoC Coding Period Goals</h2> <div class="sectionbody"> <div class="paragraph"> <p>Thanks to the starting point built during the bonding period, I’m going to focus on deeper development in key areas:</p> </div> <div class="ulist"> <ul> <li> <p>Maximize RAG performance, exploring searching techniques.</p> </li> <li> <p>Work on prompt engineering and apply evaluation strategies such as LLM-as-a-Judge.</p> </li> <li> <p>Enhance the user interface, improving both functionality and user experience.</p> </li> <li> <p>Provide testing coverage across frontend and backend components.</p> </li> <li> <p>Writing contributor documentation and usage guides to facilitate community involvement.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="future-plans"><a class="anchor" href="#future-plans" />Future Plans</h2> <div class="sectionbody"> <div class="paragraph"> <p>Post GSoC, I plan to continue contributing to Jenkins. In particular I would love to continue improving the plugin I’m building, proposing and implementing future improvements.</p> </div> </div> </div> <div class="sect1"> <h2 id="acknowledgements"><a class="anchor" href="#acknowledgements" />Acknowledgements</h2> <div class="sectionbody"> <div class="paragraph"> <p>A huge thank you to my mentors — <strong>Vutukuri Sreenivas</strong>, <strong>Kris Stern</strong>, <strong>Bervianto Leo Pratama</strong>, and <strong>Bruno Verachten</strong>— for their support and guidance. I’m especially grateful for their quick and active involvement in reviewing my pull requests, which has allowed me to move forward quickly.</p> </div> <div class="paragraph"> <p>Also, a big thanks to the Jenkins org admins — <strong>Kris Stern</strong>, <strong>Bruno Verachten</strong>, and <strong>Alyssa Tong</strong> — for the opportunity and for having such a welcoming, vibrant community.</p> </div> </div> </div> <div class="sect1"> <h2 id="follow-along"><a class="anchor" href="#follow-along" />Follow Along</h2> <div class="sectionbody"> <div class="paragraph"> <p>Take a look at the plugin’s repository: <a href="https://github.com/jenkinsci/resources-ai-chatbot-plugin">GitHub Repo</a></p> </div> <div class="paragraph"> <p>You can contact me:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://www.linkedin.com/in/giovanni-vaccarino-931686258/">LinkedIn</a></p> </li> <li> <p><a href="https://github.com/giovanni-vaccarino">GitHub</a></p> </li> </ul> </div> <div class="paragraph"> <p>I’m excited for the summer months ahead and to keep building with the Jenkins community!</p> </div> </div> </div> https:/www.jenkins.io/blog/2025/06/04/maeve-ho-gsoc-community-bonding-blog-post/ Introducing Maeve Ho – GSoC 2025 Contributor Enhancing Tekton Integration in Jenkins 2026-03-19T18:14:09+00:00 2025-06-04T00:00:00+00:00 Hi everyone! 👋 I’m Maeve Ho, a GSoC 2025 contributor working with the Jenkins community to enhance the Tekton Client Plugin. My project focuses on delivering full CRUD (Create, Read, Update, Delete) capabilities for Tekton resources from within Jenkins — a step forward in unifying Jenkins pipelines with Kubernetes-native CI/CD automation. Project Description Tekton is a powerful framework for cloud-native CI/CD, but Jenkins users currently face limitations when managing Tekton resources — only basic creation and deletion are supported. My goal is to fill that gap by implementing full lifecycle operations, enabling Jenkins to interact deeply with: Tasks and ClusterTasks Pipelines PipelineRuns and TaskRuns Triggers, TriggerBindings, and... <div class="paragraph"> <p><span class="image right center"><img src="https://www.jenkins.io/images/gsoc/jenkins-gsoc-transparent.png" alt="Jenkins GSoC" /></span> </p> <div class="paragraph"> <p>Hi everyone! 👋</p> </div> <div class="paragraph"> <p>I’m Maeve Ho, a GSoC 2025 contributor working with the Jenkins community to enhance the <strong>Tekton Client Plugin</strong>. My project focuses on delivering full CRUD (Create, Read, Update, Delete) capabilities for Tekton resources from within Jenkins — a step forward in unifying Jenkins pipelines with Kubernetes-native CI/CD automation.</p> </div> <div class="sect1"> <h2 id="project-description"><a class="anchor" href="#project-description" />Project Description</h2> <div class="sectionbody"> <div class="paragraph"> <p>Tekton is a powerful framework for cloud-native CI/CD, but Jenkins users currently face limitations when managing Tekton resources — only basic creation and deletion are supported. My goal is to fill that gap by implementing full lifecycle operations, enabling Jenkins to interact deeply with:</p> </div> <div class="ulist"> <ul> <li> <p><code>Tasks</code> and <code>ClusterTasks</code></p> </li> <li> <p><code>Pipelines</code></p> </li> <li> <p><code>PipelineRuns</code> and <code>TaskRuns</code></p> </li> <li> <p><code>Triggers</code>, <code>TriggerBindings</code>, and <code>TriggerTemplates</code></p> </li> </ul> </div> <div class="paragraph"> <p>These enhancements will allow teams to visualize, modify, and automate Tekton workflows directly in Jenkins, helping reduce tool fragmentation and streamline Kubernetes CI/CD adoption.</p> </div> </div> </div> <div class="sect1"> <h2 id="community-bonding-period-works"><a class="anchor" href="#community-bonding-period-works" />Community Bonding Period Works</h2> <div class="sectionbody"> <div class="paragraph"> <p>The community bonding phase gave me a valuable opportunity to understand the ecosystem and set a strong technical foundation. I:</p> </div> <div class="ulist"> <ul> <li> <p>Set up a local Jenkins + Minikube environment for full-stack plugin testing.</p> </li> <li> <p>Explored the current plugin codebase and documented its architecture.</p> </li> <li> <p>Reviewed Kubernetes client methods and Tekton CRD structures.</p> </li> <li> <p>Collaborated with mentors (<strong>@krisstern</strong>, <strong>@gounthar</strong>, <strong>@waveywaves</strong>) to finalize feature scope and workflow design.</p> </li> <li> <p>Drafted a comprehensive technical plan outlining the API extensions, validation logic, and Jenkins pipeline step design.</p> </li> <li> <p>Opened <a href="https://github.com/jenkinsci/tekton-client-plugin/pull/390">#390</a> to upgrade the plugin to Java 17 and Jenkins 2.492.3, resolving Maven enforcer violations, removing legacy dependencies, and verifying runtime compatibility via <code>mvn hpi:run</code> and Jenkins UI.</p> </li> <li> <p>Ran successful builds and confirmed <code>.hpi</code> generation; currently triaging 9 failing tests and reviewing CI failures (SpotBugs, Javadoc, junit).</p> </li> </ul> </div> <div class="paragraph"> <p>These early efforts ensure that the coding phase starts with clarity and purpose.</p> </div> </div> </div> <div class="sect1"> <h2 id="my-gsoc-coding-period-goals"><a class="anchor" href="#my-gsoc-coding-period-goals" />My GSoC Coding Period Goals</h2> <div class="sectionbody"> <div class="paragraph"> <p>Throughout the summer, my deliverables will include:</p> </div> <div class="ulist"> <ul> <li> <p>Fully functional CRUD methods for Tekton resources with type-safe model classes.</p> </li> <li> <p>Read and update logic using Kubernetes API conventions (<code>GET</code>, <code>PATCH</code>, etc.).</p> </li> <li> <p>Secure integration with Jenkins credentials for Kubernetes auth.</p> </li> <li> <p>YAML/JSON parsing and serialization support for Tekton resource specs.</p> </li> <li> <p>Jenkins pipeline steps (e.g. <code>tektonRead</code>, <code>tektonUpdate</code>) exposed via DSL.</p> </li> <li> <p>Unit and integration tests against a local Kubernetes cluster.</p> </li> <li> <p>Example pipelines and user documentation to guide adoption.</p> </li> </ul> </div> <div class="paragraph"> <p>These improvements aim to make Jenkins a more powerful tool in Kubernetes-native CI/CD environments, where teams often rely on both Jenkins and Tekton together.</p> </div> </div> </div> <div class="sect1"> <h2 id="future-plan"><a class="anchor" href="#future-plan" />Future Plan</h2> <div class="sectionbody"> <div class="paragraph"> <p>After GSoC, I plan to stay active in the Jenkins community — maintaining the Tekton Client Plugin, addressing user feedback, and possibly extending the plugin with user interface features like visual task/pipeline run inspectors.</p> </div> </div> </div> <div class="sect1"> <h2 id="background"><a class="anchor" href="#background" />Background</h2> <div class="sectionbody"> <div class="paragraph"> <p>I’m currently studying Computer Science at Lehigh University, Pennsylvania, US. My past experience includes:</p> </div> <div class="ulist"> <ul> <li> <p>Deploying CI/CD pipelines with Jenkins and Kubernetes at VNPT.</p> </li> <li> <p>Designing high-throughput data pipelines and HPC workflows using SLURM.</p> </li> <li> <p>Developing REST APIs with strong error handling and credential isolation.</p> </li> <li> <p>Building open-source projects involving AI, vector search, and caching systems.</p> </li> </ul> </div> <div class="paragraph"> <p>I enjoy projects at the intersection of infrastructure, cloud-native tooling, and developer experience — and this GSoC project is the perfect fit.</p> </div> </div> </div> <div class="sect1"> <h2 id="acknowledgements"><a class="anchor" href="#acknowledgements" />Acknowledgements</h2> <div class="sectionbody"> <div class="paragraph"> <p>Huge thanks to my mentors – <strong>@krisstern</strong>, <strong>@gounthar</strong>, and <strong>@waveywaves</strong> – for their clear guidance, timely feedback, and thoughtful technical advice. I also appreciate the support from the Jenkins GSoC admin team and wider community for making this program welcoming and impactful.</p> </div> </div> </div> <div class="sect1"> <h2 id="follow-along"><a class="anchor" href="#follow-along" />Follow Along</h2> <div class="sectionbody"> <div class="paragraph"> <p>I maintain a public work log documenting technical notes, progress milestones, and debugging steps throughout the project here:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://hackmd.io/@GSoC25-tekton-plugin/S1qKUCuWlg">HackMD Project Log</a></p> </li> </ul> </div> <div class="paragraph"> <p>Contact me:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://github.com/maeveho25">My GitHub</a></p> </li> <li> <p><a href="https://www.linkedin.com/in/maeve-ho/">My LinkedIn</a></p> </li> <li> <p><a href="mailto:[email protected]">My Email</a></p> </li> </ul> </div> <div class="paragraph"> <p>I’m excited to keep learning and building with you all this summer!</p> </div> </div> </div></div> https:/www.jenkins.io/blog/2025/06/03/birajit-saikia-gsoc-community-bonding-blog-post/ Meet Birajit Saikia GSoC 2025 Contributor Working on Complete Build Retooling of jenkins.io 2026-03-19T18:14:09+00:00 2025-06-03T00:00:00+00:00 Hello everyone! I’m Birajit Saikia, and I’m thrilled to be a Google Summer of Code 2025 contributor with Jenkins. This summer, I’ll be working on the Complete Build Retooling of jenkins.io project, which focuses on modernizing and reorganizing the Jenkins documentation infrastructure and updating the tech stack with UI/UX changes. Project Description This project focuses on reworking and improving the Jenkins documentation system to make it more structured, modern, and easier to maintain. The documentation will be split between versioned and non-versioned formats using Antora and Gatsby, respectively. Alongside the migration, we’ll also implement improvements in SEO, metadata, site usability, and a modern... <div class="paragraph"> <p><span class="image right center"><img src="https://www.jenkins.io/images/gsoc/jenkins-gsoc-logo_small.png" alt="Jenkins GSoC" /></span> </p> <div class="paragraph"> <p>Hello everyone!</p> </div> <div class="paragraph"> <p>I’m Birajit Saikia, and I’m thrilled to be a Google Summer of Code 2025 contributor with Jenkins. This summer, I’ll be working on the <a href="https://www.jenkins.io/projects/gsoc/2025/projects/complete-alternative-jenkins-io-build-retooling/">Complete Build Retooling of jenkins.io</a> project, which focuses on modernizing and reorganizing the Jenkins documentation infrastructure and updating the tech stack with UI/UX changes.</p> </div> <div class="sect1"> <h2 id="project-description"><a class="anchor" href="#project-description" />Project Description</h2> <div class="sectionbody"> <div class="paragraph"> <p>This project focuses on reworking and improving the Jenkins documentation system to make it more structured, modern, and easier to maintain. The documentation will be split between versioned and non-versioned formats using Antora and Gatsby, respectively. Alongside the migration, we’ll also implement improvements in SEO, metadata, site usability, and a modern UI/UX built on an updated tech stack to ensure a better experience for contributors and end users alike.</p> </div> </div> </div> <div class="sect1"> <h2 id="community-bonding-period-works"><a class="anchor" href="#community-bonding-period-works" />Community Bonding Period Works</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p>Worked on multiple issues to improve documentation, fix broken links on jenkins.io repo.</p> <div class="ulist"> <ul> <li> <p><a href="https://github.com/jenkins-infra/jenkins.io/pull/8095">#8095</a>, <a href="https://github.com/jenkins-infra/jenkins.io/pull/8103">#8103</a>, <a href="https://github.com/jenkins-infra/jenkins.io/pull/8109">#8109</a>, <a href="https://github.com/jenkins-infra/jenkins.io/pull/8110">#8110</a>, <a href="https://github.com/jenkins-infra/jenkins.io/pull/8113">#8113</a>, <a href="https://github.com/jenkins-infra/jenkins.io/pull/8116">#8116</a>, <a href="https://github.com/jenkins-infra/jenkins.io/pull/8135">#8135</a>, <a href="https://github.com/jenkins-infra/jenkins.io/pull/8136">#8136</a>, <a href="https://github.com/jenkins-infra/jenkins.io/pull/8150">#8150</a>, <a href="https://github.com/jenkins-infra/jenkins.io/pull/8151">#8151</a></p> </li> </ul> </div> </li> <li> <p>Created a PR to resolve the React dependency issue: <a href="https://github.com/jenkins-infra/docs.jenkins.io/pull/285">#285</a></p> </li> <li> <p>Initiated the process of syncing the docs.jenkins.io repository with the latest file structure and content from the jenkins.io repository to ensure consistency and up-to-date information.</p> </li> <li> <p>Had our first weekly meeting on the 20th of May.</p> </li> <li> <p>Created a detailed task-tracking checklist in Notion based on meeting discussions and shared it with the mentors to streamline ongoing and upcoming work.</p> </li> <li> <p>Opened a GitHub issue to track metadata/SEO enhancement for docs.jenkins.io.</p> </li> <li> <p>Part 1 <a href="https://github.com/jenkins-infra/docs.jenkins.io/pull/296">#296</a>, part 2 <a href="https://github.com/jenkins-infra/docs.jenkins.io/pull/299">#299</a>, part 3 <a href="https://github.com/jenkins-infra/docs.jenkins.io/pull/300">#300</a>, part 4 <a href="https://github.com/jenkins-infra/docs.jenkins.io/pull/302">#302</a>, and image addition part 1 <a href="https://github.com/jenkins-infra/docs.jenkins.io/pull/303">#303</a> of updating the docs.jenkins.io are created</p> </li> <li> <p>Created the basic Gatsby new site repo GATSBY SITE.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="my-gsoc-coding-period-goals"><a class="anchor" href="#my-gsoc-coding-period-goals" />My GSoC Coding Period Goals</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p>Complete syncing of content from jenkins.io to docs.jenkins.io</p> </li> <li> <p>Build the new Gatsby.js site</p> </li> <li> <p>Define a clean separation of versioned and non-versioned documentation</p> </li> <li> <p>Set up and test Antora and Gatsby builds</p> </li> <li> <p>Add basic SEO/meta configurations and plan long-term enhancements</p> </li> <li> <p>Make UI improvements that align with a modern developer experience</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="future-plans"><a class="anchor" href="#future-plans" />Future Plans</h2> <div class="sectionbody"> <div class="paragraph"> <p>After GSoC, I plan to continue contributing to Jenkins, particularly around documentation, web development, and UI improvements. I’d also love to contribute as a mentor in the future and help newcomers get started with open-source just like I did. Beyond documentation, I also plan to explore more plugin development work within Jenkins as I deepen my understanding of advanced Java.</p> </div> </div> </div> <div class="sect1"> <h2 id="background"><a class="anchor" href="#background" />Background</h2> <div class="sectionbody"> <div class="paragraph"> <p>I’m currently a first-year B.Tech student in CSE (AI &amp; ML) at Newton School of Technology, India. I started contributing to open-source through Jenkins in Nov 2024 and gradually learned the ropes of collaboration, version control, documentation systems, and web development. My interests lie in full-stack development, documentation, and developer tooling. Over time, I’ve contributed across both jenkinsci and jenkins-infra repositories. Software development is where I see my future, and this opportunity with GSoC is a major step in that direction.</p> </div> </div> </div> <div class="sect1"> <h2 id="acknowledgements"><a class="anchor" href="#acknowledgements" />Acknowledgements</h2> <div class="sectionbody"> <div class="paragraph"> <p>A big thank you to my mentors - <strong>Kris Stern</strong>, <strong>Bruno Verachten</strong>, <strong>Kevin Martens</strong>, and <strong>Rajiv Singh</strong> for their guidance and encouragement. Their insights have been instrumental even in the bonding period, and I’m excited to build with their support throughout the summer.</p> </div> <div class="paragraph"> <p>Also, thanks to the org admins - <strong>Kris Stern</strong>, <strong>Bruno Verachten</strong>, and <strong>Alyssa Tong</strong> for giving me this wonderful opportunity to work on this project.</p> </div> </div> </div> <div class="sect1"> <h2 id="conclusion"><a class="anchor" href="#conclusion" />Conclusion</h2> <div class="sectionbody"> <div class="paragraph"> <p>Being a part of GSoC 2025 is both an honor and a responsibility. It’s not just about writing code; it’s about learning, collaborating, and contributing to something that benefits developers worldwide. I’m eager to grow through this journey and give back to the Jenkins community in every way I can. This is just the beginning, and I’m looking forward to the challenges and learning that lie ahead.</p> </div> </div> </div> <div class="sect1"> <h2 id="follow-along"><a class="anchor" href="#follow-along" />Follow Along</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><a href="https://github.com/biru-codeastromer/My-GSoC-Jenkins-2025">My GSoC 2025 GitHub Repo</a></p> </li> <li> <p><a href="https://www.linkedin.com/in/birajit-saikia-08125030a/">LinkedIn</a></p> </li> <li> <p><a href="https://github.com/biru-codeastromer">GitHub</a></p> </li> <li> <p><a href="https://x.com/birajit_dev">Twitter</a></p> </li> </ul> </div> <div class="paragraph"> <p>Looking forward to a productive summer with the Jenkins community!</p> </div> <div class="paragraph"> <p>Feel free to reach out to me via the Jenkins GSoC Gitter channel (@biru-codeastromer:gitter.im) or on the Jenkins Discourse forum (@biru-codeastromer).</p> </div> </div> </div></div> https:/www.jenkins.io/blog/2025/05/22/jenkins-on-android/ Android and Jenkins: What Is the Limit? Part Two. 2026-03-19T18:14:09+00:00 2025-05-22T00:00:00+00:00 I know it’s been over two years since the first article of this series, but hey, life happens! I’ve been juggling quite a few things that are more important for the Jenkins project. Let’s face it, nobody’s losing sleep over running Jenkins on Android. But hey, sometimes you just gotta indulge in a bit of tech whimsy, am I right? So, here we are, diving back into this almost frivolous experiment to see just how far we can push the Jenkins-Android interaction. There are essentially two ways to stretch the boundaries with Jenkins and Android: Building Android apps with Jenkins Running Jenkins on an Android device Now, the... <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/05/22/2025-05-22-jenkins-on-android/love-part-2-16-9.png" alt="jenkins hugging bugdroid" width="500" /></span> </p> <div class="paragraph"> <p>I know it’s been over two years since <a href="https://www.jenkins.io/blog/2023/03/30/android-and-jenkins/">the first article</a> of this series, but hey, life happens! I’ve been juggling quite a few things that are more important for the Jenkins project. Let’s face it, nobody’s losing sleep over running Jenkins on Android. But hey, sometimes you just gotta indulge in a bit of tech whimsy, am I right?</p> </div> <div class="paragraph"> <p>So, here we are, diving back into this almost frivolous experiment to see just how far we can push the Jenkins-Android interaction. There are essentially two ways to stretch the boundaries with Jenkins and Android:</p> </div> <div class="olist arabic"> <ol class="arabic"> <li> <p>Building Android apps with Jenkins</p> </li> <li> <p>Running Jenkins on an Android device</p> </li> </ol> </div> <div class="paragraph"> <p>Now, the first option has already had its moment in the spotlight in another series of articles, so we’re turning our attention to the latter. Why, you might ask? Well, because why not? Because we’re tech enthusiasts, and if there’s a crazy idea floating around, we’re going to give it a try!</p> </div> <div class="sect1"> <h2 id="setting-up-a-jenkins-controller-on-android"><a class="anchor" href="#setting-up-a-jenkins-controller-on-android" />Setting up a Jenkins controller on Android</h2> <div class="sectionbody"> <div class="paragraph"> <p>In <a href="https://www.jenkins.io/blog/2023/03/30/android-and-jenkins/">the previous article</a>, we already laid the groundwork for running a Jenkins agent on Android. We installed <a href="https://wiki.termux.com/">Termux</a>, <a href="https://www.openssh.com/">OpenSSH</a>, and <a href="https://www.jenkins.io/blog/2023/03/30/android-and-jenkins/#installing-java-on-termux">Java</a> on the Android device, and confirmed that the agent could be reached from a grown-up Jenkins controller. We even got it to run a FreeStyle pipeline that spat out the result of the <code>uname -a</code> command.<br> Quite the achievement, huh?</br> </p> <div class="paragraph"> <p>For this experiment, we’re sticking with my old Redmi Note 7, still chugging along with Android 10. Now, keep in mind, this device got benched because it couldn’t keep up with my daily pace, so it’s not exactly a powerhouse for Jenkins. Sure, I could’ve slapped Linux on it instead, but where’s the fun in taking the easy route, right? Let’s see if we can kickstart a Jenkins controller on this bad boy!</p> </div> <div class="sect2"> <h3 id="launching-the-controller-via-java-command"><a class="anchor" href="#launching-the-controller-via-java-command" />Launching the controller via Java command</h3> <div class="paragraph"> <p>Now, I’ve dabbled with memory-constrained devices before, and I know a Jenkins controller can work with a measly 1GB of RAM. I have no clue how much of that sweet memory pie the Android system will serve up to Termux, or how much Termux will pass along to the JVM, but hey, let’s roll the dice! When I SSH in from my PC, here’s what I see:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="shell">☎ Jenkins@localhost:~ <span class="nv">$free</span> <span class="nt">-h</span> total used free shared buff/cache available Mem: 3.6Gi 2.1Gi 80Mi 3.0Mi 1.5Gi 1.3Gi Swap: 2.2Gi 1.6Gi 623Mi</code></pre> </div> </div> <div class="paragraph"> <p>Looks like we’re sitting on a cozy 3.6GB of RAM, which should be just about enough to wrangle a Jenkins controller into submission. Let’s fire it up using the trusty <code>jenkins.war</code> file, the lazy dev’s best friend!<br> But first, a quick pit stop to grab the <a href="https://get.jenkins.io/war-stable/latest/jenkins.war">latest LTS version of Jenkins</a>.<br> <a href="https://www.jenkins.io/download/#downloading-jenkins">The official documentation</a> says it’s <code>2.504.1</code> at the time of writing, but, you know, details.</br> </br> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">pkg <span class="nb">install </span>curl</code></pre> </div> </div> <div class="paragraph"> <p>Now, with our newfound love for curl, let’s snag that <code>jenkins.war</code> file:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">curl <span class="nt">-L</span> <span class="nt">-O</span> https://get.jenkins.io/war-stable/latest/jenkins.war</code></pre> </div> </div> <div class="paragraph"> <p>The next step is to grab a newer version of Java, as things have changed quite a lot since our first experiment!</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">pkg <span class="nb">install </span>fontconfig freetype openjdk-21 ttf-dejavu</code></pre> </div> </div> <div class="paragraph"> <p>Installing fonts with your JDK may feel like inviting a violinist to a rock concert — but Jenkins insists. Without them, it simply refuses to show up.</p> </div> <div class="paragraph"> <p>With the file safely in our grasp, it’s showtime! Let’s unleash Jenkins upon this unsuspecting Android device:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">java <span class="nt">-jar</span> jenkins.war</code></pre> </div> </div> <div class="paragraph"> <p>The familiar lines start flowing:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">☎ Jenkins@localhost:~<span class="nv">$ </span>java <span class="nt">-jar</span> jenkins.war Running from: /data/data/com.termux/files/home/jenkins.war webroot: /data/data/com.termux/files/home/.jenkins/war 2025-05-20 20:09:14.289+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>1] INFO winstone.Logger#logInternal: Beginning extraction from war file 2025-05-20 20:09:16.517+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>1] WARNING o.e.j.ee9.nested.ContextHandler#setContextPath: Empty contextPath 2025-05-20 20:09:16.697+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>1] INFO org.eclipse.jetty.server.Server#doStart: jetty-12.0.19<span class="p">;</span> built: 2025-04-01T13:28:40.005Z<span class="p">;</span> git: 23436cd577b4238238eb192683dfc2b1476c6b87<span class="p">;</span> jvm 21.0.7 2025-05-20 20:09:18.588+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>1] INFO o.e.j.e.w.StandardDescriptorProcessor#visitServlet: NO JSP Support <span class="k">for</span> /, did not find org.eclipse.jetty.ee9.jsp.JettyJspServlet 2025-05-20 20:09:18.752+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>1] INFO o.e.j.s.DefaultSessionIdManager#doStart: Session <span class="nv">workerName</span><span class="o">=</span>node0 2025-05-20 20:09:20.372+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>1] INFO hudson.WebAppMain#contextInitialized: Jenkins home directory: /data/data/com.termux/files/home/.jenkins found at: <span class="nv">$user</span>.home/.jenkins 2025-05-20 20:09:21.099+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>1] INFO o.e.j.s.handler.ContextHandler#doStart: Started oeje9n.ContextHandler<span class="nv">$CoreContextHandler</span>@1ff55ff<span class="o">{</span>Jenkins v2.504.1,/,b<span class="o">=</span>file:///data/data/com.termux/files/home/.jenkins/war/,a<span class="o">=</span>AVAILABLE,h<span class="o">=</span>oeje9n.ContextHandler<span class="nv">$CoreContextHandler$CoreToNestedHandler</span>@351f2244<span class="o">{</span>STARTED<span class="o">}}</span> 2025-05-20 20:09:21.133+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>1] INFO o.e.j.server.AbstractConnector#doStart: Started ServerConnector@38a1a26<span class="o">{</span>HTTP/1.1, <span class="o">(</span>http/1.1<span class="o">)}{</span>0.0.0.0:8080<span class="o">}</span> 2025-05-20 20:09:21.185+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>1] INFO org.eclipse.jetty.server.Server#doStart: Started oejs.Server@3b0c9195<span class="o">{</span>STARTING<span class="o">}[</span>12.0.19,sto<span class="o">=</span>0] @9778ms 2025-05-20 20:09:21.189+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>37] INFO winstone.Logger#logInternal: Winstone Servlet Engine running: <span class="nv">controlPort</span><span class="o">=</span>disabled 2025-05-20 20:09:21.632+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>36] INFO jenkins.model.Jenkins#&lt;init&gt;: Starting version 2.504.1 2025-05-20 20:09:22.307+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>45] INFO jenkins.InitReactorRunner<span class="nv">$1</span><span class="c">#onAttained: Started initialization</span> 2025-05-20 20:09:22.408+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>52] INFO jenkins.InitReactorRunner<span class="nv">$1</span><span class="c">#onAttained: Listed all plugins</span> 2025-05-20 20:09:25.596+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>52] INFO jenkins.InitReactorRunner<span class="nv">$1</span><span class="c">#onAttained: Prepared all plugins</span> 2025-05-20 20:09:25.612+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>52] INFO jenkins.InitReactorRunner<span class="nv">$1</span><span class="c">#onAttained: Started all plugins</span> 2025-05-20 20:09:25.622+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>45] INFO jenkins.InitReactorRunner<span class="nv">$1</span><span class="c">#onAttained: Augmented all extensions</span> 2025-05-20 20:09:26.201+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>49] INFO jenkins.InitReactorRunner<span class="nv">$1</span><span class="c">#onAttained: System config loaded</span> 2025-05-20 20:09:26.204+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>56] INFO jenkins.InitReactorRunner<span class="nv">$1</span><span class="c">#onAttained: System config adapted</span> 2025-05-20 20:09:26.207+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>56] INFO jenkins.InitReactorRunner<span class="nv">$1</span><span class="c">#onAttained: Loaded all jobs</span> 2025-05-20 20:09:26.215+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>48] INFO jenkins.InitReactorRunner<span class="nv">$1</span><span class="c">#onAttained: Configuration for all jobs updated</span> 2025-05-20 20:09:26.312+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>72] INFO hudson.util.Retrier#start: Attempt <span class="c">#1 to do the action check updates server</span> 2025-05-20 20:09:27.062+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>54] INFO jenkins.install.SetupWizard#init: <span class="k">*************************************************************</span> <span class="k">*************************************************************</span> <span class="k">*************************************************************</span> Jenkins initial setup is required. An admin user has been created and a password generated. Please use the following password to proceed to installation: a20b27ff6f684fa3bdf05d909e0bf1e4 This may also be found at: /data/data/com.termux/files/home/.jenkins/secrets/initialAdminPassword <span class="k">*************************************************************</span></code></pre> </div> </div> <div class="paragraph"> <p>The web page is also looking familiar, except for the path where the password is stored:</p> </div> <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/05/22/2025-05-22-jenkins-on-android/unlock-jenkins.png" alt="standard first Jenkins screen" width="860" /></span> </p> <div class="paragraph"> <p>All seems well, until Jenkins throws a tantrum about the absence of a <code>/tmp</code> dir:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">/tmp does not exist.</code></pre> </div> </div> <div class="paragraph"> <p>Jenkins throws a fit when it can’t find <code>/tmp</code>. We’ll avoid the drama by setting <code>$PREFIX/tmp</code> as its temp playground later on.</p> </div> <div class="paragraph"> <p>Minor hiccup aside, the installation chugs along smoothly, and the default plugins find their cozy little corner.</p> </div> <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/05/22/2025-05-22-jenkins-on-android/plugins-install.png" alt="standard plugins install" width="860" /></span> </p> <div class="paragraph"> <p>The journey nears its end, punctuated by the customary security warning about the use of the built-in node. <span class="image"><img src="https://www.jenkins.io/images/post-images/2025/05/22/2025-05-22-jenkins-on-android/security-issue.png" alt="standard security warning" width="860" /></span> </p> <div class="paragraph"> <p>Nothing to do with Termux, but we’ll iron out the kinks later.</p> </div> <div class="paragraph"> <p>We’ll want to show off a bit later, so let’s get the <a href="https://plugins.jenkins.io/platformlabeler">Platform Labeler</a> plugin ready. Go to "<em>Manage Jenkins</em>" &gt; "<em>Plugins</em>" &gt; "<em>Available Plugins</em>", search for it, check the box, and select the blue "Install" button. Yes, it’s that easy.</p> </div> <div class="paragraph"> <p>Now go back to your console, and <kbd>Ctrl+C</kbd> so you firmly ask Jenkins to shut down.</p> </div> <div class="paragraph"> <p>Quite the milestone, huh?<br> We’ve proven that we can kickstart a Jenkins controller using Termux on an Android device.<br> But hold onto your hats, folks! We’re not done just yet.<br> Next up, we’ll ensure this Jenkins controller can strut its stuff as a service, and then, we’ll tweak it to kick off automatically at boot time.</br> </br> </br> <div class="sect2"> <h3 id="what-is-a-service-and-why-do-we-need-it"><a class="anchor" href="#what-is-a-service-and-why-do-we-need-it" />What is a service, and why do we need it?</h3> <div class="paragraph"> <p>Now, we could just let Jenkins lurk in the shadows, but where’s the fun in that? What if Android decides to play the ultimate prank and terminate Termux, or the device throws a fit and decides to reboot? We’d be stuck manually resurrecting Jenkins every single time, and that’s just not the cricket we signed up for.<br> So, let’s give Jenkins a promotion, shall we? Time to turn it into a proper service!</br> </p> <div class="paragraph"> <p>The standard Jenkins installation <a href="https://www.jenkins.io/blog/2022/03/25/systemd-migration/">migrated from <code>init</code> to <code>systemd</code></a> a while back. Unfortunately, Termux isn’t in on the <code>systemd</code> party, so we’ll have to make do with the tools it offers.<br> Enter <a href="https://wiki.termux.com/wiki/Termux-services">termux-services</a>, a handy collection of scripts for service wrangling.<br> Instead of cluttering up <code>~/.bashrc</code> or <code>~/.bash_profile</code>, we can now start and stop services with a flick of the wrist, thanks to termux-services.<br> There’s already a smorgasbord of existing services ready to roll, and just like with <code>systemd</code>, there’s nothing stopping us from crafting a bespoke service for our beloved Jenkins.</br> </br> <div class="paragraph"> <p>To get termux-services up and running, execute:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">pkg <span class="nb">install </span>termux-services runit service-daemon start</code></pre> </div> </div> <div class="paragraph"> <p>Then, give Termux a gentle nudge so that the service-daemon springs to life.</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash"><span class="nb">exit</span></code></pre> </div> </div> <div class="paragraph"> <p>Next up, to unleash the power of a service, fire off:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">sv-enable &lt;service&gt;</code></pre> </div> </div> <div class="paragraph"> <p>If you’re in the mood for a one-off joyride, a simple:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">sv up &lt;service&gt;</code></pre> </div> </div> <div class="paragraph"> <p>will suffice.<br> And when it’s time to hit the brakes, just tap into your inner traffic cop with:</br> </p> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">sv down &lt;service&gt;</code></pre> </div> </div> <div class="paragraph"> <p>Or, if you’re feeling particularly ruthless, disable it altogether:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">sv-disable &lt;service&gt;</code></pre> </div> </div> <div class="paragraph"> <p>A service is like a restless spirit shackled to this mortal realm if <code>$PREFIX/var/service/&lt;service&gt;/down</code> exists, so the <code>sv-enable</code> and <code>sv-disable</code> scripts play a little game of touch-and-go with this file.</p> </div> <div class="paragraph"> <p>Under the hood, termux-services taps into the mighty <a href="http://smarden.org/runit/">runit</a> to reign in the chaos of services.<br> You’ll find a treasure trove of example scripts on the <a href="http://smarden.org/runit/runscripts.html">runit website</a>.<br> If you spot a script you fancy, or if you’re feeling particularly creative, just follow these steps:</br> </br> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash"><span class="nb">mkdir</span> <span class="nt">-p</span> <span class="nv">$PREFIX</span>/var/service/&lt;PKG&gt;/log <span class="nb">ln</span> <span class="nt">-sf</span> <span class="nv">$PREFIX</span>/share/termux-services/svlogger <span class="nv">$PREFIX</span>/var/service/&lt;PKG&gt;/log/run</code></pre> </div> </div> <div class="paragraph"> <p>Then, tuck your run script snugly into <code>$PREFIX/var/service/&lt;PKG&gt;/run</code>, making sure it’s ready for its close-up.</p> </div> <div class="paragraph"> <p>You can then run</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">sv up &lt;PKG&gt;</code></pre> </div> </div> <div class="paragraph"> <p>to breathe life into your creation.</p> </div> <div class="paragraph"> <p>The log files for these services bask in the limelight at <code>$PREFIX/var/log/sv/&lt;PKG&gt;/</code>, with the star of the show bearing the name "current".</p> </div> </p> <div class="sect2"> <h3 id="turning-jenkins-into-a-service-for-smooth-sailing"><a class="anchor" href="#turning-jenkins-into-a-service-for-smooth-sailing" />Turning Jenkins into a service for smooth sailing</h3> <div class="paragraph"> <p>Now that we’ve mastered the art of creating and deploying services with Termux, let’s give our Jenkins controller a promotion.<br> First up, we need to whip up a script to kickstart Jenkins as a service. Let’s call it <code>run</code> and tuck it snugly into the <code>$PREFIX/var/service/jenkins/</code> directory.</br> </p> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash"><span class="nb">mkdir</span> <span class="nt">-p</span> <span class="nv">$PREFIX</span>/var/service/jenkins <span class="nb">cd</span> <span class="nv">$PREFIX</span>/var/service/jenkins <span class="nb">cat</span> <span class="o">&gt;&gt;</span> run <span class="o">&lt;&lt;</span><span class="no">EOF</span><span class="sh"> #!</span><span class="nv">$PREFIX</span><span class="sh">/usr/bin/bash JENKINS_LOG=/data/data/com.termux/files/home/.jenkins/logs/jenkins.log </span><span class="nv">$PREFIX</span><span class="sh">/usr/bin/java -Djava.io.tmpdir=</span><span class="nv">$PREFIX</span><span class="sh">/tmp -jar </span><span class="nv">$HOME</span><span class="sh">/jenkins.war --logfile=</span><span class="k">${</span><span class="nv">JENKINS_LOG</span><span class="k">}</span><span class="sh"> </span><span class="no">EOF </span><span class="nb">chmod</span> +x run <span class="nb">mkdir</span> <span class="nt">-p</span> <span class="nv">$HOME</span>/.jenkins/logs <span class="nb">touch</span> <span class="nv">$HOME</span>/.jenkins/logs/jenkins.log</code></pre> </div> </div> <div class="paragraph"> <p>With our script ready, let’s test if Jenkins plays nice as a service:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">sv-enable jenkins sv up jenkins</code></pre> </div> </div> <div class="paragraph"> <p>Time to peek under the hood and see if Jenkins is revving up by checking the logs:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash"><span class="nb">tail</span> <span class="nt">-f</span> <span class="nv">$HOME</span>/.jenkins/logs/jenkins.log&amp;</code></pre> </div> </div> <div class="paragraph"> <p>Voilà! Standard Jenkins logs, just like we’re accustomed to seeing on a run-of-the-mill server.</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">2025-05-18 14:13:27.380+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>1] WARNING o.e.j.s.handler.ContextHandler#setContextPath: Empty contextPath 2025-05-18 14:13:27.446+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>1] INFO org.eclipse.jetty.server.Server#doStart: jetty-10.0.20<span class="p">;</span> built: 2024-01-29T20:46:45.278Z<span class="p">;</span> git: 3a745c71c23682146f262b99f4ddc4c1bc41630c<span class="p">;</span> jvm 17-internal+0-adhoc..src 2025-05-18 14:13:27.727+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>1] INFO o.e.j.w.StandardDescriptorProcessor#visitServlet: NO JSP Support <span class="k">for</span> /, did not find org.eclipse.jetty.jsp.JettyJspServlet 2025-05-18 14:13:27.780+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>1] INFO o.e.j.s.s.DefaultSessionIdManager#doStart: Session <span class="nv">workerName</span><span class="o">=</span>node0 2025-05-18 14:13:28.355+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>1] INFO hudson.WebAppMain#contextInitialized: Jenkins home directory: /data/data/com.termux/files/home/.jenkins found at: <span class="nv">$user</span>.home/.jenkins 2025-05-18 14:13:28.524+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>1] INFO o.e.j.s.handler.ContextHandler#doStart: Started w.@216914<span class="o">{</span>Jenkins v2.504.1,/,file:///data/data/com.termux/files/home/.jenkins/war/,AVAILABLE<span class="o">}{</span>/data/data/com.termux/files/home/.jenkins/war<span class="o">}</span> 2025-05-18 14:13:28.538+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>1] INFO o.e.j.server.AbstractConnector#doStart: Started ServerConnector@395b56bb<span class="o">{</span>HTTP/1.1, <span class="o">(</span>http/1.1<span class="o">)}{</span>0.0.0.0:8080<span class="o">}</span> 2025-05-18 14:13:28.570+0000 <span class="o">[</span><span class="nb">id</span><span class="o">=</span>1] INFO org.eclipse.jetty.server.Server#doStart: Started Server@13f17eb4<span class="o">{</span>STARTING<span class="o">}[</span>10.0.20,sto<span class="o">=</span>0] @2771ms</code></pre> </div> </div> <div class="paragraph"> <p>With Jenkins now up and about, you can access it at the port 8080 on your trusty Android device. <span class="image"><img src="https://www.jenkins.io/images/post-images/2025/05/22/2025-05-22-jenkins-on-android/jenkins-home.png" alt="standard Jenkins home page" width="860" /></span> </p> </div> <div class="sect2"> <h3 id="ensuring-availability-from-boot-for-uninterrupted-service"><a class="anchor" href="#ensuring-availability-from-boot-for-uninterrupted-service" />Ensuring availability from boot for uninterrupted service</h3> <div class="paragraph"> <p>We’ve hit two major milestones:</p> </div> <div class="olist arabic"> <ol class="arabic"> <li> <p>Getting a Jenkins controller up and running on an Android device.</p> </li> <li> <p>Successfully running Jenkins as a service on the Android device whenever we fire up Termux.</p> </li> </ol> </div> <div class="paragraph"> <p>Pretty cool, right?<br> But what if the device decides to throw a curveball and reboots? I know, this whole experiment is just a tech whimsy, but let’s push the boundaries and see how far we can take it. Frankly, even if I’m just treating this as a fun experiment, I’d rather not deal with the hassle of launching Termux every time I reboot the device.<br> So what’s the logical next step? Adding the Jenkins service to the roster of auto-starting services when the device boots up.</br> </br> <div class="sect3"> <h4 id="installation-of-termuxboot"><a class="anchor" href="#installation-of-termuxboot" />Installation of Termux:Boot</h4> <div class="paragraph"> <p>First things first, let’s get our hands on the Termux:Boot add-on from <a href="https://f-droid.org/packages/com.termux.boot/">F-Droid</a>. Important note: Keep your installations of Termux and add-ons strictly from one source, either Google Play or F-Droid. Mixing them up can lead to compatibility issues due to different key-signing methods.</p> </div> <div class="olist arabic"> <ol class="arabic"> <li> <p>Install the Termux:Boot app.</p> </li> <li> <p>Head over to your Android settings and give Termux and Termux:Boot the green light by turning off battery optimizations for these apps.</p> </li> <li> <p>Give the Termux:Boot app a friendly tap to start it up. This ensures it gets the memo to kick into action at boot time.</p> </li> <li> <p>Ready for some directory magic? Let’s create the <code>~/.termux/boot/</code> directory: This is where you’ll stash all the scripts you want to fire up on boot.</p> </li> </ol> </div> <div class="listingblock"> <div class="content"> <pre class="nowrap">mkdir -p ~/.termux/boot/</pre> </div> </div> <div class="paragraph"> <p>If you’ve got a bunch of scripts, fear not — they’ll line up and execute in a nice, orderly fashion. <strong>Pro tip</strong>: Keep your device wide awake by running <code>termux-wake-lock</code> right off the bat. For example, to kickstart an sshd server and keep your device bright-eyed and bushy-tailed at boot, craft a little script like this one at <code>~/.termux/boot/start-sshd</code>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash"><span class="c">#!/data/data/com.termux/files/usr/bin/sh</span> termux-wake-lock sshd</code></pre> </div> </div> <div class="paragraph"> <p>Don’t you forget to make it executable:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash"><span class="nb">chmod </span>755 ~/.termux/boot/start-sshd</code></pre> </div> </div> <div class="paragraph"> <p>And if you’re itching to have Termux-services do their thing at boot time, simply throw in:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="shell"><span class="c">#!/data/data/com.termux/files/usr/bin/sh</span> termux-wake-lock <span class="nb">.</span> <span class="nv">$PREFIX</span>/etc/profile</code></pre> </div> </div> <div class="paragraph"> <p>This nifty snippet will unleash all the services that are raring to go in termux-services.</p> </div> </div> <div class="sect3"> <h4 id="adding-jenkins-to-the-list-of-services-that-start-automatically"><a class="anchor" href="#adding-jenkins-to-the-list-of-services-that-start-automatically" />Adding Jenkins to the list of services that start automatically</h4> <div class="paragraph"> <p>Now, let’s add Jenkins to the list of services that start automatically when the device boots up. Craft a script named <code>~/.termux/boot/start-jenkins</code> and give it the following content:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="shell"><span class="c">#!/data/data/com.termux/files/usr/bin/sh</span> termux-wake-lock sv up jenkins</code></pre> </div> </div> <div class="paragraph"> <p>Without <code>chmod +x</code>, your <code>start-jenkins</code> script is just a very well-written suggestion. Run it, or Jenkins won’t be there when you reboot.</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="shell"><span class="nb">chmod </span>755 <span class="nv">$HOME</span>/.termux/boot/start-jenkins</code></pre> </div> </div> <div class="paragraph"> <p>And there you have it! Jenkins is now part of the elite club of services that kick off automatically when the device boots up. Now, you can rest easy knowing that your Jenkins controller will be up and running, ready to tackle any task you throw its way.</p> </div> </div> <div class="sect3"> <h4 id="checking-jenkins-boot-up-performance"><a class="anchor" href="#checking-jenkins-boot-up-performance" />Checking Jenkins' boot-up performance</h4> <div class="paragraph"> <p>To ensure that Jenkins is indeed strutting its stuff when the device boots up, let’s put it to the test — give that device a good old reboot.<br> But before you hit that restart button, make sure you’ve given termux-boot a hearty handshake at least once and sorted out all the necessary permissions.<br> That means letting it run in the background and disabling battery optimization. And if you’re rocking a phone with MIUI, well, hold onto your hats — you might need to do a little extra dance to get things grooving smoothly.<br> Head on over to the settings, and summon the magic word "background". Hunt down an item called "Background autostart" and flip the switch for termux-boot and termux.<br> Et voilà! You’ve just unleashed the boot-time prowess of termux on MIUI.</br> </br> </br> </br> </p> </div> <div class="sect1"> <h2 id="adding-a-jenkins-agent-on-android"><a class="anchor" href="#adding-a-jenkins-agent-on-android" />Adding a Jenkins agent on Android</h2> <div class="sectionbody"> <div class="paragraph"> <p>So, Jenkins on Android is strutting its stuff, but it’s throwing a fit about missing its sidekick, the agent. Can’t have Jenkins sulking; let’s get that agent up and running on Android, shall we? <span class="image"><img src="https://www.jenkins.io/images/post-images/2025/05/22/2025-05-22-jenkins-on-android/jenkins-complaining.png" alt="Jenkins complaining about the absence of an agent" width="860" /></span> </p> <div class="sect2"> <h3 id="establishing-ssh-connection-for-agent-integration"><a class="anchor" href="#establishing-ssh-connection-for-agent-integration" />Establishing SSH connection for agent integration.</h3> <div class="paragraph"> <p>Remember when we <a href="https://www.jenkins.io/blog/2023/03/30/android-and-jenkins/#setting-up-public-key-authentication">conjured up an SSH key pair</a> for our Android device? Well, we’re going to do it again for the agent. Time to add the public key to the <code>~/.ssh/authorized_keys</code> file on the Android device.<br> Get ready to unleash some command-line magic:</br> </p> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">☎ Jenkins@localhost:~ <span class="nv">$ssh</span><span class="nt">-keygen</span> <span class="nt">-t</span> rsa <span class="nt">-b</span> 4096 <span class="nt">-C</span> <span class="s2">"jenkins-agent"</span> Enter file <span class="k">in </span>which to save the key <span class="o">(</span>/data/data/com.termux/files/home/.ssh/id_rsa<span class="o">)</span>: Enter passphrase <span class="o">(</span>empty <span class="k">for </span>no passphrase<span class="o">)</span>: Enter same passphrase again: Your identification has been saved <span class="k">in</span> /data/data/com.termux/files/home/.ssh/id_rsa Your public key has been saved <span class="k">in</span> /data/data/com.termux/files/home/.ssh/id_rsa.pub The key fingerprint is: SHA256:rpaD/RohRXJsXAYTOahQWpIsih9vhzgl7G9PO23MujI jenkins-agent The key<span class="s1">'s randomart image is: +---[RSA 4096]----+ |ooo .+*=o | |+= .+*o | |=o . ... | |o = .. | | o *... S | | = +..o | | + +o=. | | E.*+= | | . =BO. | +----[SHA256]-----+ ☎ Jenkins@localhost:~ $cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCb+j8eUrnWLh4DWSY8C9t5iNa9AtcIn2oShDUi4ATLKcyPINAmCcDVw19uzhFd+J836iKEFScx9Qw7zuv9iNWEjxEERXyFHXt8A9lMf78aeK4dvDei60JEN5+28YO7ctlQ39+wzHXIMtrFiBTeIFpIjPqM1EskKqTq8ySty+TrozCySXnFgbceP9NN+KZSzqyoYpjgMgYVtUTMSbnggFuWxfQms9a7tBLqv2GJzLoYJnWajXtrRokctQ/JyRFCZND7zhCF4cjyoI505tRgBUp7E3KV7CYiETV+7gQ92dV7K9Lf0u0OVQ== jenkins-agent</span></code></pre> </div> </div> <div class="paragraph"> <p>To add the generated public key to the authorized keys file, we can use the <code>cat</code> command to append the public key to the <code>~/.ssh/authorized_keys</code> file. Here’s how we can do it:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash"><span class="nb">cat</span> ~/.ssh/id_rsa.pub <span class="o">&gt;&gt;</span> ~/.ssh/authorized_keys</code></pre> </div> </div> <div class="paragraph"> <p>This command will add the contents of the <code>id_rsa.pub</code> file (which is our public key) to the <code>authorized_keys</code> file. If the <code>authorized_keys</code> file doesn’t exist, no worries – it’ll be conjured into existence for us.<br /> </p> <div class="paragraph"> <p>Now, before we get too carried away with our newfound access, let’s ensure our digital fortress is properly fortified. The <code>~/.ssh</code> directory should flaunt permissions worthy of a royal decree: <code>700 (drwx------)</code>. Meanwhile, the <code>authorized_keys</code> file should be wrapped in the impenetrable cloak of <code>600 (-rw-------)</code> permissions.</p> </div> <div class="paragraph"> <p>If you’re feeling particularly wizardly, you can set these permissions using the <code>chmod</code> command:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash"><span class="nb">chmod </span>700 ~/.ssh <span class="nb">chmod </span>600 ~/.ssh/authorized_keys</code></pre> </div> </div> <div class="paragraph"> <p>Let’s infuse this with a touch of levity:</p> </div> <div class="paragraph"> <p>If you’re still getting the password runaround when attempting to connect, there’s a chance our SSH server isn’t keen on our public key party trick.<br> Time to play detective! Navigate to the <code>$PREFIX/etc/ssh/sshd_config</code> file and make sure it hasn’t ghosted us. Look for a line that reads like the magic incantation we need:</br> </p> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">PubkeyAuthentication <span class="nb">yes</span></code></pre> </div> </div> <div class="paragraph"> <p>If you’ve been tinkering with the <code>sshd_config</code> file, remember to give the SSH service a friendly nudge to let it know about the changes. Now that we’ve got the key to the kingdom, it’s time to set up a VIP pass for Jenkins.</p> </div> <div class="paragraph"> <p>Take a stroll over to the Jenkins controller and swing by "<em>Manage Jenkins</em>" &gt; "<em>Credentials</em>" &gt; "<em>System</em>". Next, hover over "<em>Global credentials (unrestricted)</em>" like a champ, select the down arrow, and select "<em>Add Credentials</em>".</p> </div> <div class="paragraph"> <p>Now, choose "<em>SSH Username with private key</em>" as the type of credential, and let’s fill in the details:</p> </div> <div class="olist arabic"> <ol class="arabic"> <li> <p><em>Username</em>: <code>&lt;your termux user name&gt;</code></p> </li> <li> <p><em>Private Key</em>: <em>Enter directly</em>, and paste the content of the private key file <code>~/.ssh/id_rsa</code>.</p> </li> <li> <p><em>Passphrase</em>: Leave it empty.</p> </li> <li> <p><em>ID</em>: <code>jenkins-agent</code></p> </li> <li> <p><em>Description</em>: <code>Jenkins Agent SSH Key</code></p> </li> </ol> </div> <div class="paragraph"> <p>Select the white on blue "<em>Create</em>" button, and voilà! You should now be the proud owner of a brand spanking new credential named "jenkins-agent". Jenkins is now armed with this secret handshake to chat with the Android device (which, let’s be honest, is basically chatting with itself).</p> </div> </div> <div class="sect2"> <h3 id="configuring-the-agent-to-communicate-with-the-controller"><a class="anchor" href="#configuring-the-agent-to-communicate-with-the-controller" />Configuring the agent to communicate with the controller</h3> <div class="paragraph"> <p>Alright, back in the driver’s seat at "<em>Manage Jenkins</em>", let’s give that shiny blue "<em>Set up agent</em>" button a good ol' click and dive into the adventure!</p> </div> <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/05/22/2025-05-22-jenkins-on-android/jenkins-complaining.png" alt="Jenkins complaining about the absence of an agent" width="860" /></span> </p> <div class="paragraph"> <p>Time to give our agent a name – I went with <code>Myself</code> because, well, it’s cozy in here with the Android machine. Select "<em>Permanent Agent</em>" as the mode. <span class="image"><img src="https://www.jenkins.io/images/post-images/2025/05/22/2025-05-22-jenkins-on-android/set-up-agent.png" alt="Jenkins asking to set up an agent" width="860" /></span> </p> <div class="paragraph"> <p>Now, hit "<em>Create</em>". You should now see a gazillion fields to fill in. For the description, I went with something like <code>The smartphone itself</code> because, why not? For the number of executors, I settled on <code>1</code>, but feel free to tweak it based on your machine’s prowess.<br> The remote root directory is set to <code>/data/data/com.termux/files/home</code> – that’s our agent’s humble abode, the Termux user’s home turf.</br> </p> <div class="paragraph"> <p>As for labels, I went with <code>aarch64, android</code> – gotta give our Android buddy some identity, right? And for usage, let’s go with "<em>Use this node as much as possible</em>" – it’s eager to help!</p> </div> <div class="paragraph"> <p>Now, for the grand finale, choose "<em>Launch agent via SSH</em>" as the launch method.<br> Host?<br> Oh, just good ol' <code>localhost</code>, and for credentials, select our trusty <code>jenkins-agent</code> from earlier.</br> </br> <div class="paragraph"> <p>Oh, but wait! Before we select that final "<em>Save</em>" button, we’re diving into the "<em>Advanced</em>" settings because, well, we’re adventurers! Change the port to <code>8022</code> and remember to update the "<em>JavaPath</em>" to <code>/data/data/com.termux/files/usr/bin/java</code>.</p> </div> <div class="paragraph"> <p>Lastly, sprinkle in some digits – <code>60</code> for "<em>Connection Timeout in Seconds</em>", <code>10</code> for "<em>Maximum Number of Retries</em>", and <code>10</code> for "<em>Seconds To Wait Between Retries</em>".</p> </div> <div class="paragraph"> <p>Then, with a dramatic flourish, select "<em>Save</em>" and let the magic unfold!</p> </div> <div class="paragraph"> <p>After a bit of anticipation, select "<em>Nodes</em>" on the left, select "<em>Myself</em>", and give that "<em>Log</em>" button a tap and voilà! You should see something like this:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="bash">Remoting version: 3301.v4363ddcca_4e7 Launcher: SSHLauncher Communication Protocol: Standard <span class="k">in</span>/out This is a Unix agent Agent successfully connected and online</code></pre> </div> </div> <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/05/22/2025-05-22-jenkins-on-android/agent-connected.png" alt="Jenkins agent connected" width="860" /></span> </p> <div class="paragraph"> <p>As you can see, the agent is connected, despite being on the same machine as the controller and running on top of Android.<br> Now, you can use this agent to run your builds on the Android device itself. But…​ there is still a problem with our configuration and we have some ameliorations to make.<br> On the top right, you can still see a red warning:</br> </br> <div class="quoteblock"> <blockquote> <div class="paragraph"> <p>Building on the built-in node can be a security issue. You should set the number of executors on the built-in node to 0.</p> </div> </blockquote> </div> <div class="paragraph"> <p>We’ll have to address this issue.</p> </div> </p> <div class="sect2"> <h3 id="cleaning-up-the-configuration"><a class="anchor" href="#cleaning-up-the-configuration" />Cleaning up the configuration</h3> <div class="paragraph"> <p>Alright, time to tackle that pesky security issue! Hop on over to "<em>Manage Jenkins</em>" &gt; "<em>Nodes</em>", and give a friendly selection to "<em>Built-in Node</em>".<br> Once there, mosey on over to the left and hit up "<em>Configure</em>". Now, set the number of executors to a solid <code>0</code>. Then, seal the deal with a satisfying selection of "<em>Save</em>".<br> Voilà! Watch that red warning vanish into thin air like it’s pulling a magic act! <span class="image"><img src="https://www.jenkins.io/images/post-images/2025/05/22/2025-05-22-jenkins-on-android/no-more-warning.png" alt="No more warning about the built-in node" width="860" /></span> </br> <div class="paragraph"> <p>We’ve officially squashed that security bug and are all set to strut our stuff with our agent, free from any worries.</p> </div> </br> </p> </div> <div class="sect1"> <h2 id="creating-a-pipeline-from-a-github-repo"><a class="anchor" href="#creating-a-pipeline-from-a-github-repo" />Creating a Pipeline from a GitHub repo</h2> <div class="sectionbody"> <div class="paragraph"> <p>Now that Jenkins is up and running, let’s make it earn its keep. Think of Jenkins as your no-nonsense assistant — not much for small talk, but always ready to fetch your code and run your builds.</p> </div> <div class="paragraph"> <p>We’re going to create a new pipeline job via the classic UI, connect it to a GitHub repo, and have Jenkins fetch and build your code whenever you push changes. Automation magic? Absolutely. Sorcery? Maybe just a little.</p> </div> <div class="sect2"> <h3 id="installing-the-necessary-prerequisites"><a class="anchor" href="#installing-the-necessary-prerequisites" />Installing the necessary prerequisites</h3> <div class="paragraph"> <p>Your butler won’t lift a finger until the pantry is stocked. Let’s install the bare essentials:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="shell">pkg <span class="nb">install </span>git maven</code></pre> </div> </div> </div> <div class="sect2"> <h3 id="setting-up-the-jenkins-pipeline"><a class="anchor" href="#setting-up-the-jenkins-pipeline" />Setting Up the Jenkins Pipeline</h3> <div class="paragraph"> <p>Let’s convince Jenkins to do our bidding.</p> </div> <div class="paragraph"> <p>From the dashboard:</p> </div> <div class="ulist"> <ul> <li> <p>Select <em>New Item</em></p> </li> <li> <p>Name it something like <code>my-awesome-pipeline</code> (creativity optional)</p> </li> <li> <p>Select <em>Pipeline</em> as the type</p> </li> <li> <p>Select <em>OK</em></p> </li> </ul> </div> <div class="paragraph"> <p>Now scroll to the <em>Pipeline</em> section and decide your scripting fate: <em>Inline script</em>, or <em>Jenkinsfile from SCM</em>.</p> </div> </div> <div class="sect2"> <h3 id="option-1-inline-scripted-pipeline"><a class="anchor" href="#option-1-inline-scripted-pipeline" />Option 1: Inline (Scripted) Pipeline</h3> <div class="paragraph"> <p>Need quick results? Choose <em>Pipeline script</em> from the <em>Definition</em> dropdown and paste something like this:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="groovy"><span class="n">pipeline</span> <span class="o">{</span> <span class="n">agent</span> <span class="n">any</span> <span class="n">stages</span> <span class="o">{</span> <span class="n">stage</span><span class="o">(</span><span class="s1">'Hello'</span><span class="o">)</span> <span class="o">{</span> <span class="n">steps</span> <span class="o">{</span> <span class="n">echo</span> <span class="s1">'Hello from Jenkins!'</span> <span class="o">}</span> <span class="o">}</span> <span class="o">}</span> <span class="o">}</span></code></pre> </div> </div> <div class="paragraph"> <p>Hit <strong>Save</strong>, then <strong>Build Now</strong>. Jenkins will do its thing — you’ll see a glorious Console Output filled with log lines, warnings, and possibly a tiny existential crisis.</p> </div> <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/05/22/2025-05-22-jenkins-on-android/first-console-output.png" alt="first Jenkins output console" width="860" /></span> </p> </div> <div class="sect2"> <h3 id="option-2-jenkinsfile-pipeline-from-scm"><a class="anchor" href="#option-2-jenkinsfile-pipeline-from-scm" />Option 2: Jenkinsfile (Pipeline from SCM)</h3> <div class="paragraph"> <p>If you’re playing for keeps, store your pipeline code in your Git repo.</p> </div> <div class="paragraph"> <p>Create a <code>Jenkinsfile</code> at the root (or wherever makes sense), then:</p> </div> <div class="ulist"> <ul> <li> <p>Set <em>Definition</em> to <em>Pipeline script from SCM</em></p> </li> <li> <p>Choose <em>Git</em> as the SCM</p> </li> <li> <p>Enter your GitHub repo URL</p> </li> <li> <p>Set the <em>Script Path</em> (defaults to <code>Jenkinsfile</code>, or <code>jenkins/Jenkinsfile</code> if it’s nested)</p> </li> <li> <p>Save</p> </li> </ul> </div> <div class="paragraph"> <p>Now every time Jenkins builds, it’ll grab the latest code and follow the recipe in your Jenkinsfile like a dutiful butler consulting a particularly grumpy cookbook.</p> </div> <div class="paragraph"> <p>Too abstract? Fear not — we’ll now use a real-world-ish example from the friendly folks at the <em>jenkins-docs</em> organization.</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="building-a-real-project-from-github"><a class="anchor" href="#building-a-real-project-from-github" />Building a real project from GitHub</h2> <div class="sectionbody"> <div class="sect2"> <h3 id="confirming-mavens-existence"><a class="anchor" href="#confirming-mavens-existence" />Confirming Maven’s existence</h3> <div class="paragraph"> <p>We already have Java and Maven on board (thanks to our earlier setup). Let’s double-check:</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="shell">mvn <span class="nt">--version</span> Apache Maven 3.9.9 <span class="o">(</span>8e8579a9e76f7d015ee5ec7bfcdc97d260186937<span class="o">)</span> Maven home: /data/data/com.termux/files/home/.sdkman/candidates/maven/current Java version: 21.0.7, vendor: Termux, runtime: /data/data/com.termux/files/usr/lib/jvm/java-21-openjdk Default locale: en, platform encoding: UTF-8 OS name: <span class="s2">"linux"</span>, version: <span class="s2">"5.4.274-qgki-gfffde3ec8864"</span>, <span class="nb">arch</span>: <span class="s2">"aarch64"</span>, family: <span class="s2">"unix"</span></code></pre> </div> </div> <div class="paragraph"> <p>If Maven doesn’t respond, it’s either shy or not installed. Assuming it talks back, you’re good to go.</p> </div> </div> <div class="sect2"> <h3 id="creating-the-tutorial-project"><a class="anchor" href="#creating-the-tutorial-project" />Creating the tutorial project</h3> <div class="paragraph"> <p>Let’s use this GitHub repo: <a href="https://github.com/jenkins-docs/simple-java-maven-app" class="bare">https://github.com/jenkins-docs/simple-java-maven-app</a> It even includes a <code>Jenkinsfile</code> tucked away in the <code>jenkins/</code> directory — classy.</p> </div> <div class="listingblock"> <div class="content"> <pre class="rouge highlight nowrap"><code data-lang="groovy"><span class="n">pipeline</span> <span class="o">{</span> <span class="n">agent</span> <span class="n">any</span> <span class="n">options</span> <span class="o">{</span> <span class="n">skipStagesAfterUnstable</span><span class="o">()</span> <span class="o">}</span> <span class="n">stages</span> <span class="o">{</span> <span class="n">stage</span><span class="o">(</span><span class="s1">'Build'</span><span class="o">)</span> <span class="o">{</span> <span class="n">steps</span> <span class="o">{</span> <span class="n">sh</span> <span class="s1">'mvn -B -DskipTests clean package'</span> <span class="o">}</span> <span class="o">}</span> <span class="n">stage</span><span class="o">(</span><span class="s1">'Test'</span><span class="o">)</span> <span class="o">{</span> <span class="n">steps</span> <span class="o">{</span> <span class="n">sh</span> <span class="s1">'mvn test'</span> <span class="o">}</span> <span class="n">post</span> <span class="o">{</span> <span class="n">always</span> <span class="o">{</span> <span class="n">junit</span> <span class="s1">'target/surefire-reports/*.xml'</span> <span class="o">}</span> <span class="o">}</span> <span class="o">}</span> <span class="n">stage</span><span class="o">(</span><span class="s1">'Deliver'</span><span class="o">)</span> <span class="o">{</span> <span class="n">steps</span> <span class="o">{</span> <span class="n">sh</span> <span class="s1">'./jenkins/scripts/deliver.sh'</span> <span class="o">}</span> <span class="o">}</span> <span class="o">}</span> <span class="o">}</span></code></pre> </div> </div> <div class="paragraph"> <p>Now, let’s hook that into Jenkins:</p> </div> <div class="ulist"> <ul> <li> <p>Select <em>+ New Item</em></p> </li> <li> <p>Name it something like <code>Maven Project</code> (or go wild)</p> </li> <li> <p>Select <em>Pipeline</em> and select <em>OK</em></p> </li> </ul> </div> <div class="paragraph"> <p>In the next window:</p> </div> <div class="ulist"> <ul> <li> <p>Select <em>Pipeline</em> on the left</p> </li> <li> <p>In <em>Definition</em>, choose <em>Pipeline script from SCM</em></p> </li> <li> <p>Set <em>SCM</em> to <em>Git</em></p> </li> <li> <p>Paste <code><a href="https://github.com/jenkins-docs/simple-java-maven-app" class="bare">https://github.com/jenkins-docs/simple-java-maven-app</a></code> in the <em>Repository URL</em></p> </li> <li> <p>Set <em>Script Path</em> to <code>jenkins/Jenkinsfile</code></p> </li> <li> <p>Hit <em>Save</em></p> </li> </ul> </div> <div class="paragraph"> <p>And finally — drumroll — select <em>Build Now</em>. Double-check you’re not on a metered connection unless you really want to download half the internet via Maven.</p> </div> <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/05/22/2025-05-22-jenkins-on-android/first-maven-build.png" alt="first Maven build" width="860" /></span> </p> <div class="paragraph"> <p>And there you have it! A full Jenkins build triggered from your Android phone, which, let’s be honest, used to spend its days just doomscrolling and charging. High five, mate!</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="reflecting-on-our-pipeline-journey"><a class="anchor" href="#reflecting-on-our-pipeline-journey" />Reflecting on our Pipeline journey</h2> <div class="sectionbody"> <div class="paragraph"> <p>Well done, adventurer! Your Jenkins pipeline is now alive and kicking.</p> </div> <div class="paragraph"> <p>Your phone has turned from a useless paperweight into a superhero for your code. You might not hear applause, but trust us, your future self is silently hero-worshipping you every time a green checkmark appears.</p> </div> </div> </div> <div class="sect1"> <h2 id="onward-to-the-next-adventure"><a class="anchor" href="#onward-to-the-next-adventure" />Onward to the next adventure…</h2> <div class="sectionbody"> <div class="paragraph"> <p>If you thought hooking Jenkins to GitHub was fun, just wait.</p> </div> <div class="paragraph"> <p>Next up, maybe we’ll teach Jenkins to brew coffee when the build fails — because caffeine and CI go hand-in-hand, right? Or maybe we’ll set it up to flash the flashlight in Morse code to tell us the build status. The future is weird, and we’re here for it.</p> </div> <div class="paragraph"> <p>Jenkins learning kung-fu? Unlikely. Jenkins writing poetry in YAML? Worryingly plausible. One thing’s for sure: we’ve officially crossed into “I didn’t know I could do that on a phone” territory.</p> </div> <div class="paragraph"> <p>So go ahead, pat yourself on the back (gently — we don’t want to smudge the screen), and rest easy knowing that you’ve wrangled Jenkins into running, building, and deploying from the palm of your hand.</p> </div> <div class="paragraph"> <p>Now close Termux, lock your phone, and whisper to yourself:</p> </div> <div class="paragraph"> <p><em>"I am the pipeline now."</em></p> </div> <div class="paragraph"> <p>Until next time, brave tinkerer.</p> </div> </div> </div></div></div></div></div></div></p></div></div></div></div></div></div></div></div></div></div></div></div></p></div></div></div></div></div></div></br></p></div></div></div></p></div></div></div></div></p></div></div></div></div></div></div> https:/www.jenkins.io/blog/2025/05/15/jenkins-contributor-awards-cast-your-vote/ Jenkins Contributor Awards: Cast Your Vote 2026-03-19T18:14:09+00:00 2025-05-15T00:00:00+00:00 alyssat 🎉 Voting is Now Open for the 2025 Jenkins Awards! 🎉 The voting period for the 2025 Jenkins Awards is open, and it’s time to cast your votes! Voting is open now through Monday, June 16, and the winners will be revealed during this year’s cdCon, happening June 23 - 25, 2025. 🏆 2025 Award Categories and Nominees We are recognizing excellence in three categories: Most Valuable Jenkins Advocate Kris Stern Stefan Spieker Bruno Verachten Most Valuable Jenkins Contributor Basil Crow Kris Stern Jan Faracik Jenkins Security MVP Yaroslav Afenkin Shlomo Dahan Daniel Beck Chenwei Jiang and Yue Yang 🗳️ How to Vote Cast your vote using the official Jenkins Awards Voting Form. Please note: this form is for Jenkins... <div class="paragraph"> <p><span class="image center"><img src="https://www.jenkins.io/images/post-images/2025/03/community-awards-2025-jenkins.png" alt="community awards 2025 jenkins" /></span> </p> <div class="sect1"> <h2 id="voting-is-now-open-for-the-2025-jenkins-awards"><a class="anchor" href="#voting-is-now-open-for-the-2025-jenkins-awards" />🎉 Voting is Now Open for the 2025 Jenkins Awards! 🎉</h2> <div class="sectionbody"> <div class="paragraph"> <p>The voting period for the 2025 Jenkins Awards is open, and it’s time to <a href="https://docs.google.com/forms/d/e/1FAIpQLSdQgQDcNJCgSZV5jUUjgh8J4P4JA2PuiQAgHlYzlFUx0BDWVw/viewform">cast your votes</a>! Voting is open now through Monday, June 16, and the winners will be revealed during this year’s <a href="https://cd.foundation/cdcon-2025/">cdCon</a>, happening June 23 - 25, 2025.</p> </div> </div> </div> <div class="sect1"> <h2 id="2025-award-categories-and-nominees"><a class="anchor" href="#2025-award-categories-and-nominees" />🏆 2025 Award Categories and Nominees</h2> <div class="sectionbody"> <div class="paragraph"> <p>We are recognizing excellence in three categories:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://github.com/jenkins-infra/jenkins.io/issues/7981"><strong>Most Valuable Jenkins Advocate</strong></a></p> <div class="ulist"> <ul> <li> <p><a href="https://github.com/krisstern">Kris Stern</a></p> </li> <li> <p><a href="https://github.com/StefanSpieker">Stefan Spieker</a></p> </li> <li> <p><a href="https://github.com/gounthar">Bruno Verachten</a></p> </li> </ul> </div> </li> <li> <p><a href="https://github.com/jenkins-infra/jenkins.io/issues/7979"><strong>Most Valuable Jenkins Contributor</strong></a></p> <div class="ulist"> <ul> <li> <p><a href="https://github.com/basil">Basil Crow</a></p> </li> <li> <p><a href="https://github.com/krisstern">Kris Stern</a></p> </li> <li> <p><a href="https://github.com/janfaracik">Jan Faracik</a></p> </li> </ul> </div> </li> <li> <p><a href="https://github.com/jenkins-infra/jenkins.io/issues/7980"><strong>Jenkins Security MVP</strong></a></p> <div class="ulist"> <ul> <li> <p><a href="https://github.com/yaroslavafenkin">Yaroslav Afenkin</a></p> </li> <li> <p><a href="https://github.com/shlomomdahan">Shlomo Dahan</a></p> </li> <li> <p><a href="https://github.com/daniel-beck">Daniel Beck</a></p> </li> <li> <p><a href="https://github.com/jiangchenwei">Chenwei Jiang</a> and <a href="https://github.com/yangyue">Yue Yang</a></p> </li> </ul> </div> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="️-how-to-vote"><a class="anchor" href="#️-how-to-vote" />🗳️ How to Vote</h2> <div class="sectionbody"> <div class="paragraph"> <p>Cast your vote using the official <a href="https://docs.google.com/forms/d/e/1FAIpQLSdQgQDcNJCgSZV5jUUjgh8J4P4JA2PuiQAgHlYzlFUx0BDWVw/viewform">Jenkins Awards Voting Form</a>.</p> </div> <div class="paragraph"> <p><em>Please note: this form is for Jenkins Awards only. Other CD Foundation projects may have separate voting processes.</em></p> </div> </div> </div> <div class="sect1"> <h2 id="awards-timeline"><a class="anchor" href="#awards-timeline" />📅 Awards Timeline</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p>Nominations Closed: March 3</p> </li> <li> <p>Voting Opened: April 22</p> </li> <li> <p>Voting Closes: June 16</p> </li> </ul> </div> <div class="paragraph"> <p>Winners Announced: June 23 – 25 at <a href="https://cd.foundation/blog/2025/04/03/cdcon-2025-program-announced/">cdCon</a>.</p> </div> <div class="paragraph"> <p>🥇 Congratulations to all nominees! Your contributions are instrumental to the continued success and improvement of the project.🌟</p> </div> </div> </div></div> https:/www.jenkins.io/blog/2025/05/02/pipeline-graph-view/ Revamped Pipeline visualization in Jenkins 2026-03-19T18:14:09+00:00 2025-05-02T00:00:00+00:00 We’re excited to announce a major update to the Pipeline Graph View plugin - a complete redesign that introduces a modern, user-focused interface that enhances pipeline visualization, customization, and performance. So what’s new? Rewritten and redesigned The plugin has been completely rebuilt with a clean, modern interface using the latest version of React. We’ve put a lot of effort into simplifying the plugin’s structure - switching from Webpack to Rspack, moving to Vite, and replacing class-based components with modern function components. These changes made the codebase easier to maintain and work with, and we removed thousands of lines of code along the way to boost both maintainability... <div class="imageblock center"> <div class="content"> <img src="https://www.jenkins.io/images/post-images/2025/05/2025-05-02-pipeline-graph-view/opengraph.png" alt="opengraph"> </img> </div> <div class="paragraph"> <p>We’re excited to announce a major update to the <a href="https://plugins.jenkins.io/pipeline-graph-view/">Pipeline Graph View</a> plugin - a complete redesign that introduces a modern, user-focused interface that enhances pipeline visualization, customization, and performance.</p> </div> <hr> <div class="sect2"> <h3 id="so-whats-new"><a class="anchor" href="#so-whats-new" />So what’s new?</h3> <div class="paragraph"> <p><strong>Rewritten and redesigned</strong></p> </div> <div class="paragraph"> <p>The plugin has been completely rebuilt with a clean, modern interface using the latest version of React. We’ve put a lot of effort into simplifying the plugin’s structure - switching from Webpack to Rspack, moving to Vite, and replacing class-based components with modern function components. These changes made the codebase easier to maintain and work with, and we removed thousands of lines of code along the way to boost both maintainability and performance.</p> </div> <div class="paragraph"> <p>The interface, with new components from the <a href="https://www.jenkins.io/blog/2025/01/10/design-library/">Jenkins Design Library</a>, has been thoughtfully redesigned to offer a smoother, more intuitive experience. The plugin now supports full-page scrolling - eliminating the need for nested scroll areas - along with sticky headings for better context. The pipeline graph can be panned and zoomed, allowing users to explore complex pipelines with ease. Subtle, delightful animations enhance usability without getting in the way. Stage progress is now clearly visible, and loading skeletons provide immediate visual feedback, resulting in a more stable and responsive experience.</p> </div> <div class="paragraph"> <p><strong>Unified view</strong></p> </div> <div class="paragraph"> <p>The new interface combines the Pipeline graph, stages, and logs into a single, streamlined layout. You can inspect a stage, follow its execution, and read its output - all in one place.</p> </div> <div class="paragraph"> <p><strong>Customization</strong></p> </div> <div class="paragraph"> <p>The Pipeline graph appears on top by default, but you can move it to the left to better suit ultrawide displays. Columns can be resized and hidden, and layout preferences are saved automatically.</p> </div> <div class="imageblock center"> <div class="content"> <img src="https://www.jenkins.io/images/post-images/2025/05/2025-05-02-pipeline-graph-view/sidebar.png" alt="sidebar"> </img> </div> <div class="paragraph"> <p><strong>Performance improvements</strong></p> </div> <div class="paragraph"> <p>We’ve made significant behind-the-scenes improvements to how stages and logs are fetched and rendered. The new plugin loads faster, scrolls smoother, and handles larger pipelines more gracefully.</p> </div> <hr> </hr> <div class="sect2"> <h3 id="available-now"><a class="anchor" href="#available-now" />Available now 🚀</h3> <div class="paragraph"> <p>The new Pipeline Graph View is available now for users on Jenkins 2.479.3 and later.</p> </div> <div class="paragraph"> <p>If you haven’t installed the plugin already, be sure to download it through the Plugins section of your Jenkins controller to experience the update.</p> </div> <div class="paragraph"> <p>See it in action in the <a href="https://ci.jenkins.io/job/Core/job/jenkins/job/master/lastSuccessfulBuild/pipeline-console/">Jenkins core build on ci.jenkins.io</a>.</p> </div> <hr> <div class="paragraph"> <p>If you want to get involved in the UI and UX discussions of Jenkins join the <a href="https://www.jenkins.io/sigs/ux">User Experience SIG</a>.</p> </div> <div class="paragraph"> <p>Take advantage of new components and patterns in your plugin via the <a href="https://weekly.ci.jenkins.io/design-library/">Design Library</a>.</p> </div> <div class="paragraph"> <p>You can watch our monthly meetings on <a href="https://www.youtube.com/playlist?list=PLN7ajX_VdyaOnsIIsZHsv_fM9QhOcajWe">YouTube</a> and you can view in-progress work on <a href="https://github.com/jenkinsci/jenkins/pulls?q=is%3Apr+is%3Aopen+label%3Aweb-ui">GitHub</a>.</p> </div> </hr></div></div></div></hr></div> https:/www.jenkins.io/blog/2025/03/26/design-post/ Redesigning Jenkins (Part One) 2026-03-19T18:14:09+00:00 2025-03-26T00:00:00+00:00 Jenkins is the most used CI/CD platform in the world. It’s one of the oldest, most mature systems in continuous integration and delivery, and it powers software pipelines across critical industries like finance, healthcare, and government. With over a million lines of code, more than 2,000 plugins, and millions of users, Jenkins is less a "tool" and more of a global infrastructure backbone. And because of all that - making changes is hard. Really hard. Part One - The Problem The web has evolved significantly since Jenkins' inception - and as a result of that we’ve been carrying a lot of legacy technology along the way. We’ve carried forward... <div class="imageblock center"> <div class="content"> <img src="https://www.jenkins.io/images/post-images/2025/03/2025-03-26-design-post/banner.png" alt="banner"> </img> </div> <div class="paragraph"> <p>Jenkins is the most used CI/CD platform in the world. It’s one of the oldest, most mature systems in continuous integration and delivery, and it powers software pipelines across critical industries like finance, healthcare, and government. With over a million lines of code, more than 2,000 plugins, and millions of users, Jenkins is less a "tool" and more of a global infrastructure backbone.</p> </div> <div class="paragraph"> <p>And because of all that - making changes is hard. Really hard.</p> </div> <div class="sect1"> <h2 id="part-one-the-problem"><a class="anchor" href="#part-one-the-problem" />Part One - The Problem</h2> <div class="sectionbody"> <div class="paragraph"> <p>The web has evolved significantly since Jenkins' inception - and as a result of that we’ve been carrying a lot of legacy technology along the way.</p> </div> <div class="paragraph"> <p>We’ve carried forward legacy technologies like <a href="http://prototypejs.org">Prototype.js</a>, <a href="https://yui.github.io/yui2/">YUI 2</a>, <a href="https://lesscss.org">LESS</a>, fragments of <a href="https://jquery.com">early jQuery</a>, and a patchwork of UI components from different eras of frontend development. The result? A frontend stack that’s tough to maintain, painful to extend, and a real barrier for contributors.</p> </div> <div class="paragraph"> <p>That’s not a knock on Jenkins - it’s just the reality of any large, long-lived platform. Over time, the ground shifts beneath you. What was best practice in 2005 becomes technical debt in 2025.</p> </div> <div class="paragraph"> <p>So, we knew something had to change.</p> </div> <div class="sect2"> <h3 id="maintaining-compatibility"><a class="anchor" href="#maintaining-compatibility" />Maintaining compatibility</h3> <div class="paragraph"> <p>In modernizing the Jenkins frontend, our foremost priority has been to preserve backwards compatibility, maintain platform stability, and ensure that no production pipelines are disrupted as a result of UI or framework changes. Given Jenkins' role in powering mission-critical CI/CD workflows across global enterprises, even small regressions can have far-reaching impact.</p> </div> <div class="paragraph"> <p>To achieve this, our approach has been pragmatic, cautious, and highly incremental. Rather than introducing disruptive overhauls, we have focused on gradually modernizing the codebase over a period of several years, ensuring each change is thoroughly tested and validated in real-world use cases.</p> </div> <div class="paragraph"> <p>All enhancements are subject to comprehensive automated testing, including compatibility checks against Jenkins' vast plugin ecosystem. In addition, our weekly release cycle provides early visibility into changes and allows us to gather feedback from a broad subset of users before changes are widely adopted.</p> </div> </div> <div class="sect2"> <h3 id="resetting-the-foundations"><a class="anchor" href="#resetting-the-foundations" />Resetting the foundations</h3> <div class="paragraph"> <p>Before we could take on the bigger challenges, we needed to start with the basics. A major part of this work has involved modernizing the foundations of the Jenkins frontend - removing outdated technologies, cleaning up legacy code, and laying the groundwork for a more flexible, maintainable, and future-proof platform.</p> </div> <div class="paragraph"> <p>The first significant milestone in the modernization of the Jenkins frontend was the removal of Prototype.js, a legacy JavaScript framework that had long been a constraint on adopting modern JavaScript syntax and practices. Prototype.js had been deeply intertwined with core components of the Jenkins UI, acting as a technical barrier to progress and modernization. Its removal, as outlined in <a href="https://www.jenkins.io/blog/2023/05/12/removing-prototype-from-jenkins/">Basil’s blog post</a>, marked the end of a major blocker and unlocked the ability to implement long-awaited updates and improvements. This change has not only improved code readability and maintainability but also enabled the Jenkins frontend to embrace more contemporary JavaScript standards, fostering a cleaner and more robust development environment.</p> </div> <div class="paragraph"> <p>One of the most impactful changes was the removal of Yahoo User Interface (YUI), a legacy JavaScript library that had been <em>deeply</em> embedded throughout various areas of the Jenkins UI and its plugins. YUI’s presence significantly complicated the frontend architecture and asset management. Removing it was a substantial undertaking, but it drastically streamlined the asset tree and reduced technical debt across the codebase. As of <a href="https://www.jenkins.io/changelog/2.492.1/">Jenkins 2.492.1</a>, YUI is now disabled by default. This effort culminated in a major cleanup of the codebase, with <a href="https://github.com/jenkinsci/jenkins/pull/10135">over <em>85,000 lines of code removed</em></a>, significantly simplifying the platform and paving the way for more modern, maintainable development practices.</p> </div> <div class="paragraph"> <p>Another important step in modernizing the Jenkins frontend has been the migration from <a href="https://github.com/jenkinsci/jenkins/pull/7850">LESS to SCSS</a>, a small but meaningful improvement in our styling architecture. SCSS offers better language features, stronger community support, and better compatibility with modern tooling. We’ve also been modularizing our legacy CSS into discrete, maintainable style modules, making it easier to enforce consistency, isolate concerns, and improve reusability.</p> </div> <div class="paragraph"> <p>We have also undertaken a broader initiative to standardize the use of modern JavaScript across the Jenkins codebase, embracing ES6+ syntax, modular architecture, and improved use of browser-native APIs. This shift has been pivotal in improving code readability, maintainability, and performance. Legacy inline scripts and globally scoped functions are gradually being replaced with well-structured, reusable JavaScript modules, bringing the frontend architecture in line with modern development practices.</p> </div> </div> <div class="sect2"> <h3 id="the-approach"><a class="anchor" href="#the-approach" />The approach</h3> <div class="paragraph"> <p>We’ve deliberately avoided introducing new complex frameworks and heavyweight dependencies. Modern JavaScript - just plain, native JS - is more than capable these days. With modern JavaScript we can write expressive, maintainable code without any additional overhead.</p> </div> <div class="paragraph"> <p>That doesn’t mean we’re afraid of modern tooling - just that we’re selective. The goal is to lower the barrier to entry for contributors, not raise it. Jenkins has hundreds of people around the world contributing in all kinds of ways - we don’t want our frontend stack to be a gatekeeper.</p> </div> <div class="paragraph"> <p>Every one of these changes helps reduce complexity, improve maintainability, and pave the way for more ambitious UI improvements. Some of these changes might seem small from the outside, but collectively they’ve laid a new foundation for Jenkins. This is the groundwork that makes future UX improvements possible - things like cleaner plugin integration, improved accessibility, better navigation, and modern UI components.</p> </div> </div> <div class="sect2"> <h3 id="whats-next"><a class="anchor" href="#whats-next" />What’s next</h3> <div class="paragraph"> <p>In Part Two, we’ll dive deeper into the design decisions behind some of the new UI features, how we’re improving the developer experience, and what we’re doing to ensure compatibility across the plugin ecosystem without slowing down progress.</p> </div> <hr> <div class="paragraph"> <p>If you want to get involved in the UI and UX discussions of Jenkins join the <a href="https://www.jenkins.io/sigs/ux">User Experience SIG</a>.</p> </div> <div class="paragraph"> <p>Take advantage of new components and patterns in your plugin via the <a href="https://weekly.ci.jenkins.io/design-library/">Design Library</a>.</p> </div> <div class="paragraph"> <p>You can watch our monthly meetings on <a href="https://www.youtube.com/playlist?list=PLN7ajX_VdyaOnsIIsZHsv_fM9QhOcajWe">YouTube</a> and you can view in-progress work on <a href="https://github.com/jenkinsci/jenkins/pulls?q=is%3Apr+is%3Aopen+label%3Aweb-ui">GitHub</a>.</p> </div> </hr> </div> </div></div></div> https:/www.jenkins.io/blog/2025/03/18/jenkins-contributor-awards-2025-nomination-is-open/ Jenkins Contributor Awards 2025 - Nominations are Open 2026-03-19T18:14:09+00:00 2025-03-18T00:00:00+00:00 The Jenkins Contributor Awards for 2025 are being hosted by the Continuous Delivery Foundation (CDF), alongside other prestigious CDF Community Awards. Nominate Outstanding Contributors Nominations are now open and any contributor is eligible for recognition! To ensure transparency, nominations are being accepted via GitHub issues. Be sure to submit your nominations before the deadline on April 14, 2025. Cast Your Vote Voting begins on April 22 and closes on June 5, 2025. Once voting opens, make your voice heard by voting through the official Google form, which include all award categories and nominees. Jenkins Award Categories Support and celebrate the Jenkins community by nominating or voting for contributors... <div class="paragraph"> <p><span class="image center"><img src="https://www.jenkins.io/images/post-images/2025/03/community-awards-2025-jenkins.png" alt="community awards 2025 jenkins" /></span> </p> <div class="paragraph"> <p>The Jenkins Contributor Awards for 2025 are being hosted by the Continuous Delivery Foundation (CDF), alongside other prestigious CDF Community Awards.</p> </div> <div class="sect1"> <h2 id="nominate-outstanding-contributors"><a class="anchor" href="#nominate-outstanding-contributors" />Nominate Outstanding Contributors</h2> <div class="sectionbody"> <div class="paragraph"> <p>Nominations are now open and any contributor is eligible for recognition! To ensure transparency, nominations are being accepted via GitHub issues. Be sure to submit your nominations before the deadline on April 14, 2025.</p> </div> </div> </div> <div class="sect1"> <h2 id="cast-your-vote"><a class="anchor" href="#cast-your-vote" />Cast Your Vote</h2> <div class="sectionbody"> <div class="paragraph"> <p>Voting begins on April 22 and closes on June 5, 2025. Once voting opens, make your voice heard by voting through the official <a href="https://forms.gle/TjFR6kgYoasrUrFF9">Google form</a>, which include all award categories and nominees.</p> </div> </div> </div> <div class="sect1"> <h2 id="jenkins-award-categories"><a class="anchor" href="#jenkins-award-categories" />Jenkins Award Categories</h2> <div class="sectionbody"> <div class="paragraph"> <p>Support and celebrate the Jenkins community by nominating or voting for contributors in the following categories:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://github.com/jenkins-infra/jenkins.io/issues/7979">Most Valuable Jenkins Contributor</a></p> </li> <li> <p><a href="https://github.com/jenkins-infra/jenkins.io/issues/7981">Most Valuable Jenkins Advocate</a></p> </li> <li> <p><a href="https://github.com/jenkins-infra/jenkins.io/issues/7980">Jenkins Security MVP</a></p> </li> </ul> </div> <div class="paragraph"> <p>Winners will be officially announced at <a href="https://cd.foundation/cdcon-2025/">cdCon 2025</a>, taking place from June 23 - 25, 2025.</p> </div> </div> </div> <div class="sect1"> <h2 id="additional-cdf-community-awards"><a class="anchor" href="#additional-cdf-community-awards" />Additional CDF Community Awards</h2> <div class="sectionbody"> <div class="paragraph"> <p>Beyond Jenkins-specific awards, you can also recognize community members on a broader scale with categories such as:</p> </div> <div class="ulist"> <ul> <li> <p>Top CDF Ambassador</p> </li> <li> <p>Top CDF Contributor</p> </li> <li> <p>Top CDF End User</p> </li> </ul> </div> <div class="paragraph"> <p>For full details on all awards and the nomination process, visit the <a href="https://cd.foundation/awards-2025/">CDF Award Page</a>. Help us recognize and honor the contributors who make an impact!</p> </div> </div> </div></div> https:/www.jenkins.io/blog/2025/03/05/Jenkins-in-Google-Summer-of-Code-2025/ Jenkins in Google Summer of Code 2025 2026-03-19T18:14:09+00:00 2025-03-05T00:00:00+00:00 We are excited to have been accepted to Google Summer of Code (GSoC) 2025! This marks our ninth year participating as a mentoring organization in the program. Thank you Google! GSoC is more than just a mentoring program; it is an opportunity to welcome and engage new contributors in open-source development. By dedicating time to mentor and guide GSoC contributors, we help shape the future of both the individuals involved and the broader Jenkins community. The impact of these contributions extends beyond the program, benefiting countless Jenkins users worldwide. We eagerly welcome new GSoC contributors to the Jenkins family! This journey will... <div class="paragraph"> <p><span class="image center"><img src="https://www.jenkins.io/images/post-images/2025/03/GSoC2025_opengraph.png" alt="GSoC2025 opengraph" /></span> </p> <div class="paragraph"> <p>We are excited to have been accepted to <a href="https://summerofcode.withgoogle.com/">Google Summer of Code (GSoC) 2025</a>! This marks our ninth year participating as a mentoring organization in the program. Thank you Google!</p> </div> <div class="paragraph"> <p>GSoC is more than just a mentoring program; it is an opportunity to welcome and engage new contributors in open-source development. By dedicating time to mentor and guide GSoC contributors, we help shape the future of both the individuals involved and the broader Jenkins community. The impact of these contributions extends beyond the program, benefiting countless Jenkins users worldwide.</p> </div> <div class="paragraph"> <p>We eagerly welcome new GSoC contributors to the Jenkins family! This journey will provide invaluable hands-on experience, technical skill enhancement, and insight into the workings of an active open-source community. Most importantly, participants will have the chance to learn from passionate mentors dedicated to making a meaningful difference—for both individual contributors and the Jenkins project as a whole.</p> </div> <div class="sect1"> <h2 id="whats-on-the-near-horizon-for-gsoc-candidates"><a class="anchor" href="#whats-on-the-near-horizon-for-gsoc-candidates" />What’s on the near horizon for GSoC candidates?</h2> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p>Refer to the <a href="https://www.jenkins.io/projects/gsoc/contributors/">information for contributors</a> page for full application guidelines.</p> </li> <li> <p>Join these webinars for a walk through of project ideas: <a href="https://www.meetup.com/jenkins-online-meetup/events/306446006/?eventOrigin=group_upcoming_events">March 5</a> and <a href="https://www.meetup.com/jenkins-online-meetup/events/306446080/?eventOrigin=group_upcoming_events">March 6</a>. Recording will be available after each session.</p> </li> <li> <p>Submit your draft proposal for review/feedback by mentors. Use <a href="https://forms.gle/i8Gv9AcfgNiB1xAW8">this form</a> to submit your draft proposal for review. The deadline is April 1.</p> </li> <li> <p>Use <a href="https://docs.google.com/document/d/1dIlPLXfLbFsvcaHFuwmH9_lSCVm9m6-SgNYTNAnSZpY/edit?tab=t.0">this template</a> to write your project proposal.</p> </li> </ul> </div> <div class="paragraph"> <p>Refer to the <a href="https://developers.google.com/open-source/gsoc/timeline">GSoC timeline</a> for a complete list of important dates.</p> </div> </div> </div></div> https:/www.jenkins.io/blog/2025/02/05/command-palette/ A new way to search in Jenkins 2.492.1 2026-03-19T18:14:09+00:00 2025-02-05T00:00:00+00:00 We’re happy to announce that Jenkins 2.492.1 comes with a brand-new search experience. We’re calling it Command Palette and it’s a one-stop shop for searching across everything in Jenkins. Whether you’re searching for jobs, builds, or settings, Command Palette makes it faster and easier than ever to find exactly what you need. Command Palette is a full-screen search experience, giving you more room to view results and access richer, more detailed information. Results are now presented with clear and helpful icons, improving visibility and making it easier to identify what you’re looking for at a glance. Command Palette is also incredibly accessible - just press CMD+K (on macOS) or... <div class="imageblock center"> <div class="content"> <img src="https://www.jenkins.io/images/post-images/2025/02/2025-02-05-command-palette/opengraph.png" alt="opengraph"> </img> </div> <div class="paragraph"> <p>We’re happy to announce that <a href="https://www.jenkins.io/changelog-stable/2.492.1">Jenkins 2.492.1</a> comes with a brand-new search experience. We’re calling it <strong>Command Palette</strong> and it’s a one-stop shop for searching across <em>everything</em> in Jenkins.</p> </div> <div class="paragraph"> <p>Whether you’re searching for jobs, builds, or settings, Command Palette makes it faster and easier than ever to find exactly what you need.</p> </div> <div class="paragraph"> <p>Command Palette is a full-screen search experience, giving you more room to view results and access richer, more detailed information. Results are now presented with clear and helpful icons, improving visibility and making it easier to identify what you’re looking for at a glance.</p> </div> <div class="paragraph"> <p>Command Palette is also incredibly accessible - just press <code>CMD+K</code> (on macOS) or <code>CTRL+K</code> (on Windows/Linux) from any page to open it instantly. Alternatively, you can find it located in the navigation bar.</p> </div> <div class="paragraph"> <p>This feature and more are now available as part of the latest Jenkins release. To learn more about all the exciting changes included in this version, <a href="https://www.jenkins.io/changelog-stable/2.492.1">view the changelog</a>.</p> </div></div> https:/www.jenkins.io/blog/2025/01/16/jenkins-csp-project-update/ December Update: Momentum in Jenkins Content Security Policy Project 2026-03-19T18:14:09+00:00 2025-01-16T00:00:00+00:00 December Update: Wrapping Up the Jenkins Content Security Policy Project The final month of 2024 has seen the Jenkins Content Security Policy (CSP) Project progressing towards a strong conclusion. Let’s reflect on the developments of December and wrap up the outcomes of this pivotal security initiative. A Strong Finish December marked the end of an intensive push to refine CSP across the Jenkins ecosystem. Our team faced a mixture of challenges and successes, which ultimately led to significant advancements in securing our plugins. Key Developments: Multiple Plugin Releases: The month saw the closure of several crucial projects, with the successful release of the Claim, Email Extension, Last Changes, Pipeline Aggregator... <div class="sect1"> <h2 id="december-update-wrapping-up-the-jenkins-content-security-policy-project"><a class="anchor" href="#december-update-wrapping-up-the-jenkins-content-security-policy-project" />December Update: Wrapping Up the Jenkins Content Security Policy Project</h2> <div class="sectionbody"> <div class="paragraph"> <p>The final month of 2024 has seen the Jenkins Content Security Policy (CSP) Project progressing towards a strong conclusion. Let’s reflect on the developments of December and wrap up the outcomes of this pivotal security initiative.</p> </div> <div class="sect2"> <h3 id="a-strong-finish"><a class="anchor" href="#a-strong-finish" />A Strong Finish</h3> <div class="paragraph"> <p>December marked the end of an intensive push to refine CSP across the Jenkins ecosystem. Our team faced a mixture of challenges and successes, which ultimately led to significant advancements in securing our plugins.</p> </div> <div class="paragraph"> <p><strong>Key Developments:</strong></p> </div> <div class="ulist"> <ul> <li> <p><strong>Multiple Plugin Releases:</strong> The month saw the closure of several crucial projects, with the successful release of the <a href="https://plugins.jenkins.io/claim">Claim</a>, <a href="https://plugins.jenkins.io/email-ext">Email Extension</a>, <a href="https://plugins.jenkins.io/last-changes">Last Changes</a>, <a href="https://plugins.jenkins.io/pipeline-aggregator-view">Pipeline Aggregator View</a>, <a href="https://plugins.jenkins.io/pollscm">Poll SCM</a>, and <a href="https://plugins.jenkins.io/port-allocator">Port Allocator</a> plugins. These updates are critical in ensuring compatibility and enhancing security standards in the Jenkins environment.</p> </li> <li> <p><strong>Continued Modernization:</strong> Efforts to update the plugins, particularly those with a higher number of installations, were augmented. This included addressing outdated plugins that required substantial reworks beyond the primary CSP concerns.</p> </li> </ul> </div> <div class="paragraph"> <p><strong>Technical Challenges:</strong></p> </div> <div class="ulist"> <ul> <li> <p>Our shift to targeting less frequently used plugins brought about unique challenges, particularly in dealing with outdated plugins and unresponsive maintainers. This slowed our PR review and merge processes, but taught us valuable lessons in managing large-scale open-source projects.</p> </li> </ul> </div> </div> <div class="sect2"> <h3 id="looking-back-at-the-journey"><a class="anchor" href="#looking-back-at-the-journey" />Looking Back at the Journey</h3> <div class="paragraph"> <p>The CSP Project has not only focused on immediate security needs, but also laid a foundation for future improvements. Here’s a summary of the journey over the past three months:</p> </div> <div class="ulist"> <ul> <li> <p>In October, we initiated the process by identifying critical vulnerabilities and establishing early groundwork. Collaborative actions paved the way for subsequent enhancements.</p> </li> <li> <p>November saw a more aggressive push towards resolving identified vulnerabilities and integrating CSP into a broader range of plugins.</p> </li> <li> <p>By December, our efforts coalesced into a strong culmination with enhanced CSP implementation and lessons learned addressing broader community needs.</p> </li> </ul> </div> <div class="paragraph"> <p><strong>Collaboration and Community:</strong></p> </div> <div class="ulist"> <ul> <li> <p>The collaboration between our developers and the broader Jenkins community was instrumental in navigating through the project. We are grateful to all contributors, especially the core team members <a href="https://www.jenkins.io/blog/authors/shlomomdahan">Shlomo Dahan</a> and <a href="https://github.com/yaroslavafenkin">Yaroslav Afenkin</a>, under the guidance of <a href="https://www.jenkins.io/blog/authors/basil">Basil Crow</a>.</p> </li> </ul> </div> </div> <div class="sect2"> <h3 id="whats-next"><a class="anchor" href="#whats-next" />What’s Next?</h3> <div class="paragraph"> <p>As we move into 2025, the experiences and insights gained from the CSP Project will guide further security enhancements in Jenkins:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Expanded CSP Integration:</strong> Based on the project’s findings, expanded CSP integration into the Jenkins core is planned, aiming to provide a more robust defense mechanism against various web security threats.</p> </li> <li> <p><strong>Continuous Community Engagement:</strong> We encourage the community to remain involved, provide feedback and participate in ongoing security initiatives.</p> </li> </ul> </div> </div> <div class="sect2"> <h3 id="acknowledgments"><a class="anchor" href="#acknowledgments" />Acknowledgments</h3> <div class="paragraph"> <p>We extend our deepest thanks to everyone who contributed to this project’s success. Your dedication ensures Jenkins remains secure and reliable.</p> </div> <div class="paragraph"> <p>Stay tuned for future updates, and continue supporting a safer Jenkins!</p> </div> </div> </div> </div> https:/www.jenkins.io/blog/2025/01/16/jenkins-2024-recap/ Jenkins 2024 in Review 2026-03-19T18:14:09+00:00 2025-01-16T00:00:00+00:00 As we welcome 2025, we take a moment to reflect on the past year and celebrate some of our most memorable achievements, impactful projects, and significant changes over the last 366 days. Every contribution, no matter its form, plays a vital role in shaping the Jenkins project. Without the collective efforts of our contributors, supporters, and community members, Jenkins wouldn’t be what it is today. From every pull request to the grants and donations that enable Jenkins to meet the evolving needs of our community, we extend our heartfelt gratitude and deepest appreciation. Thank you for being part of our journey! Jenkins 2024 By... <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/01/16/2024-recap.png" alt="Jenkins 2024 recap" /></span> </p> <div class="paragraph"> <p>As we welcome 2025, we take a moment to reflect on the past year and celebrate some of our most memorable achievements, impactful projects, and significant changes over the last 366 days. Every contribution, no matter its form, plays a vital role in shaping the Jenkins project. Without the collective efforts of our contributors, supporters, and community members, Jenkins wouldn’t be what it is today. From every pull request to the grants and donations that enable Jenkins to meet the evolving needs of our community, we extend our heartfelt gratitude and deepest appreciation. Thank you for being part of our journey!</p> </div> <div class="paragraph"> <p>Jenkins 2024 By the Numbers from <a href="https://stats.jenkins.io/statistics">stats.jenkins.io</a>: <span class="image"><img src="https://www.jenkins.io/images/post-images/2025/01/16/jenkins-by-the-numbers.png" alt="Jenkins 2024 by the numbers" /></span> </p> <div class="paragraph"> <p>The Jenkins project was also announced as the winner of the 2024 DevOps Dozen award for Most Innovative Open Source Project. This follows up our win from 2023 and helps illustrate that the Jenkins project is always looking forward. Thanks to all those who voted for Jenkins and the users of Jenkins that foster an environment of innovation for all.</p> </div> <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/01/16/devops-dozen-2024-award.png" alt="Jenkins announced as the winner of the DevOps Dozen 2024 award for Most Innovative Open Source Project." /></span> </p> <div id="infrastructure" class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/01/16/infrastructure.png" alt="Infrastructure Update" /></span> </p> <div class="paragraph"> <p>Thanks to the efforts of the Jenkins infrastructure team, the Jenkins update center has been migrated to a new mirror-based architecture, which is 10x more cost-effective and is <a href="https://www.jenkins.io/blog/2024/11/16/new-update-center/">now in production</a>. Over several months, Jenkins Infra performed multiple brownouts to test the services and ensure that the migration would be smooth. The tests were successful, and they were able to detect issues that would have caused major headaches for users. Thankfully, these issues were resolved, and while there were a few bumps post-migration, the update center has been doing very well over the last few weeks.</p> </div> <div class="paragraph"> <p>Throughout the year, the Jenkins infrastructure team has been working on several areas to reduce operating costs all around. This has taken the form of converting the spending and usage in some areas to others, migrating the update center, and finding new ways to alleviate the spending, all while increasing the overall Jenkins job count. As a result, their cost reduction work amounted to an over 50% decrease from 2023’s Azure CDF operating costs. Additionally, thanks to improvements and measures implemented in December, there was an over 40% decrease in AWS (via CloudBees) operating costs. Despite the second time frame being so short, this large of a change is indicative of the impact this will have for the Jenkins project going forward. These are massive wins in terms of their impact and reflect the hard work needed to achieve such results.</p> </div> <div id="security" class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/01/16/security.png" alt="Security Update" /></span> </p> <div class="paragraph"> <p>At the beginning of 2024, <a href="https://www.jenkins.io/blog/2024/01/25/sonar-vulnerability-report/">Sonar worked with the Jenkins security team</a> to address a previously unnoticed vulnerability. The issue was very niche and would only execute given a specific set of circumstances and permissions, so there was no larger threat here. However, the existence of this vulnerability was enough reason for Jenkins security and Sonar to collaborate and resolve this issue. Thanks to their in-depth work and tenacity in removing the vulnerability, Jenkins continues to be a secure and well-maintained DevOps platform.</p> </div> <div class="paragraph"> <p>Additionally, thanks to Alpha Omega for their <a href="https://www.jenkins.io/blog/2024/10/04/content-security-policy-grant/">grant and collaboration</a>, we have been able to make a concerted effort to update the CSP for Jenkins. Their grant has allowed us to bring in two key contributors to take on the work of this project and their work has been nothing short of incredible. From the very start of the project, Shlomo Dahan and Yaroslav Afenkin, under the guidance of Basil Crow, have been working furiously to help improve the CSP of Jenkins and bring some of the most important plugins up to speed.</p> </div> <div class="paragraph"> <p>By the numbers:</p> </div> <div class="ulist"> <ul> <li> <p>Published 6 security advisories for Jenkins core</p> </li> <li> <p>Published 8 security advisories for 33 Jenkins plugins</p> </li> </ul> </div> <div class="paragraph"> <p>In addition to the collaboration with Sonar, the Jenkins Security team has worked constantly throughout 2024 to ensure that security issues are acknowledged and resolved whether they are for Jenkins core or plugins within the ecosystem.</p> </div> <div id="platform" class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/01/16/platform-modernization.png" alt="Platform Modernization Update" /></span> </p> <div class="paragraph"> <p>Over the summer, the Jenkins weekly release line made the move to <a href="https://www.jenkins.io/blog/2024/06/11/require-java-17/">require Java 17</a> as a baseline. This was an important update to keep up with current usage and start the process of dropping support for Java 11. Thanks to the hard work and dedication of Jenkins developers, the transition was successful and we saw a steady rise in JDK 17 installation and usage. By the end of the October LTS release, the Java 17 requirement had been thoroughly tested and used over the preceding months, ensuring that its inclusion would be safe. Since the October release of LTS 2.479.1, we have not seen any major issues with Java 17 usage. While there have been some hiccups when it comes to upgrading plugins alongside the Jenkins LTS, these have been addressed as they come up and typically can be resolved by ensuring the plugin is updated before and after upgrading Jenkins.</p> </div> <div class="paragraph"> <p>In addition to the move to Java 17, Jenkins developers worked tirelessly to upgrade to Spring Security and Framework 6, Eclipse Jetty 12, and Jakarta EE 9. These upgrades were crucial to ensuring that Jenkins is keeping up with current trends and usage of the platform. They are also major updates in security, ensuring that the Jenkins project is doing everything it can to protect its users during development.</p> </div> <div id="documentation" class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/01/16/documentation.png" alt="Documentation Update" /></span> </p> <div class="paragraph"> <p>We’ve completed one full year of <a href="https://contributors.jenkins.io/">Contributor Spotlight</a> posts, highlighting the different backgrounds, skills, and work that make up the Jenkins community. This space has allowed us to show appreciation for those who keep Jenkins fresh, strong, and viable so consistently. From long-time contributors and early adopters of Jenkins to recent Google Summer of Code participants, there are all kinds of stories to tell and efforts to acknowledge. Thanks to all the contributors who have collaborated with us for the contributor spotlight and for allowing us to share their stories. Additionally, new contributors have been welcomed to Jenkins through community projects, including Hacktoberfest and another successful Google Summer of Code.</p> </div> <div class="paragraph"> <p>Through these partnerships and community projects, we have been able to expand the Jenkins community by welcoming new contributors to the project, regardless of the size of their contributions. By providing exposure to open-source practices and expectations, we have enriched the project and open-source community as a whole. While participating in these events, contributors have helped update areas of Jenkins documentation and the creation of <a href="https://stats.jenkins.io/">stats.jenkins.io</a>. Even though our Google Summer of Code projects are specific to Jenkins, how to work with an open-source project and engage with the community are invaluable experiences that will expand these contributors' skills beyond Jenkins. Both Hacktoberfest and GSoC have become yearly events for Jenkins and we thank them for allowing us to collaborate and to the contributors who help Jenkins continue to be an ever-growing project.</p> </div> <div id="outreach" class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/01/16/outreach-and-advocacy.png" alt="Outreach and Advocacy Update" /></span> </p> <div class="paragraph"> <p>Throughout 2024, there were several events that Jenkins participated in that allowed us to connect with the Jenkins and extended open-source communities. We started the year by gathering in Brussels for FOSDEM and a hugely successful <a href="https://www.jenkins.io/blog/2024/02/28/jenkins-contributor-summit-and-fosdem-recap/">Jenkins contributor summit</a>. The contributor summit provided a space for Jenkins contributors to meet and connect in person, get updates and roadmap plans from Jenkins officers, and work on a handful of different projects together. It is not often that we are all able to meet in person, so these events are hugely invaluable.</p> </div> <div class="paragraph"> <p>In addition to DevOps World and FOSDEM, Jenkins had a presence at the Open Source Summit Europe, where <a href="https://www.jenkins.io/blog/authors/gounthar">Bruno Verachten</a> gave a talk detailing how and why the <a href="https://www.jenkins.io/blog/2024/10/25/jenkins-tutorial-revamp/">Jenkins tutorial revamp</a> has been needed and successful. He shared details about how incorporating Docker Compose makes the tutorial experience more simplified and beneficial to the user overall, and how it is safer than using the previous Docker-in-Docker method. Users benefit from both the comfort of knowing their build is secure and a more straightforward example, allowing them to get started faster.</p> </div> <div class="paragraph"> <p>The last event of the year that involved Jenkins was an <a href="https://techstrong.tv/videos/cd-pipeline/behind-the-code-jenkins-upgrades-challenges-and-evolution-the-cd-pipeline-ep15">episode of Techstrong TV</a> that featured <a href="https://www.jenkins.io/blog/authors/markewaite">Mark Waite</a>, <a href="https://www.jenkins.io/blog/authors/basil">Basil Crow</a>, <a href="https://www.jenkins.io/blog/authors/dduportal">Damien Duportal</a>, and <a href="https://www.jenkins.io/blog/authors/krisstern">Kris Stern</a>, where they discussed the challenges and successes of the ever-evolving Jenkins project. They discussed how upgrades and the constantly changing landscape of development influence the Jenkins project’s direction and what it takes to manage a large project like Jenkins. Thanks to Techstrong TV for having Jenkins on and to the Jenkins representatives for sharing their insights and anecdotes about the project.</p> </div> <div id="modern-ui" class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/01/16/ui-ux.png" alt="User Experience Update" /></span> </p> <div class="paragraph"> <p>There were also presentations from <a href="https://www.jenkins.io/blog/2024/08/29/jenkins-design/">Jenkins contributors at the virtual DevOps World event</a>, showcasing some of the UI/UX updates and enhancements that have been implemented in the last year. This includes everything from buttons and menu items being refreshed, to more modern page design, and enhancements intended to make the Jenkins user experience more smooth and inviting overall. There have been additional UI updates since the talk, such as providing the help text within Jenkins directly, instead of hiding it in an extra button. This allowed us to showcase the work and effort that goes into refining the Jenkins experience even further. Thanks to <a href="https://www.jenkins.io/blog/authors/janfaracik">Jan Faracik</a> and <a href="https://www.jenkins.io/blog/authors/timja">Tim Jacomb</a> for delivering this talk and providing so many great updates to the Jenkins UI/UX.</p> </div> <div class="paragraph"> <p>Constantly working to enhance the Jenkins user experience, the folks working on UI/UX have a passion for making Jenkins more sleek and modern. One of the bigger UI enhancements completed in 2024 was <a href="https://issue-redirect.jenkins.io/issue/73539">moving away from Yahoo! User Interface</a> for the project as a whole. This is the culmination of a lot of work by done by multiple contributors, all with the goal of eventually removing YUI from Jenkins completely. Several components have been updated using alternative frameworks, proving that this is both possible and the right path forward for Jenkins UI.</p> </div> <div class="paragraph"> <p>The Build History widget was also revamped, to modernize and clean up the UI while retaining the functionalities that users have come to rely on. This is another great example of the UI being enhanced with the help of community feedback. The Jenkins community is always able to share their thoughts on work being done within Jenkins, as having feedback helps guide any work that can or will affect users.</p> </div> <div class="paragraph"> <p>The Design Library also underwent <a href="https://github.com/jenkinsci/design-library-plugin/pull/359">a major UI overhaul</a>. Prior to this, the Design Library had grown quite a bit and was not consistent across multiple areas. The work done makes the Design Library UI consistent, provides more clarity for grouped samples, includes multiple functionalities such as page editing, tab switching, and searching, and increases the overall usefulness of the Design Library. The modernization of the Design Library is further outlined in the above link and lists just how many changes went into this work.</p> </div> <div class="paragraph"> <p>Contributors have also modernized Jenkins menus and pages, <a href="https://www.jenkins.io/blog/2024/12/02/pr-titles/">incorporated user-generated requests</a>, and implemented several changes to refine the UI, such as overhauling the search function. Jenkins is now over 13 years old, but it has received more than just a fresh coat of paint over the years, and the UI/UX SIG has played a critical role in making sure that Jenkins is as appealing as it is powerful. Additional thanks to all those who help enhance the Jenkins UX/UI through their efforts to provide the best experience possible. The following image illustrates some more specific examples of UI enhancements done over the past year.</p> </div> <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/01/16/UI-changes.png" alt="UI changes visualized collage." /></span> </p> <div id="grants-and-sponsorships" class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/01/16/sponsor-contributions.png" alt="Grants and Sponsors" /></span> </p> <div class="paragraph"> <p>Over the last year, we have received several grants and sponsorships that allow the project to not only continue to function but improve in ways that benefit all users and developers. We have used <a href="https://www.jenkins.io/blog/2024/07/24/amazon-donates-to-jenkins/">AWS</a> and <a href="https://www.jenkins.io/blog/2024/07/26/microsoft-donates-to-jenkins/">Microsoft Azure</a> to provide many different services over the years, and their continued support allows us to continue to do so. From download points to powering the controllers that build Jenkins, their donations help ensure Jenkins' lights stay on.</p> </div> <div class="paragraph"> <p>Thanks to all of our sponsors, for supporting Jenkins throughout the year in so many ways and places. From providing infrastructure support, financial support, or making it possible for Jenkins to reach further globally, we would be remiss if we did not share our appreciation for all that you provide:</p> </div> <div class="paragraph"> <p><span class="image"><img src="https://www.jenkins.io/images/post-images/2025/01/16/jenkins-sponsors-2024.png" alt="Jenkins sponsors in their various levels collage." /></span> </p></div></div></div></div></div></div></div></div></div></div></div></div> https:/www.jenkins.io/blog/2025/01/10/design-library/ Introducing Jenkins Design Library 3 2026-03-19T18:14:09+00:00 2025-01-10T00:00:00+00:00 We’re thrilled to announce that the Jenkins Design Library 3 is now live! 🎉 With this release, we’ve refined every aspect of the library to provide better documentation for plugin developers and ensure a more consistent, accessible, and intuitive experience. So what’s new? A new consistent design Every page has been refined to maintain a cohesive look and feel, making it easier than ever to work with Jenkins Design Library. All samples are now grouped into two clear categories — Components and Patterns — ensuring you can quickly find what you need. We’ve also introduced interactive examples, such as the new Spacing sample, which will make it... <div class="imageblock center"> <div class="content"> <img src="https://www.jenkins.io/images/post-images/2025/01/2025-01-10-design-library/opengraph.png" alt="opengraph"> </img> </div> <div class="paragraph"> <p>We’re thrilled to announce that the <a href="https://weekly.ci.jenkins.io/design-library"><strong>Jenkins Design Library 3</strong></a> is now live! 🎉</p> </div> <div class="paragraph"> <p>With this release, we’ve refined every aspect of the library to provide better documentation for plugin developers and ensure a more consistent, accessible, and intuitive experience.</p> </div> <hr> <div class="sect2"> <h3 id="so-whats-new"><a class="anchor" href="#so-whats-new" />So what’s new?</h3> <div class="paragraph"> <p><strong>A new consistent design</strong></p> </div> <div class="paragraph"> <p>Every page has been refined to maintain a cohesive look and feel, making it easier than ever to work with Jenkins Design Library. All samples are now grouped into two clear categories — Components and Patterns — ensuring you can quickly find what you need. We’ve also introduced interactive examples, such as the new <a href="https://weekly.ci.jenkins.io/design-library/spacing">Spacing</a> sample, which will make it easier than ever to find the component or pattern best suited for your needs.</p> </div> <div class="paragraph"> <p><strong>New ‘Edit this page’ button</strong></p> </div> <div class="paragraph"> <p>Want to contribute or suggest improvements? The new 'Edit this page' button makes it easy to jump in and collaborate.</p> </div> <div class="paragraph"> <p><strong>Accessibility improvements</strong></p> </div> <div class="paragraph"> <p>The library now respects user preferences for contrast (prefers-contrast) and motion (prefers-reduced-motion), making it more accessible to everyone.</p> </div> <div class="paragraph"> <p><strong>Versions</strong></p> </div> <div class="paragraph"> <p>Pages can now declare which Long-Term Support (LTS) release they’re compatible with, so you always know where the latest components are available.</p> </div> <hr> </hr> <div class="sect2"> <h3 id="available-now"><a class="anchor" href="#available-now" />Available now 🚀</h3> <div class="paragraph"> <p>Jenkins Design Library 3 is ready for plugin developers to explore and use. Head over to <a href="https://weekly.ci.jenkins.io/design-library">Jenkins Design Library</a> to dive in and see all the updates in action.</p> </div> <div class="paragraph"> <p><strong>Thanks to the community 🎉</strong></p> </div> <div class="paragraph"> <p>A huge thank you to everyone who contributed to this effort. Happy coding!</p> </div> </div></div></hr></div> https:/www.jenkins.io/blog/2024/12/16/google-summer-of-code-2025-volunteers-needed-to-mentor-future-jenkins-contributors/ Google Summer of Code 2025: Volunteers Needed to Mentor Future Jenkins Contributors 2026-03-19T18:14:09+00:00 2024-12-16T00:00:00+00:00 alyssat TL,DR: Jenkins is preparing to participate in its ninth (9th) year in Google Summer of Code (GSoC). We are seeking volunteers to be Jenkins mentors in the program: Mentoring takes about 5 to 8 hours of work per week for a 10-22 weeks program. Mentors provide guidance, coaching, review proposals, pull-requests, and contributor presentations. Sign up to mentor one of these project ideas or propose your own. Don’t have time to read? Watch this video. What is Google Summer of Code? Google Summer of Code (GSoC) is a global, online mentoring program focused on introducing new contributors to open-source software development. GSoC contributors work on a 10-22 weeks-long... <div class="paragraph"> <p><span class="image center center"><img src="https://www.jenkins.io/images/post-images/2023/12/gsoc-call-for-mentors.png" alt="Google Summer of Code call for mentors." /></span> </p> <div class="sect2"> <h3 id="tldr"><a class="anchor" href="#tldr" />TL,DR:</h3> <div class="paragraph"> <p>Jenkins is preparing to participate in its ninth (9th) year in Google Summer of Code (GSoC). We are seeking volunteers to be Jenkins mentors in the program:</p> </div> <div class="ulist"> <ul> <li> <p>Mentoring takes about 5 to 8 hours of work per week for a 10-22 weeks program.</p> </li> <li> <p>Mentors provide guidance, coaching, review proposals, pull-requests, and contributor presentations.</p> </li> <li> <p>Sign up to mentor <a href="https://www.jenkins.io/projects/gsoc/2025/project-ideas/">one of these project ideas</a> or propose your own.</p> </li> </ul> </div> <div class="paragraph"> <p>Don’t have time to read? <a href="https://youtu.be/02Ygo5RAcu4">Watch this video.</a></p> </div> </div> <div class="sect1"> <h2 id="what-is-google-summer-of-code"><a class="anchor" href="#what-is-google-summer-of-code" />What is Google Summer of Code?</h2> <div class="sectionbody"> <div class="paragraph"> <p><a href="https://summerofcode.withgoogle.com/">Google Summer of Code</a> (GSoC) is a global, online mentoring program focused on introducing new contributors to open-source software development. GSoC contributors work on a 10-22 weeks-long programming project with the guidance of mentors from their respective open source organizations. During GSoC, accepted contributors are paired with mentors from participating open-source organizations of their choice, gaining exposure to real-world software development techniques. These GSoC contributors will get to learn from experienced open-source developers while writing code for real-world projects! A small stipend is provided as an incentive to support their open-source contributions. Refer to the <a href="https://summerofcode.withgoogle.com/get-started">GSoC contributor eligibility</a> documentation for more details.</p> </div> </div> </div> <div class="sect1"> <h2 id="why-might-you-consider-being-a-jenkins-in-gsoc-mentor"><a class="anchor" href="#why-might-you-consider-being-a-jenkins-in-gsoc-mentor" />Why might you consider being a Jenkins in GSoC mentor?</h2> <div class="sectionbody"> <div class="paragraph"> <p>Mentor interaction is a vital part of GSoC. Mentoring is a great opportunity to improve your management and people (or general “soft”) skills while giving back to the community. In return for mentoring, a GSoC contributor works on your project full-time for 10-22 weeks. Think about the projects that you’ve always wanted to do but never had the time to complete. GSoC is a fantastic program and the Jenkins project is looking forward to participating in it again in 2025, potentially with your participation!</p> </div> </div> </div> <div class="sect1"> <h2 id="what-does-mentoring-involve"><a class="anchor" href="#what-does-mentoring-involve" />What does mentoring involve?</h2> <div class="sectionbody"> <div class="paragraph"> <p>Potential mentors are invited to read the <a href="https://www.jenkins.io/projects/gsoc/mentors">information for mentors</a>. Note that being a GSoC mentor does not require expert knowledge of Jenkins. Mentors do not work alone. We make sure that every project has at least two mentors. GSoC org admins will be there to help to find technical advisers, so you can study together with your GSoC contributor. Mentoring takes about 5 to 8 hours of work per week (more at the start, less at the end). Mentors provide guidance, coaching, and sometimes a bit of cheerleading. They review GSoC contributor proposals, pull-requests, and contributor presentations at the evaluation phase. They fill in the Google-provided final evaluations at the end of the coding period.</p> </div> </div> </div> <div class="sect1"> <h2 id="so-you-want-to-be-a-mentor-but-dont-have-a-project-idea-we-can-help-with-that"><a class="anchor" href="#so-you-want-to-be-a-mentor-but-dont-have-a-project-idea-we-can-help-with-that" />So you want to be a mentor but don’t have a project idea? We can help with that!</h2> <div class="sectionbody"> <div class="paragraph"> <p>GSoC project ideas are coding projects that potential GSoC contributors are expected to accomplish in about 10-22 weeks. The coding projects can be new features, plugins, test frameworks, infrastructure, graphical interface, etc. If you don’t have a specific project idea, please consider being a mentor for one of <a href="https://www.jenkins.io/projects/gsoc/2025/project-ideas/">these project ideas</a>. If you have a specific project in mind, please send us your project ideas before the beginning of February, so they can get a proper review by the GSoC committee and by the community. Of course, we would love it if you were the mentor for your project idea.</p> </div> </div> </div> <div class="sect1"> <h2 id="how-to-submit-a-project-idea"><a class="anchor" href="#how-to-submit-a-project-idea" />How to submit a project idea</h2> <div class="sectionbody"> <div class="paragraph"> <p>Create a pull request with your idea in an .adoc file in the <a href="https://github.com/jenkins-infra/jenkins.io/tree/master/content/projects/gsoc/2025/project-ideas">project ideas</a>. It is not necessary to submit a Google Doc, but it will still work if you want to do that. Refer to the <a href="https://www.jenkins.io/projects/gsoc/proposing-project-ideas/">instructions</a> on submitting ideas, which include an .adoc template and some examples.</p> </div> </div> </div> <div class="sect1"> <h2 id="need-more-inspiration"><a class="anchor" href="#need-more-inspiration" />Need more inspiration?</h2> <div class="sectionbody"> <div class="paragraph"> <p>Case in point, the <a href="https://www.jenkins.io/blog/2023/10/25/what-is-the-plugin-health-score/">Plugin Health Score</a>. A GSoC project idea that started in the summer of 2022, and was implemented in the summer of 2023 for millions of Jenkins users to benefit from!</p> </div> <div class="paragraph"> <p>We look forward to welcoming new mentors for GSoC 2025!</p> </div> <div class="paragraph"> <p>For any questions, you can find the GSoC Org Admins, mentors, and participants on the <a href="https://app.gitter.im/#/room/#jenkinsci_gsoc-sig:gitter.im">GSoC SIG Gitter</a> chat.</p> </div> </div> </div></div> https:/www.jenkins.io/blog/2024/12/05/jenkins-csp-project-update/ November Update: Momentum in Jenkins Content Security Policy Project 2026-03-19T18:14:09+00:00 2024-12-05T00:00:00+00:00 The Jenkins Content Security Policy (CSP) project has been bustling with activity. November saw many initiatives aimed at refining and enhancing the security framework for the vast spectrum of Jenkins plugins, extending upon the notable advancements achieved in October. October in Review October laid the foundation with a lot of enhancement in CSP plugin capabilities, theorizing for eventual widespread deployment without friction. The month was dominated by aggressive modernization that started with more than 20 plugins, an essential step to mitigate security risks and perform good compliance with ever-evolving standards. November Advancements Plugin Updates and Progress In November, the team tackled more than twenty complex plugin updates,... <div class="paragraph"> <p>The Jenkins Content Security Policy (CSP) project has been bustling with activity. November saw many initiatives aimed at refining and enhancing the security framework for the vast spectrum of Jenkins plugins, extending upon the notable advancements achieved in October.</p> </div> <div class="sect1"> <h2 id="october-in-review"><a class="anchor" href="#october-in-review" />October in Review</h2> <div class="sectionbody"> <div class="paragraph"> <p>October laid the foundation with a lot of enhancement in CSP plugin capabilities, theorizing for eventual widespread deployment without friction. The month was dominated by aggressive modernization that started with more than 20 plugins, an essential step to mitigate security risks and perform good compliance with ever-evolving standards.</p> </div> </div> </div> <div class="sect1"> <h2 id="november-advancements"><a class="anchor" href="#november-advancements" />November Advancements</h2> <div class="sectionbody"> <div class="sect2"> <h3 id="plugin-updates-and-progress"><a class="anchor" href="#plugin-updates-and-progress" />Plugin Updates and Progress</h3> <div class="paragraph"> <p>In November, the team tackled more than twenty complex plugin updates, implementing strategic fixes and exploring innovative solutions for CSP adoption:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Build Pipeline Plugin</strong>: The team consolidated multiple changes into a single PR, targeting enhanced stability across interconnected updates.</p> </li> <li> <p><strong><a href="https://plugins.jenkins.io/htmlpublisher">HTML Publisher</a> and <a href="https://plugins.jenkins.io/subversion">Subversion</a> Plugins</strong>: Both plugins saw active development, with the former having multiple open PRs, highlighting a dynamic push towards modernization.</p> </li> <li> <p><strong>Milestone Targets</strong>: The team has made significant inroads by updating plugins with installation ranges hitting 22k, pushing next to the 10k installation range.</p> </li> <li> <p><strong><a href="https://plugins.jenkins.io/uno-choice">Active Choices</a> Plugin</strong>: Notable progress with responsive maintenance and Selenium testing catching browser-specific quirks which ATH might overlook.</p> </li> </ul> </div> </div> <div class="sect2"> <h3 id="intensive-focus-areas"><a class="anchor" href="#intensive-focus-areas" />Intensive Focus Areas</h3> <div class="ulist"> <ul> <li> <p>Many plugins, such as the <a href="https://plugins.jenkins.io/sonar">Sonar</a>, <a href="https://plugins.jenkins.io/blueocean">Blue Ocean</a>, and <a href="https://plugins.jenkins.io/artifactory">Artifactory</a> plugins have posed unique challenges, ranging from external CI management hurdles to complex local installation and testing environments.</p> </li> <li> <p>Future updates aim for comprehensive modernization of plugins deemed outdated yet still in use, like the <a href="https://plugins.jenkins.io/ivy">IVY</a> and <a href="https://plugins.jenkins.io/cvs">CVS</a> plugins, along with ambitious plans for the <a href="https://plugins.jenkins.io/build-timestamp">Build Timestamp</a> and <a href="https://plugins.jenkins.io/build-monitor-plugin">Build Monitor</a> plugins.</p> </li> </ul> </div> </div> <div class="sect2"> <h3 id="automation-and-modernization-initiatives"><a class="anchor" href="#automation-and-modernization-initiatives" />Automation and Modernization Initiatives</h3> <div class="paragraph"> <p>The aim to automate the modernization process will provide a significant thrust forward, alleviating manual burdens and expediting the transformation to adhere to contemporary security protocols for older plugins, such as the <a href="https://plugins.jenkins.io/dynamic_extended_choice_parameter">Dynamic Extended Choice Parameter</a> plugin.</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="challenges-and-opportunities"><a class="anchor" href="#challenges-and-opportunities" />Challenges and Opportunities</h2> <div class="sectionbody"> <div class="paragraph"> <p>While progress has been strong, challenges remain:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Complex Dependencies:</strong> Plugins like <a href="https://plugins.jenkins.io/build-pipeline-plugin">Build Pipeline</a> and <a href="https://plugins.jenkins.io/delivery-pipeline-plugin">Delivery Pipeline</a> require extensive modernization due to their intricate interdependencies.</p> </li> <li> <p><strong>Legacy Patterns:</strong> JavaScript-generated HTML and inline event handlers continue to pose hurdles, requiring tailored approaches for resolution.</p> </li> <li> <p><strong>Maintainer Collaboration:</strong> Certain plugins face slower updates due to maintainer availability, highlighting the importance of community involvement.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <h2 id="looking-ahead"><a class="anchor" href="#looking-ahead" />Looking Ahead</h2> <div class="sectionbody"> <div class="paragraph"> <p>The sharp focus will continue to be on sustaining the momentum to refine the CSP implementation processes. The vision for December includes:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Resolving the last CSP violations</strong> and finalizing updates for priority plugins.</p> </li> <li> <p><strong>Enhancing CSP scanning tools</strong> to support maintainers and users in identifying potential issues.</p> </li> <li> <p><strong>Crucial Plugin Modernization</strong>: Tackling plugins with intricate security implications like the Active Choices plugin exemplifies the targeted approach to enhance plugins that intersect closely with security norms.</p> </li> <li> <p><strong>CSP Header Enhancements</strong>: Plans are in place to converge on a strategy for implementing CSP headers seamlessly across Jenkins core.</p> </li> </ul> </div> <div class="sect2"> <h3 id="engaging-the-community"><a class="anchor" href="#engaging-the-community" />Engaging the Community</h3> <div class="admonitionblock note"> <table> <tr> <td class="icon"> <i class="fa icon-note" title="Note" /> </td> <td class="content"> <div class="paragraph"> <p>Community engagement continues to be a cornerstone of the CSP project. We encourage the Jenkins community to take an active role in ongoing initiatives by participating in testing, contributing to discussions, and suggesting improvements. Your input is invaluable!</p> </div> </td> </tr> </table> </div> <div class="paragraph"> <p>For more detailed insights or to dive deeper into our project, visit our <a href="https://www.jenkins.io/doc/developer/security/csp/">CSP documentation page</a>.</p> </div> <div class="paragraph"> <p>As this project moves forward, we remain committed to bolstering the security foundations of Jenkins, ensuring a secure and resilient environment for all its users.</p> </div> <div class="paragraph"> <p>We’re incredibly grateful to <a href="https://www.jenkins.io/blog/authors/shlomomdahan">Shlomo Dahan</a>, <a href="https://github.com/yaroslavafenkin">Yaroslav Afenkin</a>, <a href="https://www.jenkins.io/blog/authors/basil">Basil Crow</a>, and everyone who has contributed to this effort. Together, we’re building a safer Jenkins for everyone.</p> </div> <div class="paragraph"> <p>Stay tuned for the December update, where we’ll review the final outcomes of this exciting journey!</p> </div> </div> </div> </div> https:/www.jenkins.io/blog/2024/12/03/election-results/ 2024 Jenkins Board and Officer Election Results 2026-03-19T18:14:09+00:00 2024-12-03T00:00:00+00:00 The Jenkins community has completed the 2024 elections. On behalf of the Jenkins community and the elections committee, we congratulate all newly elected board members and officers! We also thank all candidates and voters who participated this year. Election results: Alexander Brandes, Valentin Delaye, and Alex Earl join Basil Crow and Mark Waite on the Jenkins Governance Board Tim Jacomb will continue as Release Officer Alyssa Tong will continue as Events Officer (uncontested) Damien Duportal will continue as Infrastructure Officer (uncontested) Wadeck Follonier will continue as Security Officer (uncontested) Kevin Martens will continue as Documentation Officer (uncontested) The board positions and officer roles are an essential part of the Jenkins project... <div class="paragraph"> <p><span class="image right center"><img src="https://www.jenkins.io/images/governance/elections/2024/opengraph.png" alt="Jenkins Elections" height="178" /></span> </p> <div class="paragraph"> <p>The Jenkins community has completed the 2024 elections. On behalf of the Jenkins community and the elections committee, we congratulate all newly elected board members and officers! We also thank all candidates and voters who participated this year.</p> </div> <div class="paragraph"> <p>Election results:</p> </div> <div class="ulist"> <ul> <li> <p><a href="https://www.jenkins.io/blog/2024/10/03/jenkins-election-candidates/#NotMyFault">Alexander Brandes</a>, <a href="https://www.jenkins.io/blog/2024/10/03/jenkins-election-candidates/#jonesbusy">Valentin Delaye</a>, and <a href="https://www.jenkins.io/blog/2024/10/03/jenkins-election-candidates/#slide_o_mix-board">Alex Earl</a> join <a href="https://www.jenkins.io/blog/authors/basil/">Basil Crow</a> and <a href="https://www.jenkins.io/blog/authors/markewaite/">Mark Waite</a> on the <a href="https://www.jenkins.io/project/governance/#governance-board">Jenkins Governance Board</a></p> </li> <li> <p><a href="https://www.jenkins.io/blog/authors/timja/">Tim Jacomb</a> will continue as <a href="https://www.jenkins.io/project/team-leads/#release">Release Officer</a></p> </li> <li> <p><a href="https://www.jenkins.io/blog/authors/alyssat/">Alyssa Tong</a> will continue as <a href="https://www.jenkins.io/project/team-leads/#events">Events Officer</a> (uncontested)</p> </li> <li> <p><a href="https://www.jenkins.io/blog/authors/dduportal/">Damien Duportal</a> will continue as <a href="https://www.jenkins.io/project/team-leads/#infrastructure">Infrastructure Officer</a> (uncontested)</p> </li> <li> <p><a href="https://www.jenkins.io/blog/authors/wadeck/">Wadeck Follonier</a> will continue as <a href="https://www.jenkins.io/project/team-leads/#security">Security Officer</a> (uncontested)</p> </li> <li> <p><a href="https://www.jenkins.io/blog/authors/kmartens27/">Kevin Martens</a> will continue as <a href="https://www.jenkins.io/project/team-leads/#documentation">Documentation Officer</a> (uncontested)</p> </li> </ul> </div> <div class="paragraph"> <p>The board positions and officer roles are an essential part of the Jenkins project and we are excited to see contributors taking these roles.</p> </div> <div class="paragraph"> <p>The board continues to require that no single company may have a majority on the Jenkins governance board.</p> </div> <div class="sect1"> <h2 id="governance-board-election-details"><a class="anchor" href="#governance-board-election-details" />Governance Board election details</h2> <div class="sectionbody"> <div class="paragraph"> <p>This year we had <a href="https://www.jenkins.io/blog/2024/10/03/jenkins-election-candidates/#board-candidates">six candidates</a> for the Jenkins Governance Board and <a href="https://www.jenkins.io/blog/2024/10/03/jenkins-election-candidates/#officer-candidates">two candidates</a> for Release Officer. All of them are awesome community leaders who actively contribute to the Jenkins project and represent its users.</p> </div> <div class="paragraph"> <p>This year elected 3 governance board members, including a replacement for <a href="https://www.jenkins.io/blog/authors/kohsuke/">Kohsuke Kawaguchi</a> after his many years of service to Jenkins. We used the <a href="https://civs.cs.cornell.edu/">Condorcet Internet Voting Service</a> that allows voters to rank their choices rather than just picking their one favorite choice. You can find voting results in the <a href="https://civs1.civs.us/cgi-bin/results.pl?id=E_f287a2e101977dc8">governance board poll</a> and the <a href="https://civs1.civs.us/cgi-bin/results.pl?id=E_4c3443416941563c">release officer poll</a>.</p> </div> <div class="paragraph"> <p>All board members are elected for a 2-year term. The estimated end of the term for them is December 1, 2026.</p> </div> </div> </div> <div class="sect1"> <h2 id="officer-election-details"><a class="anchor" href="#officer-election-details" />Officer election details</h2> <div class="sectionbody"> <div class="paragraph"> <p>All 5 officer positions were up for election this year. These roles have a 1-year term, with the estimated end of term on December 1, 2025. After the initial review of nominations and confirmations with potential candidates, 4 officer positions were uncontested:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Alyssa Tong</strong> - <a href="https://www.jenkins.io/project/team-leads/#events">Events Officer</a></p> </li> <li> <p><strong>Damien Duportal</strong> - <a href="https://www.jenkins.io/project/team-leads/#infrastructure">Infrastructure Officer</a></p> </li> <li> <p><strong>Wadeck Follonier</strong> - <a href="https://www.jenkins.io/project/team-leads/#security">Security Officer</a></p> </li> <li> <p><strong>Kevin Martens</strong> - <a href="https://www.jenkins.io/project/team-leads/#documentation">Documentation Officer</a></p> </li> </ul> </div> <div class="paragraph"> <p>Thanks to all Jenkins officers for their continued leadership! Officers take responsibility for many day-to-day processes in the Jenkins community and lead the contributor teams working on them. It requires significant time commitment and it is not taken for granted.</p> </div> <div class="sect2"> <h3 id="statistics"><a class="anchor" href="#statistics" />Statistics</h3> <div class="paragraph"> <p>This year we had 81 registered voters and around 60 actual votes.</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="feedback"><a class="anchor" href="#feedback" />Feedback</h2> <div class="sectionbody"> <div class="paragraph"> <p>The Jenkins project plans to conduct elections every year. We appreciate and welcome feedback regarding the election process so that we can improve the process.</p> </div> <div class="paragraph"> <p>If you have any private feedback you would like to share, please send an email to the <a href="mailto:[email protected]">Jenkins Board</a>. If you would like to raise any issues about the election process, please contact one of the elected Governance Board members.</p> </div> </div> </div></div>