<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: sharma-sugurthi</title>
    <description>The latest articles on Forem by sharma-sugurthi (@sharma-sugurthi).</description>
    <link>https://forem.com/sharma-sugurthi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3817297%2Fde2b126b-236b-4006-a7d7-9f458c21ed48.png</url>
      <title>Forem: sharma-sugurthi</title>
      <link>https://forem.com/sharma-sugurthi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sharma-sugurthi"/>
    <language>en</language>
    <item>
      <title>So You Want to Contribute to Jenkins? Here's Everything Nobody Told Me</title>
      <dc:creator>sharma-sugurthi</dc:creator>
      <pubDate>Tue, 10 Mar 2026 18:00:38 +0000</pubDate>
      <link>https://forem.com/sharma-sugurthi/so-you-want-to-contribute-to-jenkins-heres-everything-nobody-told-me-9ne</link>
      <guid>https://forem.com/sharma-sugurthi/so-you-want-to-contribute-to-jenkins-heres-everything-nobody-told-me-9ne</guid>
      <description>&lt;p&gt;Let me be real with you.&lt;/p&gt;

&lt;p&gt;When I first decided to contribute to Jenkins, I opened the GitHub page, stared at it for ten minutes, and then went and watched YouTube instead.&lt;/p&gt;

&lt;p&gt;It felt big. Like showing up to a party where everyone else knows each other and you're holding your jacket wondering if you should even stay.&lt;/p&gt;

&lt;p&gt;If that's you right now, good. You're in the right place. This blog is everything I figured out the hard way, written in simple English, so you don't have to.&lt;/p&gt;




&lt;h2&gt;
  
  
  First, What Even Is Jenkins?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.jenkins.io/" rel="noopener noreferrer"&gt;Jenkins&lt;/a&gt; is an open-source automation server. It helps software teams build, test, and deploy their code automatically. Think of it as the robot that runs your tests every time you push code to GitHub, so your teammates don't have to.&lt;/p&gt;

&lt;p&gt;It's been around since 2011, it has &lt;strong&gt;over 1,900 plugins&lt;/strong&gt;, and it runs in production at companies you definitely know. It's also one of the most active open-source communities on the planet.&lt;/p&gt;

&lt;p&gt;So yes, contributing here actually means something.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where Does the Code Live?
&lt;/h2&gt;

&lt;p&gt;Jenkins isn't just one repository. It's spread across a few GitHub organizations:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Organization&lt;/th&gt;
&lt;th&gt;What it contains&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jenkinsci" rel="noopener noreferrer"&gt;jenkinsci&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The main Jenkins core + almost all plugins&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jenkins-infra" rel="noopener noreferrer"&gt;jenkins-infra&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The infrastructure running jenkins.io and ci.jenkins.io&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/jenkins-ci" rel="noopener noreferrer"&gt;jenkins-ci&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Older/legacy tooling&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For most contributors including me, especially beginners - &lt;strong&gt;jenkinsci is where you start.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How Do I Find a Project to Contribute To?
&lt;/h2&gt;

&lt;p&gt;A few good places:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://github.com/search?q=org%3Ajenkinsci+label%3A%22good+first+issue%22+state%3Aopen&amp;amp;type=issues" rel="noopener noreferrer"&gt;Good First Issues&lt;/a&gt;&lt;/strong&gt; - search across the entire jenkinsci org for issues labeled &lt;code&gt;good first issue&lt;/code&gt;. These are literally tagged by maintainers for people like you and me.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.jenkins.io/projects/gsoc/2026/project-ideas/" rel="noopener noreferrer"&gt;GSoC Project Ideas&lt;/a&gt;&lt;/strong&gt; - if you're applying for Google Summer of Code, this is the list of officially mentored projects. Each has a description, a mentor, and links to the codebase.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://plugins.jenkins.io/" rel="noopener noreferrer"&gt;Jenkins Plugins Index&lt;/a&gt;&lt;/strong&gt; - if you already use a Jenkins plugin and notice something broken or missing, that plugin probably has a GitHub repo under jenkinsci. Just search &lt;code&gt;jenkinsci/&amp;lt;plugin-name&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://stories.jenkins.io/" rel="noopener noreferrer"&gt;Success Stories&lt;/a&gt;&lt;/strong&gt; - read what people built with Jenkins to understand what problems the community is solving. Inspiration hits differently when you see real use cases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://www.jenkins.io/projects/gsoc/#gsoc-contributors" rel="noopener noreferrer"&gt;Previous GSoC Projects&lt;/a&gt;&lt;/strong&gt; - past contributors and what they built. One of those projects might need a follow-up contributor. That's how many people get their first foothold.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Okay, I Found a Project. Now What?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Read Before You Touch Anything
&lt;/h3&gt;

&lt;p&gt;Seriously. Read the README.md. Read &lt;code&gt;CONTRIBUTING.md&lt;/code&gt; if it exists. Read the open issues. Read the closed PRs from the last month.&lt;/p&gt;

&lt;p&gt;I know you want to code. But 80% of bad first contributions happen because someone didn't read what already exists. Don't be that person.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Set Up the Dev Environment
&lt;/h3&gt;

&lt;p&gt;Every project has setup instructions. Follow them exactly. If they don't work, that is your first contribution - fix the docs so the next person doesn't suffer.&lt;br&gt;
&lt;strong&gt;In my case while I setting up the Environment, I find it quite time taking to set up the Environment so raised an issue and also successfully merged my PR.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the &lt;a href="https://github.com/jenkinsci/resources-ai-chatbot-plugin" rel="noopener noreferrer"&gt;Jenkins AI Chatbot Plugin&lt;/a&gt; (project I contributed to), setup involves Docker, a Python virtual environment, and an LLM model download. The README.md walks through it. If something breaks, check the open issues, it's very likely someone else hit the same thing.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Understand the Codebase (Briefly)
&lt;/h3&gt;

&lt;p&gt;You don't need to understand everything. You just need to understand &lt;em&gt;enough to fix the thing you're fixing.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clone the repo&lt;/li&gt;
&lt;li&gt;Run the app&lt;/li&gt;
&lt;li&gt;Click around / send API requests&lt;/li&gt;
&lt;li&gt;Open the relevant file and read it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A 30-minute exploration beats a 3-hour read of every file.&lt;/p&gt;




&lt;h2&gt;
  
  
  Raising an Issue
&lt;/h2&gt;

&lt;p&gt;Found a bug? Want to suggest something? Great. But before you raise an issue:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Search first.&lt;/strong&gt; GitHub's search is right there. Type a keyword. If your issue already exists and you raise a duplicate, the maintainer will close it and you'll feel weird.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be specific.&lt;/strong&gt; "It doesn't work" is not a bug report. "When I send message X, I get error Y on line Z" is a bug report.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Include steps to reproduce.&lt;/strong&gt; If a maintainer can't reproduce your bug, they can't fix it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't claim ownership aggressively.&lt;/strong&gt; Don't comment "I'll fix this" on ten issues and then disappear.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Good issue template to follow (I personally follow this):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happened:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Expected behavior:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steps to reproduce:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Environment:&lt;/strong&gt; (OS, Python version, etc.)&lt;/p&gt;




&lt;h2&gt;
  
  
  Submitting Your First PR
&lt;/h2&gt;

&lt;p&gt;This is the moment. The commit message anxiety.&lt;/p&gt;

&lt;p&gt;Here's the practical flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Fork&lt;/strong&gt; the repo (your own copy on GitHub)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create a branch&lt;/strong&gt; with a descriptive name: &lt;code&gt;fix/session-delete-disk-cleanup&lt;/code&gt; not &lt;code&gt;my-fix&lt;/code&gt; or &lt;code&gt;branch1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make the change&lt;/strong&gt;, write a test if needed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run CI locally&lt;/strong&gt; - check if there's a &lt;code&gt;pylint&lt;/code&gt; or &lt;code&gt;pytest&lt;/code&gt; command in the docs. Run it before you push. CI failing on your PR is embarrassing (again, speaking from experience)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open the PR&lt;/strong&gt; against the &lt;code&gt;main&lt;/code&gt; branch of the original repo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write a good description&lt;/strong&gt; - what problem did you solve, how, and how can the reviewer verify it? Link the issue it closes with &lt;code&gt;Closes #&amp;lt;issue-number&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sample PR description:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;br&gt;
Fixes the session delete endpoint not cleaning up disk-persisted files.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problem&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;delete_session()&lt;/code&gt; removed the in-memory session but left &lt;code&gt;.json&lt;/code&gt; files in &lt;code&gt;/data/sessions/&lt;/code&gt;, causing storage buildup over time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;&lt;br&gt;
Added &lt;code&gt;os.remove()&lt;/code&gt; call after in-memory cleanup. Wrapped in try/except to handle already-deleted files gracefully.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Testing&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ran &lt;code&gt;pytest tests/test_session.py&lt;/code&gt; - all pass&lt;/li&gt;
&lt;li&gt;Manually verified file deletion via &lt;code&gt;ls data/sessions/&lt;/code&gt; before and after&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Code of Conduct (Please Don't Skip This)
&lt;/h2&gt;

&lt;p&gt;Jenkins has a &lt;a href="https://www.jenkins.io/project/conduct/" rel="noopener noreferrer"&gt;Code of Conduct&lt;/a&gt; and it's taken seriously. The short version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Be respectful. Everyone here is volunteering their time.&lt;/li&gt;
&lt;li&gt;Keep technical criticism constructive. "This code is bad" helps no one. "This could be simplified by doing X" helps everyone.&lt;/li&gt;
&lt;li&gt;No harassment, no personal attacks, no publishing private info.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Violations can result in warnings, temporary bans, or permanent removal. The board handles this privately and quickly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where to Talk to People
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://community.jenkins.io/c/contributing/gsoc/6" rel="noopener noreferrer"&gt;Jenkins Discourse&lt;/a&gt;&lt;/strong&gt; - for longer discussions, GSoC questions, project proposals. Think of it like a forum.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://app.gitter.im/#/room/#jenkinsci_gsoc-sig:gitter.im" rel="noopener noreferrer"&gt;Jenkins Gitter&lt;/a&gt;&lt;/strong&gt; - for quick questions. The GSoC channel is active during application season.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Issues / PR comments&lt;/strong&gt; - for project-specific technical discussion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pro tip: When you join Gitter, actually say hi and ask a relevant question. Lurking for weeks and then suddenly saying "please review my PR" is not a great introduction.&lt;/p&gt;




&lt;h2&gt;
  
  
  Spotlight: The AI Chatbot Plugin (This is the project I worked on)
&lt;/h2&gt;

&lt;p&gt;If you're looking for a project to start with, I'm biased - but for good reason.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/jenkinsci/resources-ai-chatbot-plugin" rel="noopener noreferrer"&gt;resources-ai-chatbot-plugin&lt;/a&gt;&lt;/strong&gt; is mostly &lt;strong&gt;Python&lt;/strong&gt; + &lt;strong&gt;React&lt;/strong&gt; - the AI brain, the API, the retrieval system, all Python. There's one 8-line &lt;strong&gt;Java&lt;/strong&gt; file that registers it as a Jenkins plugin, but you'll never need to touch it as a contributor. Just:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A FastAPI backend&lt;/li&gt;
&lt;li&gt;A RAG (Retrieval-Augmented Generation) AI pipeline&lt;/li&gt;
&lt;li&gt;A React frontend with WebSocket streaming&lt;/li&gt;
&lt;li&gt;FAISS vector store + BM25 keyword search&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's a &lt;strong&gt;GSoC 2025 project being continued in 2026&lt;/strong&gt;, so the codebase is active, the issues are real, and the mentors are responsive.&lt;/p&gt;

&lt;p&gt;Open issues right now include UI improvements, session management fixes, test coverage, and AI pipeline enhancements. The &lt;code&gt;good-first-issue&lt;/code&gt; label points you to the easiest entry points.&lt;/p&gt;




&lt;h2&gt;
  
  
  You're Not Too Late, You're Just Starting
&lt;/h2&gt;

&lt;p&gt;The Jenkins community has been running for 15+ years. Hundreds of contributors have passed through, added something, and moved on. Some became maintainers. Some got GSoC seats. Some just fixed one bug and left.&lt;/p&gt;

&lt;p&gt;All of it counts.&lt;/p&gt;

&lt;p&gt;Your first issue doesn't have to be brilliant. Your first PR doesn't have to be perfect. It just has to be genuine.&lt;/p&gt;

&lt;p&gt;Start small. Read carefully. Ask questions. Be patient with review cycles.&lt;/p&gt;

&lt;p&gt;See you in the PRs.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Useful Links&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.jenkins.io/" rel="noopener noreferrer"&gt;Jenkins.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jenkinsci" rel="noopener noreferrer"&gt;All Jenkins Projects on GitHub (jenkinsci org)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jenkins.io/projects/gsoc/2026/project-ideas/" rel="noopener noreferrer"&gt;GSoC 2026 Project Ideas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/search?q=org%3Ajenkinsci+label%3A%22good+first+issue%22+state%3Aopen&amp;amp;type=issues" rel="noopener noreferrer"&gt;Good First Issues&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jenkins.io/project/conduct/" rel="noopener noreferrer"&gt;Jenkins Code of Conduct&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://community.jenkins.io/c/contributing/gsoc/6" rel="noopener noreferrer"&gt;Jenkins Discourse (GSoC section)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://app.gitter.im/#/room/#jenkinsci_gsoc-sig:gitter.im" rel="noopener noreferrer"&gt;Jenkins GSoC Gitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.jenkins.io/projects/gsoc/#gsoc-contributors" rel="noopener noreferrer"&gt;Past GSoC Contributors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stories.jenkins.io/" rel="noopener noreferrer"&gt;Jenkins Success Stories&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/jenkinsci/resources-ai-chatbot-plugin" rel="noopener noreferrer"&gt;AI Chatbot Plugin Repo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;- Manisharma Sugurthi [ &lt;a href="https://github.com/sharma-sugurthi" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; | &lt;a href="https://www.linkedin.com/in/manisharma-sugurthi-222739213" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; ]&lt;/em&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>jenkins</category>
      <category>beginners</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
