├── .husky ├── .gitignore └── pre-commit ├── .tool-versions ├── static ├── jenkins.png ├── opengraph.png ├── avatar │ ├── alex-earl.jpg │ ├── darin-pope.jpg │ ├── kris-stern.png │ ├── mark-waite.png │ ├── tim-jacomb.jpg │ ├── alyssa-tong.jpeg │ ├── herve-le-meur.png │ ├── james-nord.jpeg │ ├── jan-faracik.jpg │ ├── jay-francis.jpeg │ ├── jesse-glick.jpeg │ ├── markus-winter.JPG │ ├── meg-mcroberts.jpg │ ├── olivier-lamy.jpeg │ ├── rajiv-singh.png │ ├── shivay-lamba.png │ ├── ulli-hafner.png │ ├── vandit-singh.png │ ├── bruno-verachten.png │ ├── daniel-kramer.jpeg │ ├── devin-nusbaum.jpeg │ ├── kevin-martens.jpeg │ ├── sacha-labourey.jpg │ ├── stefan-spieker.png │ ├── valentin-delaye.png │ ├── vincent-latombe.jpg │ ├── alexander-brandes.jpeg │ ├── allan-burdajewicz.png │ ├── harsh-pratap-singh.jpg │ ├── ilan-rabinovitch.jpg │ ├── kohsuke-kawaguchi.png │ ├── yaroslav-afenkin.jpg │ └── adrien-lecharpentier.jpg └── marek-szturc-2s3fI3M1lO0-unsplash.jpg ├── src ├── images │ └── jenkins.png ├── styles │ └── contributor-details.css ├── utils │ └── typography.js ├── pages │ ├── 404.js │ └── contributors │ │ ├── rajiv-singh.adoc │ │ ├── harsh-pratap-singh.adoc │ │ ├── alex-earl.adoc │ │ ├── valentin-delaye.adoc │ │ ├── jay-francis.adoc │ │ ├── olivier-lamy.adoc │ │ ├── markus-winter.adoc │ │ ├── darin-pope.adoc │ │ ├── vandit-singh.adoc │ │ ├── alyssa-tong.adoc │ │ ├── ulli-hafner.adoc │ │ ├── tim-jacomb.adoc │ │ ├── jan-faracik.adoc │ │ ├── kris-stern.adoc │ │ ├── kevin-martens.adoc │ │ ├── stefan-spieker.adoc │ │ ├── mark-waite.adoc │ │ ├── daniel-krämer.adoc │ │ ├── alexander-brandes.adoc │ │ ├── meg-mcroberts.adoc │ │ ├── allan-burdajewicz.adoc │ │ ├── herve-le-meur.adoc │ │ ├── adrien-lecharpentier.adoc │ │ ├── shivay-lamba.adoc │ │ ├── yaroslav-afenkin.adoc │ │ ├── devin-nusbaum.adoc │ │ ├── bruno-verachten.adoc │ │ ├── jesse-glick.adoc │ │ ├── vincent-latombe.adoc │ │ └── james-nord.adoc └── templates │ └── contributor-details.jsx ├── .github ├── CODEOWNERS └── renovate.json ├── Jenkinsfile_updatecli ├── .gitignore ├── .prettierrc ├── updatecli ├── values.yaml └── updatecli.d │ └── nodejs.yaml ├── styles └── index.css ├── LICENSE ├── README.adoc ├── eslint.config.mjs ├── gatsby-ssr.jsx ├── gatsby-config.js ├── package.json ├── gatsby-node.js └── Jenkinsfile /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.tool-versions: -------------------------------------------------------------------------------- 1 | nodejs 20.17.0 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | npx lint-staged 2 | -------------------------------------------------------------------------------- /static/jenkins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/jenkins.png -------------------------------------------------------------------------------- /static/opengraph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/opengraph.png -------------------------------------------------------------------------------- /src/images/jenkins.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/src/images/jenkins.png -------------------------------------------------------------------------------- /static/avatar/alex-earl.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/alex-earl.jpg -------------------------------------------------------------------------------- /static/avatar/darin-pope.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/darin-pope.jpg -------------------------------------------------------------------------------- /static/avatar/kris-stern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/kris-stern.png -------------------------------------------------------------------------------- /static/avatar/mark-waite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/mark-waite.png -------------------------------------------------------------------------------- /static/avatar/tim-jacomb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/tim-jacomb.jpg -------------------------------------------------------------------------------- /static/avatar/alyssa-tong.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/alyssa-tong.jpeg -------------------------------------------------------------------------------- /static/avatar/herve-le-meur.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/herve-le-meur.png -------------------------------------------------------------------------------- /static/avatar/james-nord.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/james-nord.jpeg -------------------------------------------------------------------------------- /static/avatar/jan-faracik.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/jan-faracik.jpg -------------------------------------------------------------------------------- /static/avatar/jay-francis.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/jay-francis.jpeg -------------------------------------------------------------------------------- /static/avatar/jesse-glick.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/jesse-glick.jpeg -------------------------------------------------------------------------------- /static/avatar/markus-winter.JPG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/markus-winter.JPG -------------------------------------------------------------------------------- /static/avatar/meg-mcroberts.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/meg-mcroberts.jpg -------------------------------------------------------------------------------- /static/avatar/olivier-lamy.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/olivier-lamy.jpeg -------------------------------------------------------------------------------- /static/avatar/rajiv-singh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/rajiv-singh.png -------------------------------------------------------------------------------- /static/avatar/shivay-lamba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/shivay-lamba.png -------------------------------------------------------------------------------- /static/avatar/ulli-hafner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/ulli-hafner.png -------------------------------------------------------------------------------- /static/avatar/vandit-singh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/vandit-singh.png -------------------------------------------------------------------------------- /static/avatar/bruno-verachten.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/bruno-verachten.png -------------------------------------------------------------------------------- /static/avatar/daniel-kramer.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/daniel-kramer.jpeg -------------------------------------------------------------------------------- /static/avatar/devin-nusbaum.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/devin-nusbaum.jpeg -------------------------------------------------------------------------------- /static/avatar/kevin-martens.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/kevin-martens.jpeg -------------------------------------------------------------------------------- /static/avatar/sacha-labourey.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/sacha-labourey.jpg -------------------------------------------------------------------------------- /static/avatar/stefan-spieker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/stefan-spieker.png -------------------------------------------------------------------------------- /static/avatar/valentin-delaye.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/valentin-delaye.png -------------------------------------------------------------------------------- /static/avatar/vincent-latombe.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/vincent-latombe.jpg -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Order is important. The last matching pattern has the most precedence. 2 | 3 | * @jenkins-infra/contributor-spotlight 4 | -------------------------------------------------------------------------------- /static/avatar/alexander-brandes.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/alexander-brandes.jpeg -------------------------------------------------------------------------------- /static/avatar/allan-burdajewicz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/allan-burdajewicz.png -------------------------------------------------------------------------------- /static/avatar/harsh-pratap-singh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/harsh-pratap-singh.jpg -------------------------------------------------------------------------------- /static/avatar/ilan-rabinovitch.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/ilan-rabinovitch.jpg -------------------------------------------------------------------------------- /static/avatar/kohsuke-kawaguchi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/kohsuke-kawaguchi.png -------------------------------------------------------------------------------- /static/avatar/yaroslav-afenkin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/yaroslav-afenkin.jpg -------------------------------------------------------------------------------- /static/avatar/adrien-lecharpentier.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/avatar/adrien-lecharpentier.jpg -------------------------------------------------------------------------------- /Jenkinsfile_updatecli: -------------------------------------------------------------------------------- 1 | updatecli(action: 'diff') 2 | if (env.BRANCH_IS_PRIMARY) { 3 | updatecli(action: 'apply', cronTriggerExpression: '@weekly') 4 | } 5 | -------------------------------------------------------------------------------- /static/marek-szturc-2s3fI3M1lO0-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jenkins-infra/contributor-spotlight/main/static/marek-szturc-2s3fI3M1lO0-unsplash.jpg -------------------------------------------------------------------------------- /.github/renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": ["config:recommended"], 4 | "ignoreDeps": ["node"] 5 | } 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .cache/ 3 | public 4 | .idea/ 5 | .vscode/ 6 | .env.development 7 | .env.production 8 | .DS_Store 9 | src/.DS_Store 10 | .eslintcache 11 | .nvmrc 12 | -------------------------------------------------------------------------------- /src/styles/contributor-details.css: -------------------------------------------------------------------------------- 1 | h2 { 2 | color: #0096ff; 3 | } 4 | 5 | @media screen and (prefers-color-scheme: dark) { 6 | a, 7 | #contributor-grid a:visited { 8 | color: #0096ff; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "tabWidth": 4, 4 | "semi": true, 5 | "singleQuote": true, 6 | "bracketSpacing": true, 7 | "bracketSameLine": false, 8 | "endOfLine": "auto", 9 | "jsxSingleQuote": true 10 | } 11 | -------------------------------------------------------------------------------- /updatecli/values.yaml: -------------------------------------------------------------------------------- 1 | github: 2 | user: 'Jenkins Infra Bot (updatecli)' 3 | email: '60776566+jenkins-infra-bot@users.noreply.github.com' 4 | username: 'jenkins-infra-bot' 5 | token: 'UPDATECLI_GITHUB_TOKEN' 6 | branch: 'main' 7 | owner: 'jenkins-infra' 8 | repository: 'contributor-spotlight' 9 | -------------------------------------------------------------------------------- /styles/index.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | box-sizing: border-box; 5 | } 6 | html, 7 | body { 8 | font-family: 9 | -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Roboto Light', 10 | 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 11 | 'Helvetica Neue', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 12 | 'Segoe UI Symbol'; 13 | font-size: 16px; 14 | } 15 | 16 | @media screen and (prefers-color-scheme: dark) { 17 | #contributor-grid * { 18 | color: #fff; 19 | } 20 | 21 | body { 22 | background-color: #333; 23 | color: #fff; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Jenkins Infra 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.adoc: -------------------------------------------------------------------------------- 1 | = Jenkins Contributor Spotlight 2 | 3 | This feature is to showcase the top contributors of the Jenkins project at link:https://contributors.jenkins.io[contributors.jenkins.io] 4 | 5 | == 🚀 Quick start 6 | 7 | Requires NodeJS (version defined in ./.tool-versions) 8 | 9 | 0. **Install dependencies** 10 | 11 | Run the following commands in your terminal: 12 | + 13 | [source,bash] 14 | ---- 15 | cd contributor-spotlight/ 16 | npm install 17 | ---- 18 | 19 | 1. **Run development environment** 20 | 21 | Run the following commands in your terminal: 22 | + 23 | [source,bash] 24 | ---- 25 | npm run clean && npm run develop 26 | ---- 27 | 28 | 2. **To run the code** 29 | 30 | Once the code is running, the site should be up at http://localhost:8000. 31 | 32 | 3. **To run prettier** 33 | 34 | Run the following commands in your terminal: 35 | + 36 | [source,bash] 37 | ---- 38 | npm run format 39 | ---- 40 | 41 | 4. **To run eslint** 42 | 43 | Run the following commands in your terminal: 44 | + 45 | [source,bash] 46 | ---- 47 | npm run lint 48 | ---- 49 | 50 | Remember to run prettier and eslint before submitting a PR. 51 | -------------------------------------------------------------------------------- /src/utils/typography.js: -------------------------------------------------------------------------------- 1 | import Typography from 'typography'; 2 | import { 3 | MOBILE_MEDIA_QUERY, 4 | TABLET_MEDIA_QUERY, 5 | } from 'typography-breakpoint-constants'; 6 | 7 | const options = { 8 | baseFontSize: `18px`, 9 | baseLineHeight: 1.45, 10 | blockMarginBottom: 0.75, 11 | scaleRatio: 2.15, 12 | overrideStyles: ({ rhythm, scale }, options) => { 13 | return { 14 | 'h1,h2,h3,h4': { 15 | lineHeight: 1.2, 16 | }, 17 | [TABLET_MEDIA_QUERY]: { 18 | // Make baseFontSize on mobile 17px. 19 | html: { 20 | fontSize: `${(17 / 16) * 100}%`, 21 | }, 22 | }, 23 | [MOBILE_MEDIA_QUERY]: { 24 | // Make baseFontSize on mobile 16px. 25 | html: { 26 | fontSize: `${(16 / 16) * 100}%`, 27 | }, 28 | }, 29 | }; 30 | }, 31 | }; 32 | 33 | const typography = new Typography(options); 34 | 35 | // Hot reload typography in development. 36 | if (process.env.NODE_ENV !== `production`) { 37 | typography.injectStyles(); 38 | } 39 | 40 | export default typography; 41 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import react from 'eslint-plugin-react'; 2 | import globals from 'globals'; 3 | import js from '@eslint/js'; 4 | import jsdoc from 'eslint-plugin-jsdoc'; 5 | import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; 6 | 7 | export default [ 8 | js.configs.recommended, 9 | eslintPluginPrettierRecommended, 10 | { 11 | files: ['**/*.js'], 12 | 13 | plugins: { 14 | react, 15 | jsdoc, 16 | }, 17 | 18 | languageOptions: { 19 | globals: { 20 | ...globals.browser, 21 | ...globals.node, 22 | }, 23 | 24 | ecmaVersion: 'latest', 25 | sourceType: 'module', 26 | 27 | parserOptions: { 28 | ecmaFeatures: { 29 | jsx: true, 30 | modules: true, 31 | experimentalObjectRestSpread: true, 32 | }, 33 | }, 34 | }, 35 | 36 | rules: { 37 | 'react/jsx-curly-brace-presence': [ 38 | 'error', 39 | { 40 | props: 'never', 41 | children: 'never', 42 | }, 43 | ], 44 | 45 | 'react/jsx-key': 'error', 46 | 'no-unused-vars': 'off', 47 | 'jsdoc/require-description': 'off', 48 | }, 49 | }, 50 | ]; 51 | -------------------------------------------------------------------------------- /src/pages/404.js: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import { Link } from 'gatsby'; 3 | 4 | const pageStyles = { 5 | color: '#232129', 6 | padding: '96px', 7 | fontFamily: '-apple-system, Roboto, sans-serif, serif', 8 | }; 9 | const headingStyles = { 10 | marginTop: 0, 11 | marginBottom: 64, 12 | maxWidth: 320, 13 | }; 14 | 15 | const paragraphStyles = { 16 | marginBottom: 48, 17 | }; 18 | const codeStyles = { 19 | color: '#8A6534', 20 | padding: 4, 21 | backgroundColor: '#FFF4DB', 22 | fontSize: '1.25rem', 23 | borderRadius: 4, 24 | }; 25 | 26 | const NotFoundPage = () => { 27 | return ( 28 |
29 |

Page not found

30 |

31 | Sorry, we could not find what you were looking for. 32 |
33 | {process.env.NODE_ENV === 'development' ? ( 34 | <> 35 |
36 | Try creating a page in{' '} 37 | src/pages/. 38 |
39 | 40 | ) : null} 41 |
42 | Go home. 43 |

44 |
45 | ); 46 | }; 47 | 48 | export default NotFoundPage; 49 | 50 | export const Head = () => Not found; 51 | -------------------------------------------------------------------------------- /gatsby-ssr.jsx: -------------------------------------------------------------------------------- 1 | // Import React so that you can use JSX in HeadComponents 2 | const React = require('react'); 3 | 4 | const HtmlAttributes = { 5 | lang: 'en', 6 | }; 7 | 8 | const HeadComponents = [ 9 | 10 | 14 | 15 | 16 | 21 | 26 | 27 | , 28 | ]; 29 | 30 | const BodyAttributes = {}; 31 | 32 | const PostBodyComponents = [ 33 | 34 | 38 | 39 | , 40 | ]; 41 | 42 | exports.onRenderBody = ( 43 | { 44 | setHeadComponents, 45 | setHtmlAttributes, 46 | setBodyAttributes, 47 | setPostBodyComponents, 48 | }, 49 | pluginOptions 50 | ) => { 51 | setHtmlAttributes(HtmlAttributes); 52 | setHeadComponents(HeadComponents); 53 | setBodyAttributes(BodyAttributes); 54 | setPostBodyComponents(PostBodyComponents); 55 | }; 56 | -------------------------------------------------------------------------------- /gatsby-config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @type {import('gatsby').GatsbyConfig} 3 | */ 4 | module.exports = { 5 | siteMetadata: { 6 | title: `Jenkins Contributor Spotlight`, 7 | siteUrl: `https://contributors.jenkins.io`, 8 | description: `Jenkins Contributor Spotlight is where we celebrate the contributions of Jenkins community members`, 9 | }, 10 | plugins: [ 11 | 'gatsby-plugin-image', 12 | 'gatsby-plugin-sitemap', 13 | 'gatsby-plugin-sharp', 14 | 'gatsby-transformer-sharp', 15 | 'gatsby-plugin-react-helmet', 16 | { 17 | resolve: `gatsby-source-filesystem`, 18 | options: { 19 | name: `pages`, 20 | path: `${__dirname}/src`, 21 | }, 22 | }, 23 | { 24 | resolve: 'gatsby-plugin-manifest', 25 | options: { 26 | name: `Jenkins Contributor Spotlight`, 27 | short_name: `Contributor Spotlight`, 28 | start_url: `/`, 29 | display: `standalone`, 30 | icon: `${__dirname}/src/images/jenkins.png`, 31 | }, 32 | }, 33 | `gatsby-transformer-asciidoc`, 34 | { 35 | resolve: `gatsby-plugin-typography`, 36 | options: { 37 | pathToConfigModule: `${__dirname}/src/utils/typography`, 38 | }, 39 | }, 40 | { 41 | resolve: `gatsby-transformer-asciidoc`, 42 | options: { 43 | attributes: { 44 | imagesdir: `${__dirname}/static@`, 45 | }, 46 | }, 47 | }, 48 | { 49 | resolve: `gatsby-omni-font-loader`, 50 | options: { 51 | enableListener: true, 52 | preconnect: [ 53 | `https://fonts.googleapis.com`, 54 | `https://fonts.gstatic.com`, 55 | ], 56 | }, 57 | }, 58 | ], 59 | }; 60 | -------------------------------------------------------------------------------- /updatecli/updatecli.d/nodejs.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bump `nodejs` version according to packer-images 3 | 4 | scms: 5 | default: 6 | kind: github 7 | spec: 8 | user: '{{ .github.user }}' 9 | email: '{{ .github.email }}' 10 | owner: '{{ .github.owner }}' 11 | repository: '{{ .github.repository }}' 12 | token: '{{ requiredEnv .github.token }}' 13 | username: '{{ .github.username }}' 14 | branch: '{{ .github.branch }}' 15 | 16 | sources: 17 | ciJenkinsIoPackerImageVersion: 18 | kind: yaml 19 | name: Get the packer-image version deployed on ci.jenkins.io agents 20 | spec: 21 | file: https://raw.githubusercontent.com/jenkins-infra/jenkins-infra/production/hieradata/common.yaml 22 | key: $.profile::jenkinscontroller::jcasc.agent_images.azure_vms_gallery_image.version 23 | packerImageNodeVersion: 24 | kind: yaml 25 | name: Get the `nodejs_linux_version` set in the deployed packer-image 26 | dependson: 27 | - ciJenkinsIoPackerImageVersion 28 | spec: 29 | file: https://raw.githubusercontent.com/jenkins-infra/packer-images/{{ source "ciJenkinsIoPackerImageVersion" }}/provisioning/tools-versions.yml 30 | key: $.nodejs_linux_version 31 | 32 | targets: 33 | updateToolVersions: 34 | name: bump `nodejs` version to {{ source "packerImageNodeVersion" }} in .tool-versions 35 | sourceid: packerImageNodeVersion 36 | kind: file 37 | spec: 38 | file: .tool-versions 39 | matchpattern: > 40 | nodejs (.*) 41 | replacepattern: > 42 | nodejs {{ source "packerImageNodeVersion" }} 43 | scmid: default 44 | 45 | actions: 46 | default: 47 | kind: github/pullrequest 48 | title: Bump `nodejs` version to {{ source "packerImageNodeVersion" }} 49 | scmid: default 50 | spec: 51 | labels: 52 | - dependencies 53 | - nodejs 54 | -------------------------------------------------------------------------------- /src/pages/contributors/rajiv-singh.adoc: -------------------------------------------------------------------------------- 1 | = Rajiv Singh 2 | :page-name: Rajiv Singh 3 | :page-linkedin: iamrajivranjansingh 4 | :page-twitter: therajiv 5 | :page-github: iamrajiv 6 | :page-email: 7 | :page-image: avatar/rajiv-singh.png 8 | :page-pronouns: He/Him/His 9 | :page-location: Bengaluru, India 10 | :page-firstcommit: 2023 11 | :page-datepublished: 2024-07-02 12 | :page-featured: false 13 | :page-intro: Rajiv works as a software engineer at A.P. Moller - Maersk based in India. In 2022 he graduated from JSS Academy of Technical Education with a Bachelor in Information Science and Engineering. Fascinated by the extensive impact computers have on solving real world problems, he writes software for a living and has primarily worked on backend systems and infrastructure. His focus is on the fields of algorithms and distributed systems. 14 | 15 | Rajiv's hobbies include cycling, gardening, reading, photography, traveling, and more. 16 | 17 | == What is your background prior to contributing to Jenkins? 18 | 19 | I am an open source enthusiast and have made many contributions to various projects and open source programs like Google Season of Docs, LFX Mentorship, and Google Summer of Code. 20 | 21 | Additionally, I have mentored new contributors who are passionate about open source and want to make contributions to it. This led me to become involved with the Jenkins project by mentoring in the Google Summer of Code program with Jenkins. 22 | 23 | == How long have you been using Jenkins? 24 | 25 | I did not use Jenkins much, but I did use it in one of my personal projects during my college days. Later, I used Jenkins in production in my corporate job, but not heavily. Therefore, I consider myself still pretty new to Jenkins. 26 | 27 | == Why choose Jenkins over other projects? 28 | 29 | I wanted to contribute to open source as much as I could, both as a contributor and a mentor. I came across the Jenkins community and liked the work they were doing, it was quite fascinating to me. Additionally, I found the Jenkins community to be very welcoming and approachable. 30 | 31 | == What problems has Jenkins solved for you? 32 | 33 | Mostly, I have used Jenkins to automate tasks such as the testing of builds. 34 | 35 | == Is there an aspect of Jenkins that you're particularly passionate about? 36 | 37 | While I appreciate many aspects of Jenkins, one aspect that particularly resonates with me is the welcoming and approachable nature of the Jenkins community. 38 | 39 | == What sort of contributions have felt the most successful or impactful? 40 | 41 | In my experience, serving as a mentor in Google Summer of Code has been the most fulfilling and impactful aspect of my contributions. 42 | 43 | == Advice for new developers and new members of the open-source community 44 | 45 | Always keep learning and stay curious to know more. 46 | -------------------------------------------------------------------------------- /src/pages/contributors/harsh-pratap-singh.adoc: -------------------------------------------------------------------------------- 1 | = Harsh Pratap Singh 2 | :page-name: Harsh Pratap Singh 3 | :page-linkedin: harsh-pratap-singh-787485255 4 | :page-twitter: harsh_ps2003 5 | :page-github: harsh-ps-2003 6 | :page-email: 7 | :page-image: avatar/harsh-pratap-singh.jpg 8 | :page-pronouns: He/Him/His 9 | :page-location: India 10 | :page-firstcommit: 2023 11 | :page-datepublished: 2024-06-19 12 | :page-featured: false 13 | :page-intro: Harsh Pratap Singh is a newer contributor to Jenkins and has participated in the Jenkins Google Summer of Code project since 2023. He has a whole universe inside of him, made of beautiful stories with ugly depths and a full heart, a world entitled to his love. Even though he is into mathematics, he is less calculative at heart. He is inspired by death, which gives him the courage to live intensely. His motto is "Eat well, work hard, help people, and sleep plenty." Every moment of self-realization is close to his heart, and every smile he has brought to people is near his soul. He has yet to have a more expansive journey since he is only 19, but something he learned was not to take his thoughts too seriously. 14 | 15 | == What is your background prior to contributing to Jenkins? 16 | 17 | I am just a teenager who loves Computer Science, Physics, Mathematics, Philosophy, and Psychology with a sprinkle of talking with random books. 18 | I enjoy helping people, and thus became a problem solver. 19 | 20 | == How long have you been using Jenkins? 21 | 22 | I have been using Jenkins for about a year, since early 2023. 23 | 24 | == Why choose Jenkins over other projects? 25 | 26 | It was not Jenkins vs other open-source communities for me. 27 | It was just who needed help and how can I help. 28 | The community was very welcoming and warm to newbies like me and gave me confidence that I could do a lot of things I never thought I would be able to accomplish. 29 | I love exploring open-source organizations! 30 | 31 | == What problems has Jenkins solved for you? 32 | 33 | Among other things, I use Jenkins for automation of test builds. 34 | 35 | == Is there an aspect of Jenkins that you're particularly passionate about? 36 | 37 | Learning about the Jenkins infrastructure! 38 | 39 | == What sort of contributions have felt the most successful or impactful? 40 | 41 | For me, my Google Summer of Code work to link:https://www.jenkins.io/blog/2023/08/24/gitlab-plugin-modernization-report/[modernize the GitLab plugin] and its further maintenance has been fruitful. 42 | 43 | == Advice for new developers and new members of the open-source community 44 | 45 | First of all, you are welcome and we need you! 46 | You can contribute not just by submitting code, but with ideas, discussions, reporting issues, and improving documentation. 47 | Don't shy away from asking for help, nobody is a know-it-all here! 48 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jenkins-contributor-spotlight", 3 | "version": "1.0.0", 4 | "private": true, 5 | "description": "jenkins-contributor-spotlight", 6 | "author": "Jenkins Community", 7 | "keywords": [ 8 | "gatsby" 9 | ], 10 | "scripts": { 11 | "develop": "gatsby develop", 12 | "start": "gatsby develop", 13 | "build": "gatsby build", 14 | "serve": "gatsby serve", 15 | "info": "gatsby info", 16 | "clean": "gatsby clean", 17 | "prepare": "husky", 18 | "lint": "ESLINT_USE_FLAT_CONFIG=true npx eslint --fix src/", 19 | "format": "npx prettier . --write" 20 | }, 21 | "dependencies": { 22 | "@emotion/react": "^11.11.1", 23 | "@emotion/styled": "^11.11.0", 24 | "@eslint/eslintrc": "^3.2.0", 25 | "@eslint/js": "^9.17.0", 26 | "@mui/icons-material": "^7.0.0", 27 | "@mui/material": "^7.0.0", 28 | "asciidoctor.js": "^1.5.9", 29 | "axios": "^1.7.2", 30 | "dayjs": "^1.11.10", 31 | "gatsby": "^5.14.1", 32 | "gatsby-core-utils": "^4.14.0", 33 | "gatsby-omni-font-loader": "^2.0.2", 34 | "gatsby-plugin-image": "^3.14.0", 35 | "gatsby-plugin-manifest": "^5.14.0", 36 | "gatsby-plugin-offline": "^6.14.0", 37 | "gatsby-plugin-react-helmet": "^6.14.0", 38 | "gatsby-plugin-sharp": "^5.14.0", 39 | "gatsby-plugin-sitemap": "^6.14.0", 40 | "gatsby-plugin-typography": "^5.14.0", 41 | "gatsby-source-filesystem": "^5.14.0", 42 | "gatsby-transformer-asciidoc": "^4.13.1", 43 | "gatsby-transformer-sharp": "^5.13.1", 44 | "globals": "^16.0.0", 45 | "loader-utils": "^3.2.1", 46 | "lodash": "^4.17.21", 47 | "papaparse": "^5.4.1", 48 | "react": "^18.2.0", 49 | "react-dom": "^18.2.0", 50 | "react-helmet": "^6.1.0", 51 | "react-typography": "^0.16.23", 52 | "slash": "^5.1.0", 53 | "typography": "^0.16.24", 54 | "typography-breakpoint-constants": "^0.16.19" 55 | }, 56 | "license": "MIT", 57 | "devDependencies": { 58 | "eslint": "^8.57.1", 59 | "eslint-config-google": "^0.14.0", 60 | "eslint-config-prettier": "^10.0.0", 61 | "eslint-plugin-jsdoc": "^60.0.0", 62 | "eslint-plugin-prettier": "^5.2.1", 63 | "eslint-plugin-react": "^7.37.2", 64 | "husky": "^9.1.7", 65 | "lint-staged": "^16.0.0", 66 | "prettier": "^3.4.2" 67 | }, 68 | "lint-staged": { 69 | "*.js": "eslint --cache --fix", 70 | "*.{js,css,md}": "prettier --write" 71 | }, 72 | "overrides": { 73 | "webpack-dev-middleware": "^7.4.2", 74 | "cookie": "^1.0.2", 75 | "path-to-regexp": "~0.1.7", 76 | "gatsby-plugin-offline": { 77 | "workbox-build": "^7.3.0" 78 | } 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /src/pages/contributors/alex-earl.adoc: -------------------------------------------------------------------------------- 1 | = Alex Earl 2 | :page-name: Alex Earl 3 | :page-linkedin: 4 | :page-twitter: 5 | :page-github: slide 6 | :page-threads: slide_o_mix 7 | :page-email: 8 | :page-image: avatar/alex-earl.jpg 9 | :page-pronouns: He/Him/His 10 | :page-location: Chandler, Arizona USA 11 | :page-firstcommit: 2008 12 | :page-datepublished: 2023-12-13 13 | :page-featured: false 14 | :page-intro: Alex Earl is a software engineer from Chandler, Arizona. He has been using and contributing to Jenkins for the last 15 years, during which he has provided numerous enhancements and changes. 15 | 16 | When not pursuing his open-source work, Alex loves spending time with his family, working on tech puzzles, and helping others in any way that he can. 17 | 18 | == What is your background prior to contributing to Jenkins? 19 | 20 | I was doing C++ and Visual Basic at work, along with a little bit of embedded C development. 21 | I transitioned to C# from C++/VB in the application I was supporting, and started to pick up more responsibility in the build and deployment area of my group. 22 | I started using Jenkins to do the build/deployment and moved my group in a much more agile direction, using continuous integration for our testing. 23 | This led to me looking at the link:https://plugins.jenkins.io/email-ext/[Email Extension] plugin and trying to understand why it wasn't able to do what I wanted it to do. 24 | I started submitting patches and fixing issues in the plugin to help me in my work. 25 | The rest, as they say, is history! 26 | 27 | == How long have you been using Jenkins? 28 | 29 | I have been using Jenkins for the last 15 years. 30 | 31 | == Why choose Jenkins over other projects? 32 | 33 | Jenkins was, and still is, the best at what it does. 34 | 35 | == What problems has Jenkins solved for you? 36 | 37 | Jenkins has helped solve lots of problems! 38 | I had to build and deploy around 50 embedded firmware binaries, several desktop applications, and more. 39 | Jenkins has helped me streamline this and make solutions that are easy to use, easy to maintain, and powerful! 40 | 41 | == Is there an aspect of Jenkins that you're particularly passionate about? 42 | 43 | I like to help people resolve issues on the Community channels (link:https://community.jenkins.io/[community.jenkins.io] and link:https://app.gitter.im/#/room/#jenkinsci_jenkins:gitter.im[Matrix]). 44 | Due to the global reach of Jenkins and the Community channels, we are able to communicate easily and help each other. 45 | Interacting with people all over the world, learning from them, and helping them solve issues is part of the magical open-source experience. 46 | 47 | == What sort of contributions have felt the most successful or impactful? 48 | 49 | I have previously maintained and currently maintain plugins that are used by _many_ people. 50 | It feels good to make an impact by working on something that so many people use. 51 | 52 | == Advice for new developers and new members of the open-source community 53 | 54 | Just find something that you like (or I guess don't like and want to improve) and go for it. 55 | There are plenty of issues in Jira and GitHub that need someone to look at them! 56 | -------------------------------------------------------------------------------- /gatsby-node.js: -------------------------------------------------------------------------------- 1 | const _ = require(`lodash`); 2 | const path = require(`path`); 3 | const { slash } = require(`gatsby-core-utils`); 4 | const { createFilePath } = require(`gatsby-source-filesystem`); 5 | 6 | // Implement the Gatsby API “createPages”. This is 7 | // called after the Gatsby bootstrap is finished, so you have 8 | // access to any information necessary to programmatically 9 | // create pages. 10 | exports.createPages = ({ graphql, actions }) => { 11 | const { createPage } = actions; 12 | 13 | // The “graphql” function allows us to run arbitrary 14 | // queries against the local Drupal graphql schema. Think of 15 | // it like the site has a built-in database constructed 16 | // from the fetched data that you can run queries against. 17 | return graphql(` 18 | { 19 | allAsciidoc(limit: 1000) { 20 | edges { 21 | node { 22 | id 23 | html 24 | document { 25 | title 26 | main 27 | } 28 | fields { 29 | slug 30 | } 31 | pageAttributes { 32 | datepublished 33 | name 34 | pronouns 35 | location 36 | firstcommit 37 | linkedin 38 | twitter 39 | github 40 | email 41 | image 42 | featured 43 | intro 44 | } 45 | } 46 | } 47 | } 48 | } 49 | `).then((result) => { 50 | if (result.errors) { 51 | throw result.errors; 52 | } 53 | 54 | // Create Asciidoc pages. 55 | const articleTemplate = path.resolve( 56 | `./src/templates/contributor-details.jsx` 57 | ); 58 | _.each(result.data.allAsciidoc.edges, (edge) => { 59 | // Gatsby uses Redux to manage its internal state. 60 | // Plugins and sites can use functions like "createPage" 61 | // to interact with Gatsby. 62 | createPage({ 63 | // Each page is required to have a `path` as well 64 | // as a template component. The `context` is 65 | // optional but is often necessary so the template 66 | // can query data specific to each page. 67 | path: edge.node.fields.slug, 68 | component: slash(articleTemplate), 69 | context: { 70 | id: edge.node.id, 71 | }, 72 | }); 73 | }); 74 | }); 75 | }; 76 | 77 | exports.onCreateNode = async ({ node, actions, getNode, loadNodeContent }) => { 78 | const { createNodeField } = actions; 79 | 80 | if (node.internal.type === `Asciidoc`) { 81 | const value = createFilePath({ node, getNode }); 82 | createNodeField({ 83 | name: `slug`, 84 | node, 85 | value, 86 | }); 87 | } 88 | }; 89 | -------------------------------------------------------------------------------- /src/pages/contributors/valentin-delaye.adoc: -------------------------------------------------------------------------------- 1 | = Valentin Delaye 2 | :page-name: Valentin Delaye 3 | :page-linkedin: 4 | :page-twitter: 5 | :page-github: jonesbusy 6 | :page-email: 7 | :page-image: avatar/valentin-delaye.png 8 | :page-pronouns: He/Him/His 9 | :page-location: Lausanne, Switzerland 10 | :page-firstcommit: 2018 11 | :page-datepublished: 2024-02-07 12 | :page-featured: false 13 | :page-intro: Valentin is a Jenkins contributor and plugin maintainer passionate about technology and programming. This passion is so great that it has spread as his profession and hobby. He believes strongly in the power of open source and has been a Linux user since his teenage years. Valentin believes that open source is about consuming, taking advantage of, and contributing to it. 14 | 15 | == What is your background prior to contributing to Jenkins? 16 | 17 | Jenkins is the first open-source project I contributed to with a community. 18 | Before that, I had submitted some small contributions on homemade Maven plugins. 19 | 20 | Now, I'm contributing to different tools and technologies like Helm charts (link:https://github.com/bitnami/charts/tree/main/bitnami/external-dns[Bitnami external DNS]) and Ansible collections (link:https://github.com/prometheus-community/ansible[Prometheus collection]). 21 | Recently I've added some features to link:https://github.com/openrewrite/rewrite[OpenRewrite], which is also used by the Jenkins project. 22 | 23 | == How long have you been using Jenkins? 24 | 25 | I've been using Jenkins for quite a long time. 26 | I think the first time I used Jenkins was around 2009 before it was even called Jenkins. 27 | My first contribution to Jenkins occurred in 2018. 28 | 29 | == Why choose Jenkins over other projects? 30 | 31 | I gravitated towards Jenkins for its cost, flexibility, and ability to circumvent on-premises infrastructure constraints. 32 | Since Jenkins is an open-source project, it can be easily extended via plugins. 33 | 34 | == What problems has Jenkins solved for you? 35 | 36 | Jenkins has helped me with automation and employing continuous integration despite on-premises environment limitations. 37 | 38 | == Is there an aspect of Jenkins that you're particularly passionate about? 39 | 40 | The community of course! 41 | Jenkins also has a massive plugin ecosystem that provides further customization and abilities. 42 | I'm also particularly intrigued by cloud-native deployment of Jenkins, like external storage or Jenkinsfile runner. 43 | 44 | == What sort of contributions have felt the most successful or impactful? 45 | 46 | There isn't one contribution in particular, but over the last two years I've adopted about 30 previously abandoned plugins. 47 | I've refreshed them and fixed any issues, including security, and I now maintain them regularly. 48 | However, if I choose the contribution I'm the most proud of, it is the recent additions of OpenCover and NUnit parser into the link:https://plugins.jenkins.io/coverage/[Coverage] plugin. 49 | 50 | == Advice for new developers and new members of the open-source community 51 | 52 | Start with small contributions. 53 | Don't expect to be a core maintainer immediately. 54 | Start with documentation or other low-impact features. 55 | 56 | Documenting bugs and making sure they can be easily reproduced is a great way to contribute to Jenkins and other open-source projects in general. 57 | This helps a lot when regular maintainers are troubleshooting issues! 58 | -------------------------------------------------------------------------------- /src/pages/contributors/jay-francis.adoc: -------------------------------------------------------------------------------- 1 | = Jay Francis 2 | :page-name: Jay Francis 3 | :page-linkedin: jaideep-francis-76a5a51b3 4 | :page-twitter: 5 | :page-github: jayfranco999 6 | :page-email: 7 | :page-image: avatar/jay-francis.jpeg 8 | :page-pronouns: He/Him/His 9 | :page-location: Bangalore, India 10 | :page-firstcommit: 2024 11 | :page-datepublished: 2025-07-31 12 | :page-featured: false 13 | :page-intro: Jay Francis is a Site Reliability Engineer for Jenkins, based in India. Prior to contributing to the Jenkins project, Jay spent time in his early career as a chef and later transitioned to a site reliability engineer role. His experience as a chef taught him a lot about how good creativity comes hand in hand with repetition of the same or similar tasks. He's carried that mindset with him no matter what kind of work he's doing. Changing fields to being an SRE wasn't as difficult as it might sound, since he was an engineering graduate ready to jump at impulsive career paths. Cooking has given him invaluable lessons that help him every day and will always remain part of who Jay is. At the start, it was tough to accept the life of a software engineer (compared to a chef's), but he was able to embrace building solutions to improve infrastructure by augmenting his knowledge with repetitive code practice. He found that this was just as challenging and creative in a different way. 14 | 15 | == What is your background prior to contributing to Jenkins? 16 | 17 | I went to school and graduated with my engineering degree, ready to enter the tech world. 18 | However, I started my career as a chef, which provided many skills and lessons that have helped shape my outlook and methods when it comes to life and work. 19 | Before joining the Jenkins project, I made the jump from being a chef to a role as a Site Reliability Engineer at Hewlett Packard Enterprise. 20 | 21 | == How long have you been using Jenkins? 22 | 23 | I have been using Jenkins for over 18 months at this point. 24 | 25 | == What made you choose Jenkins over other projects? 26 | 27 | It's open-source and has an awesome community. 28 | It's my first experience with an open-source project where the contributors and maintainers are highly skilled and extremely selfless in providing optimal solutions and support. 29 | 30 | == What problems has Jenkins solved for you? 31 | 32 | Automating dependencies and running `updatecli` pipelines greatly impacted migration efforts positively for public controllers like link:https://ci.jenkins.io/[ci.jenkins.io]. 33 | 34 | == Is there an aspect of Jenkins that you're particularly passionate about? 35 | 36 | The pipeline graph overview somehow sparks a little joy in me every time the job is a success. 37 | 38 | == What sort of contributions have felt most successful/impactful? 39 | 40 | Using shared pipeline library scripts to reduce the GitHub API rate limit (by 50%) has been a great win for Jenkins. 41 | I've also found dependency management for private and public controllers to be quite useful in my time with the project thus far. 42 | 43 | == Advice for new developers and new members of the open-source community? 44 | 45 | Since open-source software is a buffet of many many different issues and tech stacks, I would recommend picking one and diving deep in providing an effective and sustainable solution after mature understanding of the task at hand. 46 | This is definitely going to make your contributions worthwhile and stand out to other contributors. 47 | -------------------------------------------------------------------------------- /src/pages/contributors/olivier-lamy.adoc: -------------------------------------------------------------------------------- 1 | = Olivier Lamy 2 | :page-name: Olivier Lamy 3 | :page-linkedin: 4 | :page-twitter: olamy 5 | :page-github: olamy 6 | :page-email: 7 | :page-image: avatar/olivier-lamy.jpeg 8 | :page-pronouns: 9 | :page-location: Brisbane, Queensland, Australia 10 | :page-firstcommit: 2009 11 | :page-datepublished: 2024-09-10 12 | :page-featured: false 13 | :page-intro: Olivier is a software engineer based in Brisbane, Australia. He has been involved in the open-source community for almost 20 years. He is a father of 4 and has a real passion for running, especially ultra trail. His involvement with open-source communities started with Apache, where he is now a member of the foundation, and working with projects such as Apache Maven (a project he acted on as a chair), Apache Tomcat, Apache Commons, Apache Cloudstack, and Apache incubator, which was designed to help projects entering to the foundation. He is still contributing to the Eclipse Jetty project and is now a member of the JakartaEE servlet group and JakartaEE TCK. 14 | 15 | == What is your background prior to contributing to Jenkins? 16 | 17 | Prior to contributing to Jenkins, I was in the group of people who participated in creating Maven2/3. 18 | At the time there weren't many options for CI tooling and we decided to create the Apache Continuum, which was primarily focused on a CI server to build Apache Maven projects. 19 | However, some limitations appeared and the team had some other projects to work on by the time Hudson came. 20 | 21 | == How long have you been using Jenkins? 22 | 23 | I've been using Jenkins for more than 15 years now. 24 | 25 | == Why choose Jenkins over other projects? 26 | 27 | There really isn't an open source CI server that offers what Jenkins does. 28 | 29 | == What problems has Jenkins solved for you? 30 | 31 | At the Apache Software foundation, while working on different projects with contributors in different timezones, we definitely need to have such CI solutions to help check the committed code and/or the proposed patch. 32 | So, I introduced Hudson to Apache and maintained the infrastructure. 33 | This has since been taken over by the dedicated Apache infra team, who have upgraded to a more scalable solution based on CloudBees CI rather than the open-source solution I was maintaining and regularly breaking (but this part needs to be kept secret). 34 | 35 | == Is there an aspect of Jenkins that you're particularly passionate about? 36 | 37 | There's not necessarily one thing, I really like Jenkins as a whole. 38 | 39 | == What sort of contributions have felt the most successful or impactful? 40 | 41 | A very long time ago, I contributed to the Jenkins project, which helped me improve and gain more visibility for both Apache Maven and Jenkins. 42 | During the rewrite of Apache Maven 3, the old and widely used Maven-plugin didn't work anymore. 43 | At this time, Apache Maven and Jenkins were both very popular projects and without this enhancement, both might have suffered. 44 | So, due to my long time involvement with Apache Maven, I was thrilled to help adopt the new version and make Jenkins the first CI tool to integrate Apache Maven 3. 45 | Maybe I shouldn't have done this, as it now takes some time to get rid of the old Maven-plugin. 46 | 47 | == Advice for new developers and new members of the open-source community 48 | 49 | Participating in an open-source community is a really good opportunity to improve your technical skills and your resilience as well. -------------------------------------------------------------------------------- /src/pages/contributors/markus-winter.adoc: -------------------------------------------------------------------------------- 1 | = Markus Winter 2 | :page-name: Markus Winter 3 | :page-linkedin: 4 | :page-twitter: 5 | :page-github: mawinter69 6 | :page-email: 7 | :page-image: avatar/markus-winter.JPG 8 | :page-pronouns: He/Him/His 9 | :page-location: Wiesloch, Germany 10 | :page-firstcommit: 2015 11 | :page-datepublished: 2024-07-16 12 | :page-featured: false 13 | :page-intro: Markus Winter works as a software engineer at SAP SE and is based in Wiesloch, Germany. He has been contributing to Jenkins since 2016, providing bug fixes and enhancements in core and various plugins. Outside of his work, Markus enjoys traveling, reading books (mostly Sci-Fi), watching movies, and working on his Jenkins plugins. 14 | 15 | == What is your background prior to contributing to Jenkins? 16 | 17 | After graduating in Physics I soon realized that I wanted to be more involved in computer science. I then began my career in an unfamiliar area, in build systems. I worked with Make and Apache Ant (Maven was yet to be invented), and later in my career, I discovered Maven and Jenkins. 18 | 19 | == How long have you been using Jenkins? 20 | 21 | My first introduction to Jenkins (Hudson) was in 2010; it was a solution provided to allow teams to build subprojects of a bigger project though I was not really involved in this project. It really began in 2013 when our team took over an existing build system based on Jenkins. A lot of things we invented in the first few years are still in use, like running Jenkins in a Docker container or having a 100% configuration as code approach (at the time JCasC was not yet in existence). 22 | 23 | == Why choose Jenkins over other projects? 24 | 25 | We inherited an existing solution while evaluating other solutions. In the end, we came to the conclusion that Jenkins, due to its big plugin ecosystem, was the best choice. And because we had specific needs and requirements, we were able to write our own plugins, in which case we did. 26 | 27 | == What problems has Jenkins solved for you? 28 | 29 | We were able to build a single, huge C/C++ project on Jenkins with 170 agents. It provided a centralized build service (backed by 6 Jenkins instances, each with 10k+ jobs) for thousands of developers to build small projects, of any kind, on multiple platforms. 30 | 31 | == Is there an aspect of Jenkins that you're particularly passionate about? 32 | 33 | I like working on UI/UX improvements but also working on topics that do not belong to Jenkins core but yet bring value to everyone as a plugin link:https://github.com/jenkinsci/agent-maintenance-plugin[Agent Maintenance plugin], link:https://github.com/jenkinsci/pipeline-agent-build-history-plugin[Pipeline Agent Build History plugin]. 34 | 35 | == What sort of contributions have felt the most successful or impactful? 36 | 37 | Developing the link:https://github.com/jenkinsci/customizable-header-plugin[Customizable Header plugin] was the most impactful for me. It allowed for customization, giving your Jenkins a personal touch, and making it very easy to see and access multiple instances. I typically have 7 to 8 instances where I regularly need to access. But also contributing the link:https://weekly.ci.jenkins.io/design-library/Dialogs/[dialogs] to Jenkins core was a great experience. 38 | 39 | == Advice for new developers and new members of the open-source community 40 | 41 | Try things out when you have an idea and see if it works. If it doesn't work the way you thought it should, try to understand why you failed. You will learn more from doing and failing than from reading documentation. 42 | -------------------------------------------------------------------------------- /src/pages/contributors/darin-pope.adoc: -------------------------------------------------------------------------------- 1 | = Darin Pope 2 | :page-name: Darin Pope 3 | :page-linkedin: darin-pope 4 | :page-twitter: DarinPope 5 | :page-github: darinpope 6 | :page-email: 7 | :page-image: avatar/darin-pope.jpg 8 | :page-pronouns: 9 | :page-location: Charlotte, North Carolina 10 | :page-firstcommit: 2019 11 | :page-datepublished: 2024-07-30 12 | :page-featured: false 13 | :page-intro: Darin Pope is a developer advocate at CloudBees, residing in Charlotte, North Carolina. Since 2021, Darin has been publishing Jenkins tutorials on YouTube. His videos have helped thousands of Jenkins users from learning how to run a shell script in Jenkins to working with Docker and Jenkins. You can see his videos are shared by others on LinkedIn as a source to get other Jenkins users ‘unstuck’. 14 | 15 | When not planning for or working on the next Jenkins tutorial, Darin enjoys volunteering at his church where he serves on the production team. 16 | 17 | == What is your background prior to contributing to Jenkins? 18 | 19 | I was just a software developer from 1988 up until 1999. After 1999, I became a consultant, where I visited many clients. Through talking to them, I learned how businesses actually worked. From 2003 to 2005, the company I worked for had 29 layoffs. This experience led me to rethink working just as a software developer. I learned that coding isn’t always the answer. I needed to retool myself and change my approach to things so as to have a better impact for my clients. 20 | 21 | == How long have you been using Jenkins? 22 | 23 | I’ve been using Jenkins since 2012. 24 | 25 | == Why choose Jenkins over other projects? 26 | 27 | At the time there wasn’t anything else out there that had what we needed for our startup. Jenkins was good enough for what we needed. 28 | 29 | == What problems has Jenkins solved for you? 30 | 31 | Jenkins allowed our startup to work quickly and reliably ship our software to production without us having to spend the weekends trying to figure out what went wrong. Plus, there was enough community around it that we could trust. In the event that something broke, someone would be able to let us know whether it’s an issue isolated to us and not something systemic. 32 | 33 | == Is there an aspect of Jenkins that you're particularly passionate about? 34 | 35 | I think what everyone wants is a level of confidence in how things work. I see that with the community we are really focused on being careful not to break things. There’s focus on being backward compatible as long as possible and the community approach to maintenance, which I don't see other projects doing. 36 | 37 | == What sort of contributions have felt the most successful or impactful? 38 | 39 | Producing content that is useful for Jenkins and CloudBees CI has been impactful for me. There is documentation, however not everyone has the time to scroll through pages of it to understand it. By creating 3-10 minute videos about how something actually works, alongside documentation, is beneficial for those with time constraints and or who aren’t so much as text learners but audio/visual learners. 40 | 41 | == Advice for new developers and new members of the open-source community 42 | 43 | When I first came into the Jenkins community, I thought I knew a lot about it because I’ve used it for four years. I quickly learned that I knew nothing about Jenkins. My advice would be, when you come into any open source project, know your place. Come in with the mindset ‘how can I help’ vs ‘I know everything’. If a community says we need help with documentation, don’t look at this as below you but put your efforts where the help is needed. 44 | -------------------------------------------------------------------------------- /src/pages/contributors/vandit-singh.adoc: -------------------------------------------------------------------------------- 1 | = Vandit Singh 2 | :page-name: Vandit Singh 3 | :page-linkedin: vandit-singh 4 | :page-twitter: vandittweets 5 | :page-github: Vandit1604 6 | :page-email: 7 | :page-image: avatar/vandit-singh.png 8 | :page-pronouns: He/Him/His 9 | :page-location: Delhi NCR, India 10 | :page-firstcommit: 2022 11 | :page-datepublished: 2024-06-05 12 | :page-featured: false 13 | :page-intro: Vandit Singh is a Jenkins contributor currently based in India. During the day, he enjoys tinkering with code. When he's not deep in Jenkins code, Vandit loves to create music or strum his guitar. Open source and music are very close to his heart. Vandit's tech journey started when he learned Java and started to explore open source by contributing to Jenkins. He had developed a particular interest in DevOps during his first year of university, and Jenkins seemed like the perfect starting point. At first, the large codebase scared him. However, by taking one step at a time, Vandit keeps progressing. 14 | 15 | == What is your background prior to contributing to Jenkins? 16 | 17 | Before contributing to Jenkins, I had little knowledge of CI/CD, DevOps, and Java. 18 | During my freshman year at university, with only basic tech knowledge, the love for open source was instilled into me by my seniors and university mates. 19 | I know basic Java and have an interest in DevOps and Cloud-Native Technologies. 20 | 21 | == How long have you been using Jenkins? 22 | 23 | I have been contributing to Jenkins since July 2022. 24 | 25 | == Why choose Jenkins over other projects? 26 | 27 | One of the most exciting aspects for me is the idea of creating something that can be used by other people. 28 | The bar is not very high for anyone to start contributing. 29 | If you can code, you can get involved. 30 | If you can design, you're welcome in the community. 31 | You can write? 32 | Awesome! 33 | You help us with the documentation. 34 | The ease of getting involved with the community was a deciding factor for me in choosing to work with Jenkins over other projects. 35 | 36 | == What problems has Jenkins solved for you? 37 | 38 | Jenkins is used for CI/CD pipelining and automating tasks on the internet. 39 | You can automate many tasks in your web app with Jenkins. 40 | Additionally, Jenkins is used to improve the software development cycle by testing new pull requests every day. 41 | 42 | == Is there an aspect of Jenkins that you're particularly passionate about? 43 | 44 | I'm passionate about Jenkins Infrastructure and the Remoting component of Jenkins. 45 | 46 | == What sort of contributions have felt the most successful or impactful? 47 | 48 | The work I did in Google of Summer of Code 2023 seems the most successful for me. 49 | I got to link:https://www.jenkins.io/projects/gsoc/2023/projects/alternative-jenkinsio-build-tool/[adopt a different tooling for the jenkins.io website] that will be used by many Jenkins users. 50 | 51 | == Advice for new developers and new members of the open-source community 52 | 53 | The vastness of Jenkins' codebase is a boon for all, but can confuse new contributors. 54 | Be patient and keep treading forward every day. 55 | Focus on one thing at a time; you'll get things up and running accordingly. 56 | Enjoy the process while you're at it. 57 | 58 | If you get stuck somewhere, try to figure it out first. 59 | Embrace the challenge and try to tackle it on your own. 60 | The skills you'll gain while figuring things out are invaluable and can't be taught by anyone, only by yourself. 61 | 62 | One thing anyone can take from my journey is to be persistent and enjoy the process. 63 | Open source has a lot of opportunities for everyone to learn and grow from. 64 | -------------------------------------------------------------------------------- /src/pages/contributors/alyssa-tong.adoc: -------------------------------------------------------------------------------- 1 | = Alyssa Tong 2 | :page-name: Alyssa Tong 3 | :page-linkedin: alyssa-tong-98b0a21 4 | :page-twitter: 5 | :page-github: alyssat 6 | :page-email: 7 | :page-image: avatar/alyssa-tong.jpeg 8 | :page-pronouns: She/Her/Hers 9 | :page-location: San Diego, California 10 | :page-firstcommit: 2015 11 | :page-datepublished: 2024-08-13 12 | :page-featured: false 13 | :page-intro: Alyssa Tong is the Jenkins events officer, chair for the Advocacy {amp} Outreach SIG, and org admin for Google Summer of Code. Prior to this, she spent many years directing and producing the Jenkins User conference and Jenkins World. She established Jenkins Area Meetups around the world and started the Jenkins Ambassador program which are now part of the Continuous Delivery Foundation. 14 | 15 | Alyssa resides in sunny San Diego, California. She is a mom to two sons. They are a family of foodies, and enjoy cooking non-traditional dishes together. 16 | 17 | In her free time, she is passionate about all things health related; mental, physical, spiritual, and sleep! Yes, sleep is important! Her goal is to eat, exercise, and meditate her way through life for longevity so to improve lifespan as well as healthspan. 18 | 19 | == What is your background prior to contributing to Jenkins? 20 | 21 | Prior to contributing to Jenkins I worked at SUN Microsystems for 13 years, holding various roles in corporate technical escalations, new product introduction, and product marketing. 22 | 23 | == How long have you been using Jenkins? 24 | 25 | 2008 was my first open source engagement, it was with Hudson. I was part of the product marketing team to help launch new products for SUN Microsystems, which involved Hudson. 26 | 27 | == Why choose Jenkins over other projects? 28 | 29 | I had the good fortune to work with Jenkins in 2011 in the events and program management capacity. Having produced and attended so many Jenkins conferences, I got to meet and befriended so many wonderful people, many of whom were long time heavy contributors, many of whom are still contributing today. 30 | 31 | == What problems has Jenkins solved for you? 32 | 33 | Jenkins brings people together. There are so many people doing great things with Jenkins, with that comes different technical challenges but what’s great to see is in a remote world someone has an answer to help another. It is a community built on a common interest, with people actively helping one another, because at the end of the day all it takes is just 1 person to make an impact. 34 | 35 | == Is there an aspect of Jenkins that you're particularly passionate about? 36 | 37 | I’m most impressed about the community, the Jenkins user base is so wide and vast. Everywhere I go the feedback is consistently positive, which is “I love Jenkins!” 38 | 39 | == What sort of contributions have felt the most successful or impactful? 40 | 41 | The most rewarding moments for me would be the years of producing, directing, and watching the Jenkins User Conferences come to life from 300 to thousands of attendees. It’s exciting to experience the coming together of so many people who use and depend on Jenkins on a daily basis. 42 | 43 | These years consisted of a few hours of sleep a night, a lot of sweat and tears but yet very rewarding for me. 44 | 45 | == Advice for new developers and new members of the open-source community 46 | 47 | I'm well aware that joining an open source community could be intimidating. I've been there and have made my fair share of mistakes in public, I'm still making mistakes (just a different kind nowadays). But don’t be intimidated. I can vouch that the Jenkins community consists of many really nice and helpful people, many of whom I have the honor to establish friendships with. 48 | 49 | My advice is to dive right in, there’s a place for you here. And if you see a need, fill a need! 50 | -------------------------------------------------------------------------------- /Jenkinsfile: -------------------------------------------------------------------------------- 1 | pipeline { 2 | options { 3 | timeout(time: 60, unit: 'MINUTES') 4 | ansiColor('xterm') 5 | disableConcurrentBuilds(abortPrevious: true) 6 | buildDiscarder logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '5', numToKeepStr: '5') 7 | } 8 | 9 | agent { 10 | label 'linux-arm64-docker || arm64linux' 11 | } 12 | 13 | environment { 14 | TZ = 'UTC' 15 | // Amount of available vCPUs, to avoid OOM - https://www.gatsbyjs.com/docs/how-to/performance/resolving-out-of-memory-issues/#try-reducing-the-number-of-cores 16 | // https://github.com/jenkins-infra/jenkins-infra/tree/production/hieradata/clients/controller.ci.jenkins.io.yaml#L327 17 | GATSBY_CPU_COUNT = '4' 18 | } 19 | 20 | stages { 21 | stage('Check for typos') { 22 | steps { 23 | sh './typos --format sarif > typos.sarif || true' 24 | } 25 | post { 26 | always { 27 | recordIssues(tools: [sarif(id: 'typos', name: 'Typos', pattern: 'typos.sarif')]) 28 | } 29 | } 30 | } 31 | 32 | stage('Install dependencies') { 33 | environment { 34 | NODE_ENV = 'development' 35 | } 36 | steps { 37 | sh ''' 38 | asdf install 39 | npm install 40 | ''' 41 | } 42 | } 43 | 44 | stage('Build PR') { 45 | when { changeRequest() } 46 | environment { 47 | NODE_ENV = 'development' 48 | } 49 | steps { 50 | sh ''' 51 | npm run info 52 | npm run build 53 | ''' 54 | } 55 | } 56 | 57 | stage('Deploy PR to preview site') { 58 | when { 59 | allOf{ 60 | changeRequest target: 'main' 61 | // Only deploy from infra.ci.jenkins.io 62 | expression { infra.isInfra() } 63 | } 64 | } 65 | environment { 66 | NETLIFY_AUTH_TOKEN = credentials('netlify-auth-token') 67 | } 68 | steps { 69 | sh 'netlify-deploy --draft=true --siteName "contributor-spotlight" --title "Preview deploy for ${CHANGE_ID}" --alias "deploy-preview-${CHANGE_ID}" -d ./public' 70 | } 71 | post { 72 | success { 73 | recordDeployment('jenkins-infra', 'contributor-spotlight', pullRequest.head, 'success', "https://deploy-preview-${CHANGE_ID}--contributor-spotlight.netlify.app") 74 | } 75 | failure { 76 | recordDeployment('jenkins-infra', 'contributor-spotlight', pullRequest.head, 'failure', "https://deploy-preview-${CHANGE_ID}--contributor-spotlight.netlify.app") 77 | } 78 | } 79 | } 80 | 81 | stage('Deploy to production') { 82 | when { 83 | allOf{ 84 | expression { env.BRANCH_IS_PRIMARY } 85 | // Only deploy from infra.ci.jenkins.io 86 | expression { infra.isInfra() } 87 | } 88 | } 89 | environment { 90 | NODE_ENV = 'production' 91 | GATSBY_MATOMO_SITE_URL = 'https://jenkins-matomo.do.g4v.dev' 92 | GATSBY_MATOMO_SITE_ID = '4' 93 | } 94 | steps { 95 | script { 96 | infra.withFileShareServicePrincipal([ 97 | servicePrincipalCredentialsId: 'contributors-jenkins-io-fileshare-service-principal-writer', 98 | fileShare: 'contributors-jenkins-io', 99 | fileShareStorageAccount: 'contributorsjenkinsio' 100 | ]) { 101 | sh ''' 102 | npm run build 103 | 104 | # Synchronize the File Share content 105 | set +x 106 | azcopy sync \ 107 | --skip-version-check \ 108 | --recursive=true \ 109 | --delete-destination=true \ 110 | ./public/ "${FILESHARE_SIGNED_URL}" 111 | ''' 112 | } 113 | } 114 | } 115 | } 116 | } 117 | } 118 | -------------------------------------------------------------------------------- /src/pages/contributors/ulli-hafner.adoc: -------------------------------------------------------------------------------- 1 | = Ulli Hafner 2 | :page-name: Ulli Hafner 3 | :page-linkedin: 4 | :page-twitter: 5 | :page-github: uhafner 6 | :page-email: 7 | :page-image: avatar/ulli-hafner.png 8 | :page-pronouns: He/Him/His 9 | :page-location: Munich, Bavaria, Germany 10 | :page-firstcommit: 2007 11 | :page-datepublished: 2024-01-23 12 | :page-featured: false 13 | :page-intro: Ulli Hafner is a professor of Software Engineering at the University of Applied Sciences Munich where he advocates for Jenkins in several ways. He is also a software developer, open-source contributor, plugin maintainer, and serves on the Jenkins governance board. 14 | 15 | He is also part of the UX SIG, participating in meetings and providing various UX contributions over the years. 16 | Ulli enjoys helping new contributors grapple with Jenkins and giving talks at Jenkins events, where he can offer his insight into open source. 17 | In his free time, Ulli likes to balance his screen-usage by spending time with his family, being outdoors, and being active through sports or swimming. 18 | 19 | == What is your background prior to contributing to Jenkins and outside of Jenkins? 20 | 21 | I was a software developer and architect, and had never contributed to open source before Jenkins. 22 | 23 | Currently, I am the maintainer of several Jenkins plugins, mostly in the area of build result visualization using modern JS based user interfaces. 24 | For example, I am the maintainer of the link:https://plugins.jenkins.io/warnings-ng/[Warnings], link:https://plugins.jenkins.io/coverage/[Coverage], and link:https://plugins.jenkins.io/git-forensics/[Git Forensics] plugins, as well as several UI related JS wrapper plugins like link:https://plugins.jenkins.io/bootstrap5-api/[Bootstrap], link:https://plugins.jenkins.io/prism-api/[Prism API], or link:https://plugins.jenkins.io/echarts-api/[ECharts]. 25 | I am a member of the Jenkins UX SIG and the Jenkins Governance Board. 26 | 27 | During the day, I am a professor of Software Engineering at the University of Applied Sciences Munich, where I also try to win new Jenkins contributors by letting students develop new features in their student projects and theses. 28 | I am also helping new contributors and students in our Jenkins forums or by giving some talks at our Jenkins Meetups. 29 | 30 | I am a father of two children, and try to spend time with my family as much as possible. 31 | As a balance to a job that requires a lot of time in front of a computer, I partake in a lot of sports such as basketball and swimming. 32 | I am a lifeguard and swimming trainer for children in our junior lifeguard group. 33 | 34 | == How long have you been using Jenkins? 35 | 36 | I have been using Jenkins and contributing to Jenkins for more than 15 years now. 37 | 38 | == Why choose Jenkins over other projects? 39 | 40 | I needed Jenkins in one of my company projects. 41 | I was the architect in the team, and one of my responsibilities was to make sure that we deliver only high-quality code. 42 | 43 | == What problems has Jenkins solved for you? 44 | 45 | Jenkins helped me ensure that a lot of quality gates, that the team defined in the "Definition of Done", could be automatically checked and reported in a rich user interface. 46 | 47 | == Is there an aspect of Jenkins that you're particularly passionate about? 48 | 49 | It is all about the user interface. 50 | I like to improve the user experience and the look and feel. 51 | So, in particular, how can we best represent the various results of quality assurance tools such as testing, coverage, and static analysis in Jenkins' user interface. 52 | 53 | == What sort of contributions have felt the most successful or impactful? 54 | 55 | I think the most impactful contributions are the plugins for static analysis and code coverage, in combination with the git forensics plugin. 56 | Both plugins have a user base of more than 25,000 installations. 57 | The static analysis plugins won the first prize of the SUN Open Source Community Innovation Awards Program in 2008. 58 | 59 | == Advice for new developers and new members of the open-source community 60 | 61 | Do not reinvent the wheel; maintain or improve the quality standards of the existing projects. 62 | -------------------------------------------------------------------------------- /src/pages/contributors/tim-jacomb.adoc: -------------------------------------------------------------------------------- 1 | = Tim Jacomb 2 | :page-name: Tim Jacomb 3 | :page-linkedin: 4 | :page-twitter: tjaynz 5 | :page-github: timja 6 | :page-email: 7 | :page-image: avatar/tim-jacomb.jpg 8 | :page-pronouns: He/Him/His 9 | :page-location: Brighton, England 10 | :page-firstcommit: 2014 11 | :page-datepublished: 2024-02-21 12 | :page-featured: false 13 | :page-intro: Tim Jacomb is a software engineer based in Brighton, England and has been involved with the Jenkins project for over 10 years. Over this time, he has implemented several UI/UX updates and optimizations, reviewed thousands of pull requests for multiple areas of Jenkins, and currently serves as the Release Officer. 14 | 15 | Tim is originally from New Zealand and loves exploring the world. 16 | He has traveled to 50 countries thus far, with Gothenburg in Sweden being his favorite place to visit. 17 | His desire to see Europe led to him settling down in the UK around seven years ago. 18 | In his free time, Tim likes exploring the countryside, going out for walks, rock climbing, and generally spending time in nature. 19 | 20 | == What is your background prior to contributing to Jenkins? 21 | 22 | I used Jenkins at my first job out of university. 23 | It was a tool that we used for our builds, so it's something that I learned as soon as I started working. 24 | Then, I got more involved with development and started learning about Linux servers and managing them. 25 | This turned out to be valuable information because we were eventually running these things in our team. 26 | 27 | == How long have you been using Jenkins? 28 | 29 | I've been using Jenkins for roughly 10 to 11 years. 30 | 31 | == Why choose Jenkins over other projects? 32 | 33 | Back then it was pretty much the only free option. 34 | Our team was entirely focused on open source, so being free and open source were the ideal criteria. 35 | Our work was Java based and everything we ran or used was open source. 36 | It was just easy to get up and going, without having to worry about licensing or funding. 37 | As far as I knew, Jenkins was the best tool for that sort of thing at the time. 38 | 39 | == What problems has Jenkins solved for you? 40 | 41 | Repeatable builds that show they've built beyond someone's local machine. 42 | Being able to maintain repeatable deployments, content, and builds helps with scalability. 43 | This also helps when hundreds of people are using it and creating thousands of builds daily. 44 | Compared to other options it's fairly cheap, easy to run, and you don't have to rely on a provider or other party. 45 | We just do it ourselves really easily and it's fairly stable, I just can't find another service like Jenkins. 46 | 47 | == Is there an aspect of Jenkins that you're particularly passionate about? 48 | 49 | I like to work on the UI side of it. 50 | I feel like there's a lot to improve there and there's a lot that can be done to make it even nicer. 51 | Most of my contributions are around performance or stability issues and then general improvements that I'm working on. 52 | 53 | == What sort of contributions have felt the most successful or impactful? 54 | 55 | I appreciate the modernization work that's going on. 56 | Some of the features that link:https://github.com/janfaracik[Jan Faracik] has implemented UI modernization for are fantastic. 57 | This modernization is helping us drop all those old technologies and frameworks. 58 | The link:https://www.jenkins.io/blog/2023/10/09/prototype-removed/[Prototype removal] may not be hugely visible, but its impact is immense. 59 | This modernization also means there's hacks that can be dropped and modern libraries that were previously affected can now be used. 60 | 61 | == Advice for new developers and new members of the open-source community 62 | 63 | Getting started as a contributor is really hard, especially when you're trying to figure out how the project works, but the guides, documentation, and best practices really help when contributing. 64 | At first, I would say start with small changes and fixes so you can learn about the project as you go. 65 | Don't try to bite off something too big, just learn how it works and get familiar with stuff. 66 | Keep in mind there's a lot of history to the project and there's a lot of things there to understand. 67 | There's always opportunities to improve and there are several areas with open issues to be worked on. 68 | -------------------------------------------------------------------------------- /src/pages/contributors/jan-faracik.adoc: -------------------------------------------------------------------------------- 1 | = Jan Faracik 2 | :page-name: Jan Faracik 3 | :page-linkedin: 4 | :page-twitter: 5 | :page-github: janfaracik 6 | :page-email: 7 | :page-image: avatar/jan-faracik.jpg 8 | :page-pronouns: He/Him/His 9 | :page-location: London, England, United Kingdom 10 | :page-firstcommit: 2018 11 | :page-datepublished: 2024-05-22 12 | :page-featured: false 13 | :page-intro: Jan Faracik is a Lead Software Engineer based in sunny London, UK. Jan possesses a deep interest in the combination of design and technology, and how they can be used to enrich users' lives. This started from his early days of mucking about in VB.NET and Adobe Fireworks. He's been fortunate enough to make it a career in his later years, largely working in the public sector. In his free time, you'll often find him walking in the many parks London has to offer, listening to music and going to concerts. 14 | 15 | == What is your background prior to contributing to Jenkins? 16 | 17 | While tinkering with various languages and frameworks throughout school and university, I discovered a passion for technology and design, which grew stronger over the years. 18 | 19 | However, it wasn't until my first job post-graduation that I found myself using Jenkins regularly for standard CI/CD tasks. 20 | 21 | During a particularly heavy backend project, I often found myself grumbling about the lack of design work and scratching that particular itch in my brain. 22 | Then, serendipitously, I stumbled upon link:https://github.com/timja[Tim Jacomb's GitHub profile]. 23 | He was looking for Jenkins contributors to enhance the user experience (UX), and I thought, "Why not?" 24 | Fast forward three years, and they still can't get rid of me. 25 | 26 | == How long have you been using Jenkins? 27 | 28 | I've been using Jenkins since 2018. 29 | 30 | == Why choose Jenkins over other projects? 31 | 32 | Jenkins is widely known and used, and it doesn't cost anything. 33 | It has tons of online documentation and is straightforward to work with. 34 | 35 | Jenkins is also a fantastic opportunity for developers looking to get into the world of OSS, because Jenkins is used globally and has an expansive ecosystem of plugins and services to work with. 36 | The community is also incredibly supportive and is more than open to newcomers. 37 | 38 | == What problems has Jenkins solved for you? 39 | 40 | I've used Jenkins consistently throughout my career since it's always a great experience. 41 | Recently, we've been using it to manage deploys for a suite of microservices. 42 | Features like shared libraries have been essential to our work, making it a breeze. 43 | 44 | == Is there an aspect of Jenkins that you're particularly passionate about? 45 | 46 | I'm particularly passionate about improving the UX of Jenkins. 47 | Over the last few years, it's been great to see and contribute to the UX of Jenkins -- it's really come a long way -- becoming nicer to use and more accessible. 48 | 49 | Working with link:https://www.jenkins.io/blog/authors/timja/[Tim Jacomb] on a presentation for DevOps World exploring link:https://www.jenkins.io/blog/2022/08/26/jenkins-design/[the future of Jenkins' user interface] has been a particular highlight, and was a first for me. 50 | 51 | == What sort of contributions have felt the most successful or impactful? 52 | 53 | I've really enjoyed making UX contributions, as they're often immediately visible to users. 54 | Contributions such as the Tango icons to SVGs, new tables and widgets, and a standardized color palette help keep the Jenkins user experience fresh. 55 | While walking through my office, it's rare to see somebody not using the dark theme. 56 | 57 | I'm keen to see and port features of BlueOcean that haven't yet made it to Jenkins core. 58 | The link:https://plugins.jenkins.io/pipeline-graph-view/[Pipeline Graph View plugin] is an example of this, and it's great to see it integrated with core Jenkins. 59 | 60 | Work on reducing or removing code such as YUI, Prototype, legacy CSS/JS, and legacy icons has been fantastic to see. 61 | Despite not being visible to users, they make it easier for newcomers to work on the Jenkins project. 62 | 63 | == Advice for new developers and new members of the open-source community 64 | 65 | Go for it! 66 | Start small and work your way up. 67 | The community is very welcoming to newcomers and new ideas, and we are more than happy to support you as you gain confidence and knowledge of the codebase. -------------------------------------------------------------------------------- /src/pages/contributors/kris-stern.adoc: -------------------------------------------------------------------------------- 1 | = Kris Stern 2 | :page-name: Kris Stern 3 | :page-linkedin: 4 | :page-twitter: 5 | :page-github: krisstern 6 | :page-email: 7 | :page-image: avatar/kris-stern.png 8 | :page-pronouns: They/Them/Theirs 9 | :page-location: Hong Kong SAR, China 10 | :page-firstcommit: 2021 11 | :page-datepublished: 2024-01-10 12 | :page-featured: false 13 | :page-intro: Kris Stern is a problem solver, former astrophysicist, and Jenkins contributor. They have taken on the role of release lead for several Jenkins LTS releases, joined the Jenkins Google Summer of Code as an org admin, and is constantly raising their hand when opportunities to be involved are presented. 14 | 15 | Regardless of what role Kris takes on, their passion for self-improvement and determination to find answers is always on display. 16 | Kris has also gone above and beyond to help with creating the Contributor Spotlight repository and site. 17 | Thanks to their work, we are able to highlight the hard work that goes into Jenkins from the community. 18 | 19 | == What is your background prior to contributing to Jenkins? 20 | 21 | I am a "problem-solver" at heart, meaning that once I am assigned a task, especially a software-related one at work, I am very keen to do all I can until it is resolved. 22 | Throughout my life, I have met many inspirational people who challenged me through their examples to do better and to never give up on anything I have committed to doing. 23 | These people include a physics professor from the Western University of Ontario, my PhD thesis supervisor from the University of Hong Kong (HKU), and an older classmate at MCIT Online at the University of Pennsylvania. 24 | 25 | In my "previous life", I was trained as an astrophysicist. 26 | For my PhD thesis, I taught myself how to use Python for scripting and programming to solve astrophysics problems, and that's how I got into software engineering. 27 | I started contributing to open-source projects during my PhD, mostly related to astrophysics. 28 | Once I graduated from my PhD program, I discovered Jenkins as a tool and as a community. 29 | Being able to solve software engineering problems via code contributions is near and dear to my heart. 30 | I remember in the earlier stage of my professional software engineering career, I was not sure about things most of the time. 31 | However, with perseverance, careful and thorough research, and the help of colleagues, I was able to slowly gain the skills, knowledge, and confidence to help me be able to solve problems mostly on my own. 32 | At first, I mostly focused on the Google Summer of Code program when contributing to Jenkins, but have diversified into other areas like adopting three Jenkins plugins and volunteering as Release Lead occasionally since. 33 | 34 | == How long have you been using Jenkins? 35 | 36 | I have been using Jenkins for more than 2 years. 37 | 38 | == Why choose Jenkins over other projects? 39 | 40 | I think the main reason why I contributed to Jenkins over other open-source projects is the opportunities I have been afforded and the approachability and openness of the Jenkins community. 41 | 42 | == What problems has Jenkins solved for you? 43 | 44 | Jenkins as an automation server helps me detect defects in the software I develop during the software development lifecycle. 45 | Jenkins also helps automate the testing of builds. 46 | 47 | == Is there an aspect of Jenkins that you're particularly passionate about? 48 | 49 | The Jenkins community is very approachable and the Jenkins project is very mature, yet is constantly evolving, which is the reason why I am very passionate about both. 50 | 51 | == What sort of contributions have felt the most successful or impactful? 52 | 53 | For me, my Google Summer of Code contributions as an org admin and mentor have felt the most successful/impactful. 54 | 55 | == Advice for new developers and new members of the open-source community 56 | 57 | Always keep learning! 58 | Enjoying the process makes it a tremendously more pleasurable experience to contribute to open-source. 59 | Since there are so many unknowns in open-source software development, try to find tasks that are challenging to you in addition to being a benefit to the community to work on, and do not expect too much in terms of an outcome. 60 | Sometimes your contribution will not get accepted for various reasons, but it will still be a worthwhile endeavor. 61 | Treat this as a learning experience so that your next contribution will build upon what you have already done. 62 | -------------------------------------------------------------------------------- /src/pages/contributors/kevin-martens.adoc: -------------------------------------------------------------------------------- 1 | = Kevin Martens 2 | :page-name: Kevin Martens 3 | :page-linkedin: kevinmartens27 4 | :page-twitter: 5 | :page-github: kmartens27 6 | :page-email: 7 | :page-image: avatar/kevin-martens.jpeg 8 | :page-pronouns: He/Him/His 9 | :page-location: Boston, Massachusetts, USA 10 | :page-firstcommit: 2022 11 | :page-datepublished: 2024-05-08 12 | :page-featured: false 13 | :page-intro: Kevin Martens is a technical content developer and the Documentation Officer for Jenkins. He is a musician at heart, with a love for education and writing. Despite joining the Jenkins project somewhat recently, Kevin's presence is felt whether leading documentation office hours or providing reviews for contributors. 14 | 15 | Outside of documentation, Kevin can usually be found picking out a record to listen to or playing guitar along to his favorite artists. 16 | He's also a fan of all kinds of games, favoring card and video games the most. 17 | On top of all that, Kevin loves to explore around New England with his wife and then come home to their four cats. 18 | 19 | == What is your background prior to contributing to Jenkins? 20 | 21 | My first experiences with open source involved game emulation, but I was strictly a user in these cases. 22 | In college, I utilized open-source versions of documentation and presentation tools, since there was no cost involved. 23 | I went to school for communication & education, going on to teach after graduation. 24 | However, I learned during this time that despite my passion, teaching was not going to be my career. 25 | 26 | After realizing this, I spent time in different areas of the tech space, providing support and training on various hardware and software platforms. 27 | Ultimately, these roles were not as fulfilling as I had hoped. 28 | Even though I enjoyed helping users figure out their issues, I felt like something was missing. 29 | Thanks to my wife's encouragement, I decided to break out from what I had been doing and apply for roles that would utilize my writing skills and background. 30 | This change brought me to CloudBees, and through this role I was introduced to the Jenkins project. 31 | 32 | == How long have you been using Jenkins? 33 | 34 | I have only been contributing to Jenkins for the last two years, so I am still new to the project. 35 | 36 | == Why choose Jenkins over other projects? 37 | 38 | It wasn't so much a choice of Jenkins over other projects, but more of being given an opportunity to contribute to Jenkins as a technical content developer. 39 | Since I am a CloudBees employee, my relationship with Jenkins is a bit different than most. 40 | However, since joining the Jenkins community and contributing to the project, I wouldn't have it any other way. 41 | 42 | I have been welcomed and encouraged by the Jenkins community through every step of my journey and truly appreciate just how open everyone has been. 43 | I am a newer technical content developer, so I was incredibly nervous at first due to the project being so established. 44 | However, my concerns soon faded as I got more familiarized with Jenkins. 45 | 46 | == What problems has Jenkins solved for you? 47 | 48 | Jenkins has not necessarily solved problems for me, but it has afforded me several opportunities that I fully believe I would not have had elsewhere. 49 | I am able to work with the Jenkins community on documentation and have taken on the role of Documentation Officer since joining the project. 50 | My knowledge and skills have grown exponentially thanks to the work being done around me and the availability of community members. 51 | I am very happy to be part of the Jenkins project, and hope that I am paying it forward to the existing and future contributors. 52 | 53 | == Is there an aspect of Jenkins that you're particularly passionate about? 54 | 55 | I am primarily involved in documentation, while also working with the other SIGs and officers on various projects. 56 | I have the utmost respect for the community as a whole, as I have formed bonds & relationships with people from all over the globe. 57 | The Jenkins community has welcomed me with open arms, and shown just how exceptional an open-source project can be. 58 | 59 | == What sort of contributions have felt the most successful or impactful? 60 | 61 | Topical, but the contributor spotlight has been very rewarding to work on, as it not only showcases the hard work that goes into Jenkins, but gives everyone a glimpse into the people that are doing this work. 62 | I've learned a lot just from working with contributors and understanding what drives them. 63 | 64 | I have also seen the work that is done in preparing Jenkins releases, so all of my respect and thanks to those that participate in the release process. 65 | This is no easy feat and takes the effort of several people to make sure is ready for launch. 66 | 67 | == Advice for new developers and new members of the open-source community 68 | 69 | Never be afraid to ask for help when it comes to joining a project. 70 | Jenkins has lots of elements to it, and no one expects you to know everything right away. 71 | Take time and learn about the project and its structure, so you can ask the right questions and get the full picture. -------------------------------------------------------------------------------- /src/pages/contributors/stefan-spieker.adoc: -------------------------------------------------------------------------------- 1 | = Stefan Spieker 2 | :page-name: Stefan Spieker 3 | :page-linkedin: stefan-spieker-446168161 4 | :page-twitter: 5 | :page-github: StefanSpieker 6 | :page-threads: 7 | :page-email: 8 | :page-image: avatar/stefan-spieker.png 9 | :page-pronouns: He/Him/His 10 | :page-location: Herzogenrath, Germany 11 | :page-firstcommit: 2011 12 | :page-datepublished: 2024-03-06 13 | :page-featured: false 14 | :page-intro: Stefan Spieker started early with software development, selling his first software while in 9th grade. As a result result of this early success, his software was used for more than 10 years. At that point, it was a clear path for Stefan to study computer science at the RWTH Aachen University in Aachen, Germany. His first jobs provided experiences that led him to picking up Jenkins, that he then tried to reciprocate by introducing his teams to the project. 15 | 16 | Though he switched roles to be a solution architect, he continued to contribute to Jenkins in his free time. When he's not advocating for Jenkins, Stefan enjoys being active by playing volleyball and badminton weekly. Stefan has also written a book for people who use computers constantly, but never got a computer science education titled “52 Stunden Informatik” (52 Hours of Computer Science). In the book, there is a dedicated chapter for open source, further displaying Stefan's affinity for the open-source community and its projects. 17 | 18 | == What is your background prior to contributing to Jenkins? 19 | 20 | In my first job we did a lot without a build server, we just wrote makefiles and executed them manually. 21 | In my next job, we had a build server that was pretty complicated - link:https://cruisecontrolnet.org/[cruisecontrolnet.org]. 22 | This was already a huge improvement, but also pretty hard to maintain. 23 | So, I started to use Hudson/Jenkins for some private micro-controller projects and finally convinced my boss to try it out. 24 | Before contributing to Jenkins, I started by contributing to small embedded projects. 25 | But I wanted to contribute to a bigger project, so I checked out Linux Kernel. 26 | It felt safe to contribute there since they have a longer process to get things applied. 27 | After getting started, Jenkins was more appealing and the low barrier for entry was attractive from the get go. 28 | 29 | == How long have you been using Jenkins? 30 | 31 | I started using Hudson in 2010 and switched to Jenkins in 2011. 32 | Introducing Jenkins in my team was a huge success and soon other teams started using Jenkins. 33 | At that time, I asked my boss how I could give something back during working hours. 34 | This request was rejected because of legal concerns. 35 | However, I really loved the openness and was curious about how open source really worked, so I started to contribute some not-so-small PRs to Jenkins core. 36 | 37 | == Why choose Jenkins over other projects? 38 | 39 | I really love the openness of the project. 40 | I was also able to motivate and help colleagues contribute to Jenkins and other open-source projects, which feels really great. 41 | I think open source is a very important part of the software business and Jenkins is a great opportunity to get a really good impression of how it should work. 42 | I believe that almost everyone can and should participate in open-source projects. 43 | 44 | == What problems has Jenkins solved for you? 45 | 46 | All my automation challenges were solved with Jenkins. 47 | For example, from traditional software building and testing to automating database maintenance or notifications about new tool releases. 48 | 49 | == Is there an aspect of Jenkins that you're particularly passionate about? 50 | 51 | The flexibility of Jenkins with this huge number of plugins, over 2500 members, and even more contributors. 52 | I joined the Contributor summit at FOSDEM in 2020 in person and that was really great to actually meet others who work on Jenkins. 53 | This motivated me a lot to make even more contributions. 54 | Meanwhile, I changed my role to a solution architect, where I did not program as much as I would like to. 55 | This felt a little bit like Batman: taking a lot of meetings during the day, but doing the right thing at night by providing some contributions to the open-source community, mainly Jenkins. 56 | This also helps me keep my feet close to the ground, because I still feel strongly connected to the Jenkins community and their experience when it comes to software development. 57 | 58 | == What sort of contributions have felt the most successful or impactful? 59 | 60 | I've created a lot of quality-related PRs and finally got Jenkins core to zero open SpotBugs issues, with great help from other contributors and maintainers, of course. 61 | 62 | == Advice for new developers and new members of the open-source community 63 | 64 | Start with a small contribution and you will learn something new with every contribution or review you do. 65 | Learn to value older code and try to understand its existence, instead of why it shouldn't be there. 66 | Some community members are very fast in responding, while others take their time and have power reviews. 67 | Don't rush, and since everything is a donation, it feels very good and rewarding. 68 | 69 | -------------------------------------------------------------------------------- /src/pages/contributors/mark-waite.adoc: -------------------------------------------------------------------------------- 1 | = Mark Waite 2 | :page-name: Mark Waite 3 | :page-linkedin: markwaite 4 | :page-twitter: MarkEWaite 5 | :page-github: MarkEWaite 6 | :page-email: 7 | :page-image: avatar/mark-waite.png 8 | :page-pronouns: He/Him/His 9 | :page-location: Loveland, Colorado, USA 10 | :page-firstcommit: 2008 11 | :page-datepublished: 2024-04-29 12 | :page-featured: false 13 | :page-intro: Mark Waite is a father of eight, grandfather of 13, Jenkins Governance board member, Jenkins core maintainer, and the maintainer of several plugins. This is the long way of saying Mark wears many hats. However, his passion for open source and Jenkins is clear through all of his work and contributions to the Jenkins project. 14 | 15 | Mark loves to travel with his wife to visit and spend time with their children, who live in fun and interesting parts of the United States, including Alaska, Texas, California, and Colorado. 16 | His travels also include two years he spent in northern Italy beginning at age 19. 17 | Mark and his wife still maintain several friendships he first made during those two years in Italy. 18 | Whether at home or traveling, Mark enjoys recreational cycling and wandering with his wife. 19 | 20 | == What is your background prior to contributing to Jenkins? 21 | 22 | I graduated from university with a degree in Mechanical Engineering. 23 | During the interview process, while preparing for my first job after graduating, I told the interviewer that I didn't want to be a mechanical engineer and that I wanted to play with computers for the rest of my life. 24 | That interviewer was seeking people to create a mechanical engineering software business inside Hewlett-Packard. 25 | I was one of their support engineers for the first several years. 26 | 27 | After spending enough time as a support engineer, I asked if I could become a programmer. 28 | They were bold enough to allow me to become a programmer. 29 | However, after some years of programming, I realized I was not a great programmer but a good organizer. 30 | I decided to switch to release management and then to managing a development team. 31 | 32 | In late 2002 or early 2003, my team learned about Extreme Programming, a methodology that encourages all production code to be written by two programmers paired together. 33 | Extreme Programming requires continuous integration. 34 | We set our goal to have "XP by 3/03" and started to create our own CI server. 35 | 36 | In 2007 or 2008, I switched to a new company with a new project and discovered the continuous integration server that became Jenkins. 37 | I was impressed at how easy it was to deploy and manage and how well it worked. 38 | 39 | A few companies after that, I joined CloudBees to work full-time on helping Jenkins grow. 40 | 41 | == How long have you been using Jenkins? 42 | 43 | I started using Jenkins in 2007 or 2008. 44 | I've been using it since then, even during the times when I worked for employers that chose another continuous integration solution. 45 | 46 | == Why choose Jenkins over other projects? 47 | 48 | Jenkins was easy to configure and easy to manage, especially compared to its competitors at the time. 49 | I defined jobs, modified configurations, and viewed test results from a web browser. 50 | I often found that the flexibility of Jenkins was more important to me than the specific reasons that an employer had chosen another solution. 51 | I had problems to solve and Jenkins solved those problems. 52 | 53 | == What problems has Jenkins solved for you? 54 | 55 | Jenkins builds my code, runs my tests, and shows the results across a wide range of systems and technologies. 56 | 57 | == Is there an aspect of Jenkins that you're particularly passionate about? 58 | 59 | I have been involved in each area of Jenkins at some point, but I'm proud of the link:https://plugins.jenkins.io/git/[Git] and link:https://plugins.jenkins.io/git-client/[Git client] plugins that I maintain. 60 | I'm also involved in the platforms and documentation SIGs, where I host the Jenkins documentation office hours (Asia). 61 | 62 | == What sort of contributions have felt the most successful or impactful? 63 | 64 | The link:https://www.jenkins.io/doc/developer/tutorial-improve/[Improve a plugin tutorial] and the link:https://www.jenkins.io/blog/2023/11/06/introducing-2-2-2-java-support-plan/[2+2+2 Java Support Plan] have both felt like impactful and successful contributions. 65 | In each case, they were important to a wide group of people and they were important for an extended period of time. 66 | 67 | == Advice for new developers and new members of the open-source community 68 | 69 | Do not in believe self-imposed barriers to open source contribution. 70 | I mistakenly thought that a mere mortal, such as myself, could not possibly be of use to a successful and impressive project like Jenkins. 71 | I was wrong. 72 | Mere mortals are _exactly_ the type of people who do _amazing_ work in the Jenkins project. 73 | Find a topic that interests you, either professionally or personally. 74 | Find areas in the Jenkins project that are involved in that area of interest. 75 | Contribute your skills and your passion in that area. 76 | Help others do the same. 77 | 78 | I was interested in test automation, so I wrote automated tests for the Jenkins Git plugin. 79 | As a result, I learned much more about Git, Java, and test automation. 80 | 81 | I was interested in Git performance, so I experimented with options to improve Git performance. 82 | Through this, I learned more about Git and performance. 83 | 84 | I was interested in operating systems and platforms, so I experimented with uncommon processors and operating systems. 85 | I learned more about operating systems, file systems, and their interactions. -------------------------------------------------------------------------------- /src/pages/contributors/daniel-krämer.adoc: -------------------------------------------------------------------------------- 1 | = Daniel Krämer 2 | :page-name: Daniel Krämer 3 | :page-linkedin: daniel-krämer 4 | :page-twitter: strangelookingnerd 5 | :page-github: strangelookingnerd 6 | :page-email: 7 | :page-image: avatar/daniel-kramer.jpeg 8 | :page-pronouns: 9 | :page-location: Darmstadt, Germany 10 | :page-firstcommit: 2019 11 | :page-datepublished: 2024-08-27 12 | :page-featured: false 13 | :page-intro: My passion for computers began early, the day my dad brought home a big grey box. I didn't understand anything happening on the screen, but my fascination was born. From then on, I spent more and more time in front of that box, gradually learning what was happening behind the screen. I was (and probably still am) a proud nerd. 14 | 15 | Unfortunately, being a nerd alone wasn't enough to make a living. I became a father for the first time at 19 and quickly realized I needed a profession that could provide for both my son and me. Going into IT came naturally, as it was something I had always loved, and after earning my degree I began my journey in software development. One of the first things I learned on the job was rubber-duck debugging — a methodology that stuck with me and that I still preach to everyone. It also explains my collection of rubber ducks gathered over the years. 16 | 17 | For me, it became essential not only to write code all day but also to get out there and talk about it. Being able to explain to everyone what that big grey box does was something I always wanted to pursue. Now, with my second child on the way, I'm grateful to have gone down this path, as it has brought me exactly where I want to be in life. 18 | 19 | Besides computers and software, I love nature. Over the years, I developed an obsession with sloths. Thanks to my wife, who got me away from the screen, I was able to meet them multiple times in Costa Rica and Panama. Since then, my workspace has been filled with stuffed animals and photos of sloths. 20 | 21 | 22 | == What is your background prior to contributing to Jenkins? 23 | 24 | I began my professional career in software development in 2012 and have since held various positions in the field. Starting as a Java developer, I quickly evolved into roles such as architect and product owner. Advocating the principles and methodologies of software development, such as clean code and security, to my colleagues became a significant part of my daily work. 25 | 26 | During this time, I also had the opportunity to be a speaker at JavaLand, one of the largest Java conferences in Europe (link:https://meine.doag.org/events/javaland/2022/agenda/#eventDay.1647298800[JavaLand 2022]). However, my passion for writing code remains strong. I found open source development to be an excellent avenue to continue coding while also contributing to the broader community. 27 | 28 | 29 | == How long have you been using Jenkins? 30 | 31 | I have been using Jenkins since around 2016. In my previous job, we rebuilt the CI/CD infrastructure from scratch, and after careful consideration, we decided to switch to Jenkins. 32 | 33 | == Why choose Jenkins over other projects? 34 | 35 | Besides being free and widely used, Jenkins offers extensive functionality right out of the box and can be easily enhanced and adapted to specific needs, thanks to its vast ecosystem of plugins. The large and active Jenkins community continuously works to improve the platform, ensuring a better experience for everyone. 36 | 37 | == What problems has Jenkins solved for you? 38 | 39 | Being able to automate nearly everything with Jenkins saves time and resources during development, allowing me to focus on more critical tasks. It's not just about building applications - Jenkins also enables the generation of metrics, the creation of robust processes, and the handling of various other aspects of my daily work. 40 | 41 | == Is there an aspect of Jenkins that you're particularly passionate about? 42 | 43 | Jenkins offers a professional environment that can be easily utilized by everyone, even those who are not technically savvy. In today's software development landscape, tooling needs to integrate seamlessly into many aspects of the application lifecycle, requiring both ease of entry and robust functionality. Jenkins excels in this regard, providing a user-friendly interface without compromising on features. 44 | 45 | == What sort of contributions have felt the most successful or impactful? 46 | 47 | I recently began enabling the Jenkins Security Scan for an ever-growing number of link:https://groups.google.com/g/jenkinsci-dev/c/cxjQWnZ0S58[Jenkins plugins], doing my part to make Jenkins and its ecosystem a secure and robust solution. Another contribution I am particularly proud of is creating the link:https://plugins.jenkins.io/custom-folder-icon/[custom-folder-icon-plugin]. I still find myself regularly checking the number of installations and feel a sense of accomplishment knowing that something I created is useful to so many people. 48 | 49 | == Advice for new developers and new members of the open-source community 50 | 51 | For new developers, I would emphasize that beyond writing and understanding code, one of the most important yet often overlooked aspects of software development is the ability to communicate about it. Being able to explain your code and methodologies to someone who may not be as tech-savvy or effectively communicating with your colleagues on a technical level are both incredibly important skills to master. 52 | 53 | Regarding getting into open-source development, my advice is to start with something you like or even use yourself. Your contributions don't need to change the world right away - they can start small. You'll quickly find that even simple tasks, like fixing a typo in the documentation, are highly appreciated by others in the community. 54 | -------------------------------------------------------------------------------- /src/pages/contributors/alexander-brandes.adoc: -------------------------------------------------------------------------------- 1 | = Alexander Brandes 2 | :page-name: Alexander Brandes 3 | :page-linkedin: alexander-brandes 4 | :page-twitter: 5 | :page-github: NotMyFault 6 | :page-email: 7 | :page-image: avatar/alexander-brandes.jpeg 8 | :page-pronouns: He/Him/His 9 | :page-location: Kassel, Germany 10 | :page-firstcommit: 2019 11 | :page-datepublished: 2023-11-29 12 | :page-featured: false 13 | :page-intro: Alexander Brandes is an open-source contributor and maintainer and serves on the Jenkins governance board. He has made contributions to multiple aspects of the Jenkins project including Jenkins Core, multiple plugins, weekly and Long Term Support releases, and the community. 14 | 15 | When he is not pursuing open-source endeavors, Alexander is a passionate musician and has been playing the trumpet for more than 15 years, primarily playing jazz and film music. In addition to being the lead trumpet in a band, he also teaches beginners how to play an instrument. 16 | 17 | == What is your background prior to contributing to Jenkins? 18 | 19 | When I was 13, my friends and I discovered the sandbox game _Minecraft_. 20 | Eventually, we created our own Minecraft server without any clue about what we were doing. 21 | The game is written in Java, and can be modified or extended with plugins. 22 | Even though we weren't fully aware of what we were doing, we had a great time with writing our first plugin. 23 | It wasn't any good, considering what I know now, but the few people who played on the server liked it a lot, which still means a lot to me almost a decade later. 24 | In 2020, we had more than 5k concurrent players every day and grew a Discord community made up of around ~250,000 active members, becoming one of the largest Minecraft servers worldwide. 25 | 26 | Ultimately, this hobby project shaped a major part of me over the past decade. 27 | Throughout the years, I continued learning more about Java, containers, and networking as the single server evolved into a continuously growing network. 28 | Everything I needed to learn, I had to teach myself since I had no technical background at all. 29 | The knowledge acquired helped me tremendously when getting into open source and development. 30 | I still enjoy looking back at what started as a small project and turned into something thousands of people have a great time on every day. 31 | It is absolutely inspiring for me to see. 32 | 33 | Before I started contributing to Jenkins, I had already contributed to smaller open-source projects. 34 | My contributions primarily focused on Java-based projects and documentation improvements. 35 | These contributions, paired with continuous learning of new languages and technologies, helped improve my knowledge and advance future contributions. 36 | 37 | == How long have you been using Jenkins? 38 | 39 | I have been using Jenkins since 2019. 40 | 41 | == Why choose Jenkins over other projects? 42 | 43 | Jenkins maintains a notably low barrier of entry, which makes it attractive to contribute to, regardless of the massive plugin ecosystem around Jenkins. 44 | What I liked the most when I started contributing to Jenkins, is that you can start with small pull requests for plugins, and move on to bigger contributions when you feel more comfortable with the codebase and ecosystem. 45 | 46 | Moreover, Jenkins is something I had used before I started contributing. 47 | Therefore, I already had a certain level of experience as an end user, before becoming a contributor. 48 | That's a key point which made it easier for me to contribute, because I've already been a user of the project, instead of contributing to a project totally unfamiliar to me. 49 | 50 | == What problems has Jenkins solved for you? 51 | 52 | When I started using Jenkins initially, its primary task was only building a project. 53 | Over the years, my needs shifted and so did my setup. 54 | Nowadays, Jenkins is my all-rounder, handling a multitude of tasks. 55 | 56 | I'm using various plugins to deploy artifacts to a Maven repository, aggregate test results and code coverage, and send notifications to Discord when a new build is available. 57 | Additionally, Jenkins has helped me to test pull requests before they land in the default branch. 58 | 59 | Jenkins has helped me automate tasks, allowing me to spend my time and energy on more important tasks. 60 | 61 | == Is there an aspect of Jenkins that you're particularly passionate about? 62 | 63 | The Jenkins project has existed for almost a decade, involving components created around that time that are still being maintained and developed. 64 | Jenkins is great at reforging itself, especially in code. 65 | Constant UI/UX improvements over the years is great to see. 66 | 67 | The connection with the community is a key point when it comes to running a successful open source project. 68 | Hence, I value the ease of accessibility of the project's chat channels and community forums a lot. 69 | I greatly appreciate the opportunity to readily connect with other members of the community. 70 | 71 | == What sort of contributions have felt the most successful or impactful? 72 | 73 | The ongoing UI/UX changes in Jenkins core have been a next-level milestone for the project. 74 | Thanks to the numerous contributors, the Jenkins user interface has improved greatly with a new look and feel. 75 | Continuous improvements are key to stay in the loop, given how fast-paced technology is. 76 | Every contributor or maintainer improving Jenkins' UI is a big win. 77 | 78 | == Advice for new developers and new members of the open-source community 79 | 80 | Asking for help is no crime. 81 | Don't feel intimidated by the size of projects you want to contribute to. 82 | Everyone starts little, but asking questions and solving small issues is a great milestone to increase your knowledge and carry further contribution over the finish line. 83 | -------------------------------------------------------------------------------- /src/pages/contributors/meg-mcroberts.adoc: -------------------------------------------------------------------------------- 1 | = Meg McRoberts 2 | :page-name: Meg McRoberts 3 | :page-linkedin: meg-mcroberts-96b444 4 | :page-twitter: 5 | :page-github: StackScribe 6 | :page-email: 7 | :page-image: avatar/meg-mcroberts.jpg 8 | :page-pronouns: She/Her/Hers 9 | :page-location: Scotts Valley, California, USA 10 | :page-firstcommit: 2017 11 | :page-datepublished: 2025-06-30 12 | :page-featured: false 13 | :page-intro: Meg McRoberts is a technical content developer who loves the process of transferring technical details from the minds of the people who develop the software to the minds of the people who use the software. She enjoys writing and structuring documentation, and identifying new pieces that are required. She thinks a lot about the maintenance process and how to automate at least some of it. Meg is committed to the open-source concept and documentation-as-code disciplines, and sees these as keys to the future of technology and society. When she is not working on documentation, she enjoys studying history, sharing good conversations with interesting people over delicious food, and hanging out with her Lhasa Apso dog and two house rabbits. 14 | 15 | == What is your background prior to contributing to Jenkins? 16 | 17 | I started life as a historian with some disdain for technology. 18 | While studying Jewish communal structures in medieval Europe at the University of Chicago, I took a student job in a computer lab. 19 | This was an early machine learning endeavor, training the computer to analyze Pap smears. 20 | My job was to spend evenings in the computer lab, running backups, mounting disks and tapes, and changing the printer paper so the data scientists could work from home. 21 | We had no written procedures, so I started writing up instructions for the tasks I was performing. 22 | Our senior engineer pulled me aside and said that I was pretty good at that, and recommended I explore technical writing, and I was hooked. 23 | 24 | I eventually landed at Bell Laboratories when they were attempting to make viable computer systems that ran the UNIX operating system. 25 | While working on standard system guides, I discovered the joy of writing about highly technical topics for a very technical audience. 26 | So, I led an effort to document the kernel interfaces and practices required to write device driver software. 27 | Later, I left Bell Labs to document a POSIX-compliant, real-time UNIX system at MODCOMP. 28 | After that, I joined SCO where I mostly developed content for the device driver development kit. 29 | 30 | Once SCO faded, I spent several years at Trend Micro, researching and developing curriculum to train our support staff about the inner workings of their security software. 31 | I then moved on to other companies, documenting developer tools, platforms, and machine learning technologies. 32 | During those years, I became hooked on open source and the evolving documentation-as-code discipline. I was convinced that these philosophies are foundational to where the industry and the world at large need to go. 33 | From my historical studies, I admire the power of communities and know that innovation thrives when information flows freely. 34 | 35 | == What drew you to Jenkins initially and when did you start using Jenkins? 36 | 37 | CloudBees hired me in 2017 to work on training and documentation for Jenkins and CloudBees products. 38 | I was immediately impressed by the Jenkins community that welcomes everyone and works together tirelessly to improve both the software and the community. 39 | 40 | == What problems has Jenkins solved for you or what problems have you solved in/for Jenkins? 41 | 42 | Jenkins was an established project with a significant body of documentation when I started. 43 | Independent training organizations were offering classes that helped users navigate the information. 44 | I worked with these trainers, software engineers, and others to put together standard classes that everyone could share and enhance. 45 | As these efforts highlighted shortcomings in the documentation, we enhanced the documentation. 46 | One particularly interesting project was putting together a little seminar about how to secure Jenkins; the existing documentation covered the various available security features, but we did not have cohesive information about how to secure one's Jenkins installation. 47 | The webinar was a success and then we used that information to enhance the security documentation. 48 | 49 | == What kept you involved with the Jenkins project after your first usage/contribution? 50 | 51 | The Jenkins community is a paradigm of what an open source community should be! 52 | It is an assembly of extraordinarily bright people who frequently discuss activities that grow and strengthen the community, in addition to improving the software and documentation. 53 | Even when the pressure is on and the hours are long it is always fun! 54 | When I first started with Jenkins, CloudBees staff was responsible for about 80% of the Jenkins contributions, and yet they rigorously ensured that decisions about Jenkins were discussed and implemented with the entire open-source community rather than just inside CloudBees. 55 | 56 | == What sort of contributions have felt most successful/impactful over the years? 57 | 58 | Everything matters! 59 | It is wonderful when a community member creates a new plugin or implements some major feature for the product, but the amalgamation of smaller contributions is at least as important. 60 | People who realize that some documentation needs more information and add it, or correct a syntactical error in the prose. 61 | People testing a new build and notifying the community that everything worked well, or that they had problems. 62 | People who ask questions, people who answer questions, and people who discuss an underlying issue for the question are key components of the continuous improvement of the Jenkins ecosystem. 63 | The richness of Jenkins is the large community that cares about the project and does whatever it can to contribute to making Jenkins successful and impactful. 64 | 65 | == Advice for new developers and new members of the open-source community? 66 | 67 | Get involved! 68 | Join community meetings, look for opportunities to contribute, and meet the people who are supporting Jenkins. 69 | If you follow a procedure in a document and see ways that the information could be more helpful, file a PR with the proposed change or file an issue that details the necessary changes. 70 | If you like to play around with new software, try to install and test a new build and report on your results. -------------------------------------------------------------------------------- /src/pages/contributors/allan-burdajewicz.adoc: -------------------------------------------------------------------------------- 1 | = Allan Burdajewicz 2 | :page-name: Allan Burdajewicz 3 | :page-linkedin: allan-burdajewicz-0122452b 4 | :page-twitter: 5 | :page-github: Dohbedoh 6 | :page-email: 7 | :page-image: avatar/allan-burdajewicz.png 8 | :page-pronouns: 9 | :page-location: Queesland, Australia 10 | :page-firstcommit: 2013 11 | :page-datepublished: 2025-08-28 12 | :page-featured: true 13 | :page-intro: Allan Burdajewicz was originally born in the French countryside and is currently a Software/Systems Engineer located in Queensland, Australia. While he did a lot of development early on in his career, he became curious about areas outside of development. This led to quickly taking part in other aspects of the software development lifecycle (SDLC). Nowadays, he enjoys being involved in the whole lifecycle, mainly in a containerized environment, from tools development, to CI/CD, to deployment automation, and monitoring. When he's not deep in the development cycle, Allan enjoys nature, beaches, and warm, sunny places. This brought him all the way to Queensland, where he is often camping, hiking, and enjoying time off-grid. 14 | 15 | Allan also enjoys spending time with his family, answering the millions of questions his kids ask, sharing his interests with them, and loves watching them grow. To relax, Allan mainly reads and watches various science content about how things work, how things are made, and new technologies, regardless of the industry. He also loves music and concerts, but you will not hear him sing. Only his wife and kids have this privilege, but you can be sure that there is music in his head 100% of the time. Allan also likes various sports, mainly team sports such as soccer, rugby, and volley. He's been playing soccer for many years, but nowadays he mainly just runs or plays a bit of those sports with the kids. 16 | 17 | == What is your background prior to contributing to Jenkins? 18 | 19 | In my first job just out of university, I was working on a large project, which was in its early development stage, with the typical tech stacks (Git/Java/Spring/Oracle). 20 | The original architect had already prepared the tooling and we were using Jenkins for CI and _almost_ CD. 21 | However, we were also automating other things with Jenkins. 22 | We had offices in different cities and each office had a TV with a Jenkins Dashboard in full-screen to monitor our critical jobs. 23 | I did a lot of coding in that project, learned about good practices and optimization, and above all I acquired a lot of knowledge about many tools and rapidly grew beyond the "coding space" to understand more about what's going on around it. 24 | Additionally, I also started to help manage tools, deployments, and integrations. 25 | 26 | == How long have you been using Jenkins? 27 | 28 | I have been using Jenkins since 2012. 29 | I was doing a lot of Java/Spring development when I originally encountered Jenkins, and it was our main CI and general automation tool. 30 | 31 | == What made you choose Jenkins over other projects? 32 | 33 | In the early days, I was a junior engineer so I did not make the initial choice, I had just discovered the tool. 34 | However, it was clear to me that there were not a lot of other options that could match what Jenkins offered. 35 | 36 | == What problems has Jenkins solved for you? 37 | 38 | Back in the day, Jenkins could build in a reproducible environment, rather than our local machine, and also brought us confidence in a branch's stability. 39 | Developers had different operating systems and machines, and some tests that required significant time and resources. 40 | This meant that developers were not always able to run them locally. 41 | The Jenkins server was crucial to guarantee that proposed changes were stable. 42 | Nowadays, Jenkins is a highly scalable and cost-effective CI/CD server, especially when managing ephemeral agents. 43 | Most of the CI/CD we manage is templatized, readable, and the complexity level is low. 44 | 45 | == Is there an aspect of Jenkins that you're particularly interested in? 46 | 47 | I am quite involved in troubleshooting various Jenkins issues and environments. 48 | A particular aspect of Jenkins that I am keen to troubleshoot is scalability. 49 | I enjoy the challenge of reproducing and diagnosing issues that occur only at scale, such as with large queues, large agent fleets, and concurrent builds. 50 | Getting to the root of these problems is incredibly satisfying. 51 | 52 | == What sort of contributions have felt most successful/impactful? 53 | 54 | When we moved to Jetty 10, I fixed the idle timeout for websocket agent connections that was not identified for weeks. 55 | It is a good example of a critical problem that is not simple to find the root cause for, but for which the fix is quite simple once you get it. 56 | I also helped fix the restart mechanism of the TCP Agent listener. 57 | It was broken for a while and started to become a popular problem around the time we moved to JDK 11. 58 | Another one might be the Kubernetes plugin, which can run steps in agent pod containers using the Kubernetes Exec API. 59 | However, that API is not really reliable and transient issues can happen. 60 | This was known for a while and at some point I just helped by implementing a retry mechanism around it. 61 | 62 | I maintain the link:https://plugins.jenkins.io/support-core/[Support Core plugin] and added the ability to download support packages for node, items, and builds. 63 | This helped administrators quite a lot, allowing them to gather information from the UI, rather than connecting to the servers. 64 | I also maintain the link:https://plugins.jenkins.io/mina-sshd-api-common/[Mina SSHD API plugin], which I created to move forward with the deprecation of other libraries, such as Trilead SSH. 65 | Aside from this, I help fix issues here and there when I identify them. 66 | In many cases, I spent enough time troubleshooting an issue that the fix becomes the easy part. 67 | 68 | == Advice for new developers and new members of the open-source community? 69 | 70 | The Jenkins project is quite large, but choosing one area to focus on can help with digesting the history and purpose. 71 | Alternatively, you can start with small bug fixes. 72 | These are most typically found in plugins and can be a feature that you are more familiar with. 73 | Importantly, don't be afraid to open a pull request, as contributions are very welcome. 74 | You may be asked to change something, rework something, or create a test. 75 | That's OK; that's being part of the community of an open source project, and you might just like it eventually. 76 | -------------------------------------------------------------------------------- /src/pages/contributors/herve-le-meur.adoc: -------------------------------------------------------------------------------- 1 | = Hervé Le Meur 2 | :page-name: Hervé Le Meur 3 | :page-linkedin: herve-le-meur 4 | :page-twitter: 5 | :page-github: lemeurherve 6 | :page-email: 7 | :page-image: avatar/herve-le-meur.png 8 | :page-pronouns: He/Him/His 9 | :page-location: Paris, France 10 | :page-firstcommit: 2020 11 | :page-datepublished: 2024-04-10 12 | :page-featured: false 13 | :page-intro: Hervé Le Meur is a site reliability engineer and current member of the Jenkins Infrastructure team. He was introduced to the open-source community via Jenkins X and then moved on to work on Jenkins infrastructure. 14 | 15 | Hervé comes from a more analog background, with his father being a carpenter and his mother being an upholsterer, but got his first real taste for technology with the Amstrad CPC 464 computer at the age of six. 16 | Today, when he's not working on Jenkins tasks, Hervé likes to go for walks outside with his family, catch up on reading, and unwind watching his favorite shows. 17 | 18 | == What is your background prior to contributing to Jenkins? 19 | 20 | After graduating from university, I worked at a small B2B marketing consultancy company for 10 years as a jack of all trades developing the tools we used, but there was no CI/CD nor open source there. 21 | After that, I went into a building information modeling (BIM) software company, starting as a software developer. 22 | Some teams were using Jenkins, but it seemed cumbersome and slow for them at the time. 23 | As I grew into the role of software architect, I was tasked with setting up a new CI/CD based on Jenkins X, which took me several trimesters. 24 | As Jenkins X was fresh from the oven and as I was new to Kubernetes, this was a much more difficult task than anticipated, especially since the passage of Jenkins X to beta, making me redo most of what I put in place several times. 25 | Through this work, I learned a lot about Kubernetes & CI/CD, and in doing so I contributed quite a lot to Jenkins X. 26 | These were my first contributions to the open-source world. 27 | After being let go from this job, I reached out to link:https://www.jenkins.io/blog/authors/jstrachan/[James Strachan] and link:https://www.jenkins.io/blog/authors/jrawlings/[James Rawlings], who then gave me a link to a job opening from link:https://www.jenkins.io/blog/authors/oleg_nenashev/[Oleg Nenashev] at CloudBees for the role that I am currently in. 28 | 29 | In my head, I was a programmer, not a sysadmin. 30 | So, when link:https://www.jenkins.io/blog/authors/markewaite/[Mark Waite] explained that the last round of interviews would be about networking, this was a bit daunting. 31 | I thought my opportunity would be lost because of this since it felt potentially impossible. 32 | However, when the time for my interview came with Mark, link:https://www.jenkins.io/blog/authors/dduportal/[Damien Duportal], and link:https://www.jenkins.io/blog/authors/olblak/[Olivier Vernin], they asked me how I integrated the CI/CD with Jenkins X instead: that was a fantastic experience. 33 | We were able to have a meaningful discussion that helped me feel more comfortable and made my decision easier. 34 | 15 minutes before my interview, I got a final offer from another company (where Damien & link:https://www.jenkins.io/blog/authors/jmmeessen/[Jean-Marc Meessen] had coincidentally previously worked) and hesitated, but it turned out for the best since I'm still part of the Jenkins project today in what I could call a dream job. 35 | I also had experience moderating an online forum, so the community part of the role was familiar to me. 36 | 37 | == How long have you been using Jenkins? 38 | 39 | I started with Jenkins X but had never touched Jenkins proper. 40 | Apart from sharing the Jenkins name, they have nothing in common. 41 | My preconceptions of Jenkins were negative. 42 | I thought it was an unwieldy, outdated, and complicated Java program. 43 | These impressions manifested from what I had heard from others dealing with it in my previous company. 44 | However, once I started using Jenkins, the comparison was night and day. 45 | My preconception was that it was heavy & slow compared to others. 46 | I was not alone in thinking that Jenkins is not necessarily the best, fastest, or newest project, but I was proven wrong once I started working on the project. 47 | 48 | == Why choose Jenkins over other projects? 49 | 50 | I didn't necessarily choose Jenkins as much as it is the main part of my job. 51 | As soon as I started reviewing what Tyler, Olivier, Damien, and Mark have put in place for Jenkins infrastructure, I realized that Jenkins is much more improved and efficient than I thought. 52 | I also love the fact that we are using Jenkins to develop and distribute Jenkins. 53 | This usage is unique because most open-source tools don't have transitive success. 54 | Jenkins has spent so much time and effort building to work with developer processes and functionalities. 55 | In my eyes, this is one of the main aspects of why Jenkins is successful. 56 | Jenkins has also integrated other tools, such as Terraform and Puppet, but Jenkins remains the orchestrator of these. 57 | Jenkins has also integrated other tools, such as Terraform, Puppet, Kubernetes, and Helmfile amongst others, but Jenkins remains the orchestrator of these. 58 | Working on Jenkins is a crowning achievement for me, since I've always liked creating and working on tools, even if I'm not working on the core of Jenkins. 59 | 60 | == What growth have you seen in Jenkins since joining the project? 61 | 62 | We have been getting more and more instances defined as code. 63 | As a result, we can recreate any of our instances without having to configure settings manually, vastly increasing our resilience. 64 | We are also slowly progressing to the point where ci.jenkins.io is defined and managed as code. 65 | 66 | == Is there an aspect of Jenkins that you're particularly passionate about? 67 | 68 | Right now, I'm having fun refactoring the build process of the official Docker images for Jenkins controllers and agents. 69 | I also like working on the contributor side because it's like a puzzle, and knowing what I need to get to and where I'm starting from makes it much more enjoyable. 70 | 71 | == What sort of contributions have felt the most successful or impactful? 72 | 73 | link:https://www.jenkins.io/blog/authors/basil/[Basil Crow] proposed an interesting idea to use SQLite instead of a file system. 74 | The switch to JDK 17 has been very successful, and with the availability of JDK 21, Jenkins is running on newer platforms and keeping up with progress to stay current. 75 | As we like to keep the Jenkins infrastructure on the edge (such as always running the last Jenkins Weekly), the next step is introducing JDK22. 76 | Plugin health score identification has been great for visualizing the overall plugin ecosystem health. 77 | 78 | == Advice for new developers and new members of the open-source community 79 | One of the first things I was warned about was the vastness of the project and was instructed to choose one thing to focus on at first. 80 | Don't hesitate to try it out; open source means that it is open to all. 81 | Don't be afraid to open a pull request; it does not need to be perfect. 82 | You might end up liking it and continue to submit contributions! 83 | -------------------------------------------------------------------------------- /src/pages/contributors/adrien-lecharpentier.adoc: -------------------------------------------------------------------------------- 1 | = Adrien Lecharpentier 2 | :page-name: Adrien Lecharpentier 3 | :page-linkedin: 4 | :page-twitter: 5 | :page-github: alecharp 6 | :page-email: 7 | :page-image: avatar/adrien-lecharpentier.jpg 8 | :page-pronouns: He/Him/His 9 | :page-location: Nantes, France 10 | :page-firstcommit: 2009 11 | :page-datepublished: 2024-10-08 12 | :page-featured: false 13 | :page-intro: Adrien is a software engineer currently based in Nantes, France. While originally born in Normandy, Adrien called Brittany and Paris home while working on his education. Thanks to having teachers for parents, Adrien was always encouraged in both mental and physical pursuits, enjoying activities such as football, basketball, Aikido, and handball. After getting his baccalaureate, Adrien studied IT sciences, such as networking and the more physical layers, for two years before diving into IT programming. After getting an additional diploma for these studies, Adrien found an engineering school in Nantes, but soon felt he needed a more hands on way of learning. This led him to find another school in Paris where his time was split between school and on-site work. Being in this structure allowed him to focus more on programming, gain industry exposure, and better understand industry standards. 14 | 15 | While he tried to keep up with physical activities, Paris made it a bit tough. However, it was at this point that he discovered hiking with his partner. It was also during this time that Adrien got into photography. Adrien also started woodworking with his father, using his eye for detail and love for making things to do something more analog. While there is a difference in the medium, his desires to create and problem solve transfer directly over to his hobby. Throughout his life, he has always been tinkering with electronics and that eventually led to 3D printing. Adrien found that 3D printing allows him to discover and try new things when he comes across an interesting project. It also provides him with space to make things that solve problems, even creating some multi-problem-solving tools. Thanks to 3D printing, being able to customize and create solutions for any problem encountered has pushed his creativity and problem-solving skills even further than before. 16 | 17 | == What is your background prior to contributing to Jenkins? 18 | 19 | I received my A level in 2005, my technical certificate diploma in 2007, and my engineering diploma in 2011 while working part time at Alcatel-Lucent. 20 | I was working in the CI team that had just been created shortly before I joined. 21 | The leader of the team asked me to look at Jenkins, then Hudson, to determine if it would fit the needs of the company. 22 | My first plugin for Hudson was created in 2009 and I have been working in Jenkins ever since then. 23 | After I received my diploma, I moved to Zenika where I was in a consultant role, helping with training and specialized in CI/CD. 24 | My consultant work came down to answering the questions “What is the need for that specific customer?” and “What is the cost of getting there?”. 25 | In 2014, I joined CloudBees as a support engineer for three years before moving on to engineering. 26 | It's surreal to be in the field and using Jenkins for so long without being bored. 27 | CI has changed from what it was then to what it is now. 28 | Before, CI was “Is it compiling?” compared to now where pull requests are being created and merged regularly. 29 | 30 | == How long have you been using Jenkins? 31 | 32 | I have been using Jenkins since 2009. 33 | 34 | == Why choose Jenkins over other projects? 35 | 36 | I didn't choose Jenkins as much as it was a mutual decision between myself & Jenkins. 37 | Previously, the company I was at was consuming open source as opposed to contributing to it. 38 | I had been looking at Jenkins since it was open source, young, and had a responsive community. 39 | My first time posting in the mailing list, concerning a bug with my plugin, resulted in Kohsuke (Kawaguchi) informing me of the bug and sharing that a release of Jenkins core was pushed later that day with a fix. 40 | If there is a problem, the community around the project is very responsive. 41 | It's also possible to create plugins to match a need. 42 | My experience started when it was just one big project and has evolved along with Jenkins to now, where the plugin ecosystem has exploded with many new ones being introduced. 43 | The kindness and attentiveness of the community was also a big part of my introduction. 44 | 45 | == What problems has Jenkins solved for you? 46 | 47 | I saw Jenkins as a way to move what other teams were doing more quickly into the customers hands. 48 | At Alcatel-Lucent, this meant constantly moving and making sure the team velocity was not reduced by compilation, merging, and organizing everyone's work. 49 | The idea is that something is tedious but not working well enough on its own. 50 | However, other teams were working with CI and it was helping streamline the work. 51 | Reassurance came from seeing what they were doing was still working with how others were operating outside of that team. 52 | Jenkins is a problem-solver for CI issues and keeping things updated, aligned, and working. 53 | Throughout my work with Jenkins, core has always been intimidating, so I have focused more on maintaining and enhancing plugins. 54 | Most of my support engineer experience with CloudBees had to do with bugs in plugins. 55 | Core was rarely the issue brought to our attention, so my work was primarily ensuring that plugins and their code were functioning as expected. 56 | Plugins are fascinating because the ecosystem has expanded greatly and they are so malleable. 57 | You can propose new solutions to a plugin maintainer or suggest new functions and fixes, and if there isn't an exact solution that already exists, you can always create your own plugin to fulfil the need. 58 | 59 | == Is there an aspect of Jenkins that you're particularly passionate about? 60 | 61 | I like to make things easier for others to use, like what the UX team has been doing over the last couple years with modernization and updating the whole experience. 62 | It's not just colors and rounded corners, it's the entire user experience of using Jenkins that feels refreshed and easier to use. 63 | I have deep admiration for what the UX team has provided to the project. 64 | Especially where the number of plugins has expanded, it can be a bit intimidating to find what you need, and the community members working on Jenkins' UX have made great strides to help users navigate the Jenkins plugin ecosystem. 65 | Most of the UX work has also reached other areas of the project, beyond just core and plugins. 66 | 67 | == What sort of contributions have felt the most successful or impactful? 68 | 69 | For my own contributions, I've worked on the Java upgrades (8 → 11 → 17 → 21) and recently, the Spring Security 6 migration. 70 | These upgrades are necessary to ensure that Jenkins is up to date and safeguarded in multiple ways. 71 | The reasoning is that these upgrades are hugely important in making sure that Jenkins continues working in the future and does not get stuck in the past. 72 | While not necessarily visible like the UX improvements, our goal with these migrations is to not have any sort of interruption when it comes to users. 73 | A successful migration means our work happens without users even noticing. 74 | They might need to upgrade their Java version, but that should be the extent of what they run into. 75 | 76 | == Advice for new developers and new members of the open-source community 77 | 78 | Don't be afraid to reach out. 79 | Don't be afraid to get started. 80 | There's no such thing as a small contribution. 81 | We all started from 0 so there's no shame or embarrassment to be had, as most people are still learning and not perfect by any means. 82 | The community is very respectful of everyone and all opinions. 83 | If you have questions, concerns, or an opinion on how something should work, make sure you can back up your thoughts. 84 | Plugins are a good way to get into the community. -------------------------------------------------------------------------------- /src/pages/contributors/shivay-lamba.adoc: -------------------------------------------------------------------------------- 1 | = Shivay Lamba 2 | :page-name: Shivay Lamba 3 | :page-linkedin: 4 | :page-twitter: howdevelop 5 | :page-github: shivaylamba 6 | :page-email: 7 | :page-image: avatar/shivay-lamba.png 8 | :page-pronouns: He/Him/His 9 | :page-location: New Delhi, India 10 | :page-firstcommit: 2018 11 | :page-datepublished: 2024-09-24 12 | :page-featured: false 13 | :page-intro: Shivay Lamba is a software developer that was born and has lived his entire life in New Delhi. While his main focus and passion is directed towards AI and MLOps, he is at home with the entire tech space, engaging with it through multiple endeavors from building robots to writing software. Shivay also participated as a Jenkins mentor during Google Summer of Code 2020 and 2024. Beyond his love for technology, Shivay plays sports like cricket and table tennis, and he recently took up scuba diving. He also enjoys playing the piano and singing, providing a very well-rounded set of interests. 14 | 15 | At college, he initially found it hard to understand the more advanced data structures and algorithm concepts, such as trees and dynamic programming. However, he soon realized that he did not need to be the best at these concepts in order to have an impact. Open-source programming is equally rewarding, and being the most competitive programmer is not needed to land a good role. 16 | 17 | == What is your background prior to contributing to Jenkins? 18 | 19 | I started my tech journey in 2016 with my undergrad degree in computer science. 20 | Before I graduated, I was mainly working on web development with PHP and Node.js. 21 | I didn't have any background in Jenkins or other CI/CD DevOps tools. 22 | In 2018, during my first official software engineering internship at Tech Mahindra, I got to know about Jenkins, while I worked on Apache OFBiz ERP software. 23 | My tech stack included Java, PL/SQL, JavaScript, and FTL. 24 | I used Jenkins and SVN for the first time in 2019 for deployment to production and automated testing, and that's how my journey into open source started. 25 | 26 | I made contributions to TensorFlow and link:https://fossasia.org/[FOSSASIA] before returning to Jenkins for 2020. 27 | During my return, I made contributions to the link:https://plugins.jenkins.io/machine-learning/[Jenkins Machine Learning plugin] as a Google Summer of Code mentor. 28 | I had become interested in machine learning (ML) in 2019 and felt there was a huge gap in the ML ecosystem when it came to deployment. 29 | The ML plugin for Jenkins was a huge step towards automating MLOps, while also showing ML/Data Science communities how DevOps can be integrated in ML. 30 | This is also how my love of DevOps got kick-started. 31 | 32 | == How long have you been using Jenkins? 33 | 34 | I initially started using Jenkins in 2018 as part of my internship and immediately fell in love with the tool because it just made it so easy to be able to build, test, and deploy projects in multiple environments and overall helped reduce the complexity of the software development process. 35 | Later in 2019, when I started to dive deeper into machine learning, I immediately felt a missing link - I have always been a big advocate for research-to-production modeling and there was not necessarily a way to do this easily. 36 | There weren't many tools around that would allow one to easily move code written by machine learning engineers or data scientists into production using Jupyter notebooks. 37 | Then I reached out to the Jenkins community, and I discussed with link:https://www.jenkins.io/blog/2020/08/27/machine-learning-plugin-coding-phase3/#acknowledgement[Marky, Bruno, and Ioannis] and we discussed how we can resolve this issue through Jenkins. 38 | This discussion generated the idea for the link:https://www.jenkins.io/projects/gsoc/2020/projects/machine-learning/[Jenkins ML/Data Science plugin] and it was accepted as a project for the Google Summer of Code 2020 where I was mentoring. 39 | 40 | Apart from that, I was responsible for the deployment of our entire infrastructure as part of my first job out of college and I, of course, chose Jenkins for the development/staging and production environments while scaling up all our infrastructure. 41 | Later in 2024, I have been mentoring the link:https://www.jenkins.io/projects/gsoc/2024/projects/enhancing-an-existing-llm-model-with-domain-specific-jenkins-knowledge/[Enhancing LLM with Jenkins Knowledge project]. 42 | 43 | == Why choose Jenkins over other projects? 44 | 45 | The developer community and the plugin ecosystem richness is what makes Jenkins stand out amongst other projects in the community. 46 | Jenkins has world class contributors and documentation, and a vast plugin ecosystem, which makes it super easy to integrate and apply in a project. 47 | That is what makes Jenkins stand out. 48 | 49 | == What problems has Jenkins solved for you? 50 | 51 | The biggest problem that Jenkins has solved is automating deployments and CI/CD when working in different types of environments. 52 | The ability to automate your builds and testing suite all in one platform is absolutely critical. 53 | Jenkins is indeed the number one tool for CI/CD automation, and it helped me from my first internship tasks in 2018 to managing an entire tech team in my first ever full-time role. 54 | The ability to integrate Jenkins reduces the time required to set up automation. 55 | 56 | In addition, Jenkins has also helped automate the deployment of Jupyter notebooks, the flagship project for Google Summer of Code 2020 with the Jenkins Data Science plugin. 57 | This project shows the capability and extensibility of being able to automate builds and testing for different types of applications. 58 | 59 | == Is there an aspect of Jenkins that you're particularly passionate about? 60 | 61 | I am really passionate about how easy Jenkins makes it for DevOps engineers and engineering teams to make it super scalable for different environments. 62 | The ease of use, great developer experience, and community support, and open-source environment for Jenkins is unmatched, making it the best choice for self-deployment of CI/CD and build automation. 63 | 64 | I am definitely passionate about both the project and the extensive list of integrations supported by Jenkins, which makes it even more valuable. 65 | 66 | == What sort of contributions have felt the most successful or impactful? 67 | 68 | I personally feel that it doesn't really matter whether your contribution is big or small, in terms of lines of code, what matters is how it impacts the ecosystem or the users. 69 | Any contribution that can make an impact is a success. 70 | For example, the ML plugin for Jenkins is a huge stepping stone for the ML community to understand that Jupyter notebooks can be automated. 71 | They are not just for research. 72 | It also helps address misconceptions related to MLOps. 73 | 74 | == Advice for new developers and new members of the open-source community 75 | 76 | My advice for any developer or new members of the open-source community is to always go through the beginner-friendly resources provided around the project. 77 | This includes reading both the contributor guide and the README carefully. 78 | Also, don't feel shy to ask questions in the community. 79 | Communities are built for folks to collaborate with each other. 80 | Just keep one thing in mind, please try to do your own initial research, then ask a question if you are still confused. 81 | Most communities have good starting resources, so do follow those. 82 | 83 | It is all right to acknowledge that one can't be the best at everything. 84 | You don't have to be in competition with everyone. 85 | What worked for me were open-source contributions, because that unlocked an entirely different set of opportunities for me to showcase my skills. 86 | Explore different paths in life and see what works for you. 87 | If you are passionate about something and do it wholeheartedly, then opportunities will definitely come to you. 88 | That's what happened for me, ever since I acknowledged my own limitations and focused on the things I do well. 89 | So explore as much as possible. 90 | -------------------------------------------------------------------------------- /src/pages/contributors/yaroslav-afenkin.adoc: -------------------------------------------------------------------------------- 1 | = Yaroslav Afenkin 2 | :page-name: Yaroslav Afenkin 3 | :page-linkedin: yaroslavafenkin 4 | :page-twitter: 5 | :page-github: yaroslavafenkin 6 | :page-email: 7 | :page-image: avatar/yaroslav-afenkin.jpg 8 | :page-pronouns: He/Him/His 9 | :page-location: Odesa, Ukraine 10 | :page-firstcommit: 2021 11 | :page-datepublished: 2025-03-24 12 | :page-featured: false 13 | :page-intro: Yaroslav Afenkin is a software engineer based in Odesa, Ukraine, and has been involved with the Jenkins project on multiple occasions throughout his career. Whether it was during his first job as a junior engineer, his time working on the Jenkins security team, or his return to contribute to the Jenkins Content Security Policy (CSP) project, Yaroslav has always been intrigued with the abilities of Jenkins. While not necessarily a Jenkins user, his work on securing Jenkins and fixing vulnerabilities has helped the entire community. Thankfully, Yaroslav makes sure to balance his work life with his personal life by finding time to relax and enjoy his free time when he's not deep in the code. 14 | 15 | == What is your background prior to contributing to Jenkins? 16 | 17 | I went to school in Ukraine and it was heavy on English, so I had up to seven hours of English a week. 18 | By the time I finished school, I got to a pretty decent level, which helps a lot in the industry that I'm working in. 19 | I then entered university in Ukraine to study Computer Science, but after studying here for two years, it wasn't as good as I had hoped. 20 | I decided to move to Warsaw, Poland and continued my studies there. 21 | With one year left to study, I found a job working as a junior software engineer. 22 | Initially, I was hired to work on some insurance stuff. 23 | They were using software called Guidewire. 24 | However, I was lucky enough that there was no Guidewire project for me. 25 | 26 | As a result, I landed on a project with a heavy Java stack, using Java 8, Spring, Hibernate on the back end, and AngularJS and Angular on the front end. 27 | That really helped a lot and I feel like I won a lottery there because that's how I developed most of my Java and JavaScript skills. 28 | I worked there for three years while I finished university, staying in Poland. 29 | Then Covid happened and for personal reasons, I eventually moved back to Ukraine. 30 | I had to leave my job since they did not offer remote work, but I found a new one at CloudBees. 31 | Initially there was this little project where we were cleaning up some security technical debt with some other folks. 32 | As my project was coming to an end, we were asked where we wanted to go, and I had a preference for security. 33 | This is how I ended up in the Jenkins security team at CloudBees, and that's how I gained most of the Jenkins skills that I have right now. 34 | This also helped a lot when working on the recent link:https://www.jenkins.io/blog/2025/01/16/jenkins-csp-project-update/[CSP project in Jenkins]. 35 | 36 | == How long have you been working on Jenkins? 37 | 38 | It's probably worth mentioning that I used Jenkins in my first job. 39 | That was my initial exposure to Jenkins, despite not using it too heavily. 40 | We only had CI at the time, as we were using Gerrit for code review and Jenkins for builds. 41 | I was just a basic user checking build logs and performing more basic actions. 42 | But there were some micro projects where I had to do performance tests for software that we were building. 43 | I used Jenkins for it, despite not being sure it was optimal for my purposes, but that's one notable thing I can think of. 44 | 45 | Other than that, I wasn't necessarily a heavy user of Jenkins. 46 | Most of my work has been done on Jenkins instead of through Jenkins. 47 | It's not like I need Jenkins during my daily life outside of the job. 48 | I'm trying to keep the balance between spending time in front of a PC doing work stuff and my spare time. 49 | So, I'm just trying to relax a bit in my spare time and keep work at work. 50 | 51 | == Was there any other aspect of Jenkins that interested you when you got started or that you found more useful? 52 | 53 | At the time, there was one colleague who is also a member of the community, Damian Szczepanik. 54 | He sat right behind me and he was our de-facto admin since he was doing most of the admin tasks for our project. 55 | I was interested, but I wasn't necessarily "allowed" to enter that area because I had other things to work on. 56 | It was still attractive to me, but I didn't get to work on Jenkins while I was working at my original company. 57 | However, when I was changing jobs I had an opportunity to interview with someone who explained that the work would be for Jenkins, and specifically security, which instantly sold me on the job. 58 | I was never a big fan of enterprise businesses like insurance or banking, it's always been a little boring for me. 59 | I'm more a fan of heavier technical things like Jenkins and other more developer-focused work. 60 | So, it was easy for me to get excited when I heard they're hiring for a Jenkins project. 61 | 62 | == What problems have you worked on in Jenkins? 63 | 64 | The CSP work was fairly narrow as it was focused on enhancing the Jenkins CSP. 65 | There are several archetypes of issues and I was familiar with how you approach a certain problem or how you solve it because we had some initiatives when I was originally working in the Jenkins security team. 66 | We were working on CSP stuff in Jenkins core, so we weren't touching plugins, but most of the issues that I have faced during the CSP project I was already familiar with how to approach them. 67 | When it comes to the Jenkins security team, the work that I was doing was part of the overall responsibilities of the team such as code review, fixing vulnerabilities in Jenkins core, and security advisories just to name a few. 68 | 69 | In regards to the challenges of the CSP project, it was not due to Jenkins or CSP, but JavaScript being JavaScript. 70 | There were some subtle, but very technical JavaScript caveats that needed to be addressed. 71 | Those problems were partially due to users not willing to leverage what Jenkins already has. 72 | For instance, it has the Jelly engine for views and people were trying to add JavaScript frameworks, such as React or Angular to that. 73 | The custom implementations contributed to some issues in their own way because those implementations were not fitting into the archetypes of issues that we were already familiar with and knew how to solve. 74 | So we had to figure out the framework first and see if there was a mechanism that allows you to enforce CSP. 75 | Then we had to try using it and depending on how old the technology was, the mechanism could exist or not exist. 76 | From there, you had to cook up something different to come up with a solution. 77 | 78 | == Is there any part of Jenkins that you've found especially interesting? 79 | 80 | I think extensibility is the real power of Jenkins. 81 | If something doesn't exist, you can either look at the plugin ecosystem or in the worst case, you can just write it yourself. 82 | It's great because you can basically use Jenkins for whatever task you can come up with. 83 | Taking it one step further, if you want to automate the task you can most likely do it in Jenkins if you spend enough time. 84 | For instance, performance tests are not a very regular use case as far as I'm concerned, as most people use it to build software or publish, but in my first job we implemented performance tests. 85 | This is an example of a quirky way to use Jenkins. 86 | 87 | While fixing CSP issues, we would also fix any core vulnerabilities that are out there. 88 | For example, some vulnerabilities are caused by incorrect usage of JavaScript (due to developers cutting corners or being unaware). 89 | This could be something like usage of `eval` or using inline scripts on HTML elements. 90 | These incorrect usages create XSS sinks if unsanitized user input is supplied to them. 91 | If CSP is set with a policy that is strict enough, those vulnerabilities wouldn't exist because the scripts wouldn't run. 92 | 93 | == Any advice for new developers or new users looking to join the open-source community or Jenkins project? 94 | 95 | Read a lot of code and try to really understand what the code is doing. 96 | If you want to add some functionality or change an existing functionality, just read a lot. 97 | Really try to understand how it may impact extensibility. 98 | This understanding is crucial when contributing to a project because there is lots of history behind the code. 99 | -------------------------------------------------------------------------------- /src/pages/contributors/devin-nusbaum.adoc: -------------------------------------------------------------------------------- 1 | = Devin Nusbaum 2 | :page-name: Devin Nusbaum 3 | :page-linkedin: 4 | :page-twitter: 5 | :page-github: dwnusbaum 6 | :page-email: 7 | :page-image: avatar/devin-nusbaum.jpeg 8 | :page-pronouns: He/Him/His 9 | :page-location: Raleigh, North Carolina, USA 10 | :page-firstcommit: 2017 11 | :page-datepublished: 2024-10-22 12 | :page-featured: false 13 | :page-intro: Devin is a software engineer based in Raleigh, North Carolina. After graduating from Chapel Hill, Devin spent time at a finance company where he first encountered Jenkins. In 2017, after relocating to Raleigh and joining CloudBees, he contributed to the Jenkins project over the last seven years, starting with smaller bug fixes and eventually moving on to working on Jenkins core. He's especially connected to the Pipeline functionality, dedicating time to refining and enhancing the experience. When he's not deep in Jenkins core, Devin has taken up woodworking and making things with his hands. The results of his work include intricate cutting boards that reflect the time and effort needed to create such lovely pieces. 14 | 15 | == What is your background prior to contributing to Jenkins? 16 | 17 | I went to school at Chapel Hill in North Carolina and after graduating, my first job was at a finance company. 18 | During my time there, we were working on electronic trading and I was on their platform for about a year. 19 | The company was using ANT and everything had to be done manually. 20 | Creating and running the builds was fully manual, so if you wanted to publish something, you had to do it yourself. 21 | While I was there, they wanted to switch over to CI to try and ease the workflow people were stuck in. 22 | They asked me to set up Jenkins and move everything over from ANT to Maven. 23 | At the time, I thought Maven was nice and easy to use but wasn't as familiar with Jenkins. 24 | 25 | == How long have you been using Jenkins? 26 | 27 | My first experience with Jenkins was at the finance company back in 2016, before I joined CloudBees. 28 | My boss asked me to set up Jenkins so that the team could move towards CI for their build processes. 29 | It can be tricky when getting started with CI/CD because with something like Jenkins, there are so many options to work with, but not necessarily a singular path to follow. 30 | Then, when I was hired by CloudBees, my work was dedicated to Jenkins and I've been working on it ever since. 31 | 32 | == Why choose Jenkins over other projects? 33 | 34 | While at the finance company, I was basically told to implement Jenkins and Maven so it was more of a directive and less of a choice in that regard. 35 | Since joining CloudBees, I think Jenkins has places where it shines but can be overwhelming with how many options it has. 36 | However, I think that if you need the flexibility, if you need the power Jenkins can provide, it certainly offers you all of that. 37 | I think the open-source aspect of it, certainly is interesting in this day and age, compared to most CI/CD platforms that are not really open source, particularly not the ones that are in widespread, real-world usage. 38 | I think as a code base it's interesting since there are not very many CI/CD projects of this age. 39 | Certainly, there are a lot of unusual things in Jenkins due to this age and the time period it was created, but there's still a lot you can learn from and find out about. 40 | 41 | == What problems has Jenkins solved for you? 42 | 43 | Although I work on Jenkins a lot, my usage of it is pretty light. 44 | I rarely configure Jenkins for "proper" usage. 45 | I basically use it at the most basic developer level of looking at build logs. 46 | My usage is focused on debugging problems with Jenkins and that is a very unusual use case compared to most people. 47 | But for me, I'm totally happy to work on an open-source project because Jenkins has a huge user base. 48 | I find it very validating to be able to make changes and fix things that affect tons of people. 49 | 50 | There's not a lot of things you can work on where you have that kind of widespread impact. 51 | So, if I fix a bug in pipeline, I know that this is going to potentially help hundreds of thousands of people. 52 | I find that's one of the things most satisfying about working on Jenkins. 53 | It feels like you really can make a difference for people. 54 | I know if we've actually fixed an issue for tons and tons and tons of people, that's going to make Jenkins better overall. 55 | It's nice to be able to make changes that have a real impact, to actually work on stuff where it feels like we're doing something that actually helps people and improves the situation. 56 | 57 | == Is there an aspect of Jenkins that you're particularly interested in? 58 | 59 | One of the parts I am interested in is definitely the Pipeline engine. 60 | It's very complicated since there are important features for some users, but not everyone. 61 | For instance, one of the core goals for Pipeline is to allow builds to resume from where they left off after a restart of Jenkins. 62 | For each person who finds value in this, there are a lot of other people who don't even worry about this. 63 | Regardless of the value for any given user, a lot of work has gone into Pipelines to make that possible. 64 | 65 | The pipeline engine, in general, is certainly very interesting to work on. 66 | The level of things you have to consider when you make changes is very high because any minor change has the potential to break something. 67 | You can fix things for a lot of people, but you can also break things for a lot of people. 68 | We consider changes to Pipeline and other parts of Jenkins very carefully and try our best to avoid issues. 69 | For things that I personally think are interesting, I would say the pipeline engine and the sandboxing engine, even though I wasn't there for their initial design. 70 | 71 | == What sort of contributions have felt the most successful or impactful? 72 | 73 | With the nature of what I do, it's a lot of very targeted fixes. 74 | There are certainly a lot of fixes with Pipeline issues that I think are great changes that allowed us to fix things for a lot of people. 75 | For example, people over the years report builds hanging for lots of reasons. 76 | This year alone, we probably found three novel ways that builds could be hanging. 77 | Over the culmination of many years and many fixes like this, I think we've made a lot of improvements for this kind of issue. 78 | For me, not only is that satisfying, but it also improves the robustness of Jenkins overall. 79 | 80 | There are a couple of very particular security fixes I chose to fix in a certain way. 81 | Years later, we found other cases where if we hadn't fixed it that specific way, we would have received a new security issue that would need to be fixed again. 82 | However, because we decided on a more generic resolution, it ended up solving issues we weren't even aware of at the time. 83 | There are also a couple of fixes I've done over the years related to deserialization robustness. 84 | Basically, if your configuration XML file is slightly messed up, can we still make things mostly work? 85 | We've implemented a couple of fixes to improve this kind of situation and that's nice because there's been cases where somebody makes a minor mistake in a plugin that totally breaks other people's instances in really unusual ways. 86 | Fixing these kinds of issues is nice because you can create one change so that people who accidentally make other mistakes don't cause such big problems. 87 | It's like you're limiting the blast radius of other issues. 88 | 89 | == Advice for new developers and new members of the open-source community 90 | 91 | If you want to contribute, I think one of the best things you can do is just read the code. 92 | Understand what it's doing, try and figure out the problems, and try to predict what will happen. 93 | Test your changes to validate your predictions. 94 | Especially in these very old open-source projects, the history of the code base is one of your most valuable tools when you're trying to understand and make a change. 95 | Before you make any changes you may want to ask: 96 | 97 | * Is this safe? 98 | * Can I fix this bug this way? 99 | * How have other people tried to fix this kind of issue before? 100 | * Are there any patterns or similarities? 101 | 102 | I think one of the biggest things working on Jenkins has shown me is the value of your version control history. 103 | Being able to see the details of a change made twelve years ago can help you understand whether something was intentional or not, and can provide much-needed context when working on code that is new to you. 104 | I think for open-source contributors, using your Git version control, seeing what you can find, and reading code are valuable skills. 105 | Even if you look at things in Jenkins and think "Maybe I wouldn't do it architecturally this way today", there's still a lot you can learn about why Jenkins did it that way. 106 | 107 | You can also learn about mistakes that you wouldn't want to make yourself. 108 | It's not very often that you get to look at the open-source code of a big project like Jenkins. 109 | Being able to view the code gives you the ability to look at these really big projects that you probably couldn't have made yourself if you were just getting started. 110 | However, you can see what people who have come before you have done and learned and then use that to jump-start your learning and development. -------------------------------------------------------------------------------- /src/pages/contributors/bruno-verachten.adoc: -------------------------------------------------------------------------------- 1 | = Bruno Verachten 2 | :page-name: Bruno Verachten 3 | :page-linkedin: poddingue 4 | :page-twitter: Poddingue 5 | :page-github: gounthar 6 | :page-email: 7 | :page-image: avatar/bruno-verachten.png 8 | :page-pronouns: He/Him/His 9 | :page-location: Lille, Nord, France 10 | :page-firstcommit: 2022 11 | :page-datepublished: 2024-03-20 12 | :page-featured: false 13 | :page-intro: Bruno is a 50-year-old with the heart of a university freshman, a head full of curiosity, and a clock that's always running too fast. He's a husband to one, father to two, and a man of many interests, from beekeeping to Art Nouveau to permaculture to Linux. He's spent his career in the open-source world, trying to get the industry to embrace the movement. 14 | 15 | It's been a tough road, but he's learned a thing or two along the way, such as how to stay passionate about the things that matter, even when the work gets tedious, and how to recognize when it's time to move on, even when you're leaving behind friends and familiarity. 16 | When the world went remote, he took it as a sign. 17 | Bruno found a new gig where open source isn't just a buzzword; it's the business model, and he's made some new friends along the way despite the distance. 18 | 19 | 20 | == What is your background prior to contributing to Jenkins and outside of Jenkins? 21 | 22 | My journey started with A.I. when it was more science fiction than reality. 23 | However, I quickly found my calling in the Java world, where I spent most of my time coding, teaching, and speaking at conferences. 24 | In 2016, I decided to shake things up and dive headfirst into the deep end of CI/CD, DevOps, containerization, and Edge computing. 25 | I hung up my Java hat and embraced the brave new world of containerization and open-source software. 26 | 27 | I got my first taste of open source in '93 when we were liberating Windows machines by installing Linux on them; it was like a shot of adrenaline that hooked me in and has yet to release its grip. 28 | I became an open-source advocate, preaching the good word at home, with friends, and at work. 29 | The company I worked for was a bit slow on the uptake but eventually saw the light. 30 | They started using open-source software, even integrating it into their own products. 31 | However, contributing to open-source projects was still a no-go. 32 | It wasn't until my last few years there that they finally loosened the reins. 33 | I went from being an open-source advocate to an open-source contributor. 34 | 35 | My GitHub and GitLab profiles tell the tale: a slow start followed by an accelerating pace. 36 | However, contributing to open-source isn't just about code; it's about being part of a community, engaging in forums, creating issues, chatting on IRC, giving talks, and writing articles. 37 | My first contributions weren't code, but they were just as valuable. 38 | Before joining the Jenkins project, I was a regular on the speaking circuit, talking about everything from Edge computing to the arm ecosystem. 39 | 40 | == How long have you been using Jenkins? 41 | 42 | I first dipped my toes into the murky waters of Jenkins around 2013 or 2014 in my old gig. 43 | You could say I was a bit of a hybrid user, since I was cobbling templates together to help the other poor souls get their web and mobile applications off the ground. 44 | I wasn't a Jenkins admin, and certainly wasn't just an end user. 45 | I spent a lot of time nudging Jenkins administrators to install the latest plugins, keep the existing ones up to snuff, and so on. 46 | 47 | Then, our company decided to hitch its wagon to GitLab Community Edition. 48 | Keeping Jenkins in fighting shape started feeling like swimming upstream in a river of molasses. 49 | So, around 2017, I said goodbye to Jenkins and embraced GitLab. 50 | But, like a moth drawn to a flame, I returned to Jenkins' embrace in 2022 when I decided to part ways with the company. 51 | 52 | == Why choose Jenkins over other projects? 53 | 54 | Ah, there's no place like home and no project quite like Jenkins. 55 | I'm up to my eyeballs in CI/CD, Docker, esoteric architectures, and the whole open-source shebang. 56 | In my humble opinion, no other open-source CI/CD tool can hold a candle to the perks of the Jenkins community. 57 | 58 | It's a free-for-all, with decisions made by the community. 59 | Every decision is a group effort, with the Jenkins project rallying feedback from the community. 60 | The meetings are as open and public as a town square, and every voice carries weight. 61 | That is the essence of open source. 62 | It's not just about having the code base sitting pretty on a public SCM. 63 | The Jenkins project embodies the spirit of open-source, hook, line, and sinker. 64 | 65 | And the cherry on top? 66 | The Jenkins project throws its hat in the ring for the Google Summer of Code, Hacktoberfest, and other events aimed at helping folks spread their wings. 67 | The project invests time in schooling green developers about the ins and outs of open-source and naturally, Jenkins. 68 | 69 | I'm all for this approach, this benevolence, and the overall vibe of the Jenkins community. 70 | It's like a breath of fresh air in a world that's often as stifling as a smoke-filled speakeasy. 71 | 72 | == What problems has Jenkins solved for you? 73 | 74 | I'm not sure we've got the time to wade through the laundry list of problems Jenkins has solved for me, but I'll give it a shot: 75 | 76 | Jenkins has given me the keys to the kingdom when it comes to building and publishing Android applications, all thanks to Docker. 77 | It's like a magic wand, only better. 78 | 79 | Jenkins has let me dust off my old, trusty arm32 machines and put them to work as Jenkins agents. 80 | It's like seeing an old friend again. 81 | 82 | Jenkins has also let me take my shiny, new RISC-V machines out for a spin as Jenkins agents or controllers. 83 | It's like driving a brand-new car straight off the lot. 84 | 85 | Jenkins has even let me create the first-ever cluster of three architectures (arm32, arm64, risc-v). 86 | It's like being the first man on the moon. 87 | 88 | To cut a long story short, no matter the architecture, I can manipulate or contribute to Jenkins to make it dance to my tune. 89 | It's like having a Swiss Army knife in a world of butter knives. 90 | 91 | == Is there an aspect of Jenkins that you're particularly passionate about? 92 | 93 | Platforms, my friends, platforms: 94 | 95 | Whenever I can slap another CPU family onto the ever-growing list of supported ones (especially when Docker is involved), I'm as happy as a clam at high tide. 96 | 97 | The moment a new JDK version hits the streets, I'm chomping at the bit to take it for a spin on different platforms. 98 | We're still duking it out with JDK21, but I've already got one eye on JDK22. 99 | Keep that part under your hat since it's our little secret. 100 | 101 | Is it any wonder I try to keep the Jenkins Platform SIG running like clockwork on a biweekly basis? 102 | I get a kick out of chewing the fat with the community about the latest tweaks to our Docker images, our experiments with the newest JDK, and all that jazz. 103 | 104 | == What sort of contributions have felt the most successful or impactful? 105 | 106 | I'd be inclined to say that link:https://www.jenkins.io/blog/2023/03/10/miniJen-and-RISC-V/[miniJen] was my crowning glory, but that was just a flash in the pan, a few weeks of joy and clicks, not a lasting legacy. 107 | It's like comparing a bonfire on the beach to the steady hum of a boiler in the basement. 108 | Sure, I was tickled pink by the e-press coverage of the first multi-arch Jenkins instance, but let's be honest, it didn't _quite_ revolutionize developer lives. 109 | 110 | I've also done a fair bit of work with link:https://github.com/updatecli/updatecli[updatecli], a handy little tool that keeps your dependencies as fresh as a daisy. 111 | It's not glamorous since it's the kind of work that goes on behind the scenes, but it's been a godsend when it comes to handling CVEs and keeping the project spick and span. 112 | 113 | == Advice for new developers and new members of the open-source community 114 | 115 | It's tempting to draw parallels between an open-source community and the permaculture approach to a new place or project. 116 | It's like comparing apples and oranges but bear with me. 117 | 118 | Observation is the first order of business when dipping your toes into the permaculture of a new place. 119 | Take a moment to study the ecosystem, examine the relationships between the various cogs in the system, and jot down your observations. 120 | 121 | Trust your gut. 122 | Does it feel like you could be a cog in this ecosystem, or does it feel like a square peg in a round hole? 123 | If the project is too disconnected from who you are or you feel like a wallflower at a party, don't beat your head against a brick wall. 124 | There's always another project or place out there. 125 | Sure, you could stick around and revamp the project until it's the spitting image of your dream, but at what cost? 126 | 127 | If the place or project rolls out the welcome mat, take it slow and start small. 128 | Suggest a minor tweak, and lend an ear to the feedback. 129 | Propose another tweak and listen again. 130 | Congratulations, you're now part of an informational feedback loop. 131 | Now rinse and repeat. 132 | 133 | Before you know it, you're a cog in the ecosystem, marveling at the interplay between its various parts. 134 | 135 | I could've given you the abridged version by quoting the now-famous link:https://www.jenkins.io/blog/authors/jmmeessen/[Jean-Marc Meessen]: "Build your Jenkins muscles." 136 | Take part in Hacktoberfest, maybe even the Google Summer of Code, but start small, flex your muscles, and you'll be a contributor before you know it. 137 | 138 | What is the moral of my story? 139 | People matter. 140 | Whether you're doing mind-numbing work or groundbreaking projects, people make all the difference. 141 | Surround yourself with those who lift you up, not drag you down. 142 | Remember, there's always something new to learn or discover. 143 | So keep that curiosity alive, keep that passion burning, and maybe you'll end up with a story like mine. -------------------------------------------------------------------------------- /src/templates/contributor-details.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { graphql, Link } from 'gatsby'; 3 | import { Box, Stack, Typography, useTheme } from '@mui/material'; 4 | import LinkedInIcon from '@mui/icons-material/LinkedIn'; 5 | import GitHubIcon from '@mui/icons-material/GitHub'; 6 | import TwitterIcon from '@mui/icons-material/Twitter'; 7 | import AlternateEmailIcon from '@mui/icons-material/AlternateEmail'; 8 | import ArrowBackIcon from '@mui/icons-material/ArrowBack'; 9 | import '../styles/contributor-details.css'; 10 | import useMediaQuery from '@mui/material/useMediaQuery'; 11 | import { Helmet } from 'react-helmet'; 12 | import dayjs from 'dayjs'; 13 | 14 | function ContributorDetails(props) { 15 | const theme = useTheme(); 16 | const isDesktop = useMediaQuery(theme.breakpoints.up('lg')); 17 | const isTablet = useMediaQuery(theme.breakpoints.between('lg', 'sm')); 18 | const isMobile = useMediaQuery(theme.breakpoints.down('sm')); 19 | const title = 20 | props.data.asciidoc.pageAttributes.name + 21 | ' - Jenkins Contributor Spotlight'; 22 | 23 | return ( 24 | <> 25 | 26 | 27 | {title} 28 | 29 | 35 | 36 | 37 | 45 | 49 | 55 | 56 | 57 | 71 | 72 | Contributor avatar 82 | 83 | 84 | 93 | 94 | 95 | 96 | Back to Spotlight 97 | 98 | 99 | 100 | 105 | Contributor Spotlight 106 | 107 | 108 | 109 | 115 | {props.data.asciidoc.document.title} 116 | 117 | 122 | {props.data.asciidoc.pageAttributes.pronouns ?? 123 | 'They/them'} 124 | 125 | 126 | 127 | 128 | {props.data.asciidoc.pageAttributes.location ?? 129 | 'World'} 130 | 131 | {props.data.asciidoc.pageAttributes.firstcommit && props.data.asciidoc.pageAttributes.firstcommit !== 'null' && props.data.asciidoc.pageAttributes.firstcommit !== '' && ( 132 | 133 | {'First Commit: ' + props.data.asciidoc.pageAttributes.firstcommit} 134 | 135 | )} 136 | 137 | 138 | 139 | {'Date Published: ' + 140 | props.data.asciidoc.pageAttributes 141 | .datepublished} 142 | 143 | 144 | 151 | {props.data.asciidoc.pageAttributes.linkedin !== '' && ( 152 | 155 | 156 | 157 | )} 158 | {props.data.asciidoc.pageAttributes.twitter !== '' && ( 159 | 162 | 163 | 164 | )} 165 | {props.data.asciidoc.pageAttributes.github !== '' && ( 166 | 169 | 170 | 171 | )} 172 | {props.data.asciidoc.pageAttributes.email !== '' && ( 173 | 176 | 177 | 178 | )} 179 | 180 | 181 | 182 | {props.data.asciidoc.pageAttributes.intro} 183 | 184 | 185 | 190 | 191 | 192 | 193 | ); 194 | } 195 | 196 | export default ContributorDetails; 197 | 198 | export const pageQuery = graphql` 199 | query ($id: String!) { 200 | asciidoc(id: { eq: $id }) { 201 | html 202 | document { 203 | title 204 | subtitle 205 | main 206 | } 207 | pageAttributes { 208 | datepublished 209 | name 210 | pronouns 211 | location 212 | firstcommit 213 | linkedin 214 | twitter 215 | github 216 | email 217 | image 218 | featured 219 | intro 220 | } 221 | } 222 | } 223 | `; 224 | -------------------------------------------------------------------------------- /src/pages/contributors/jesse-glick.adoc: -------------------------------------------------------------------------------- 1 | = Jesse Glick 2 | :page-name: Jesse Glick 3 | :page-linkedin: 4 | :page-twitter: 5 | :page-github: jglick 6 | :page-email: 7 | :page-image: avatar/jesse-glick.jpeg 8 | :page-pronouns: 9 | :page-location: Raleigh, North Carolina, USA 10 | :page-firstcommit: 2009 11 | :page-datepublished: 2024-11-05 12 | :page-featured: false 13 | :page-intro: Jesse Glick is a software engineer, currently residing near Raleigh, North Carolina, and has been involved with the Jenkins project for over a decade. Prior to contributing to Jenkins, Jesse worked as an engineer at Sun Microsystems. After incorporating Jenkins into his work at Sun, albeit in a small way, there wasn't much more to do with the project. However, that all changed when Kohsuke reached out to Jesse to find out if he would be interested in working on Jenkins full-time. Since joining CloudBees in 2012, Jesse has been an integral part of Pipeline development, and incorporating many functions that are now fundamental to current Pipeline operation. Jesse works constantly on improving the Pipeline experience, and shares his insights on how to improve not only the Jenkins project but the open-source workflow as a whole. 14 | 15 | == What is your background prior to contributing to Jenkins? 16 | 17 | I worked at Sun Microsystems for quite a long time on the NetBeans IDE. 18 | We had some CI processes, such as Cruise Control, as part of that. 19 | While there, I heard about Jenkins (then Hudson) in its infancy. 20 | I knew of Kohsuke and his work on Hudson and thought it might be something we could start using. 21 | At the time, we had been using CVS for version control, which Hudson had incorporated to some degree. 22 | 23 | We migrated from CVS to Mercurial SCM, which I also wound up working on in Hudson. 24 | It was just enough to get the features we needed for our usage patterns and we didn't pay more attention to it beyond that. 25 | I had also done some work on the tool system where you can have tool installations and automatic downloads. 26 | That was mostly driven by Andrew Bayer, another long-time Jenkins contributor. 27 | After the Jenkins fork was created, Kohsuke contacted me and asked if I wanted to come join him at the company where he was working on Jenkins. 28 | This was in 2012 when I joined CloudBees, and I have been focused on Jenkins ever since. 29 | 30 | == How long have you been using Jenkins? 31 | 32 | I've been using Jenkins since the late 2000's, back when it was still under the Hudson name. 33 | When I joined CloudBees, that's when I started to work on Jenkins in earnest. 34 | 35 | == What have you worked on in Jenkins? 36 | 37 | I've spent the most time on Pipeline, working on it since the initial prototypes and testing, all the way through the first official supported version to today. 38 | Koshuke and I worked directly together on core Pipeline functionality, including an intense collaboration spanning several months to make what we would now call basic functions of Scripted Pipeline. 39 | This includes Groovy syntax and steps like `node`, an earlier version of `stage`, and `input`. 40 | Until that point, there had been a long-standing request to make jobs friendlier to define as code. 41 | One of our goals was to allow people to express more complicated behaviors than what they could achieve by chaining freestyle jobs together. 42 | Part of this process was making it more simplified and straightforward for users to input and map the process. 43 | 44 | At the time, it was challenging for users to ensure their job was configured properly without having to constantly backtrack. 45 | We wanted something that looked more like a program, that a user could copy and paste and have it look legible. 46 | Instead of having a bunch of freestyle projects at the base of all this, we wanted to be able to do the entire thing all in one script. 47 | The other challenge was if the process was running for hours, you couldn't turn the controller off. 48 | Much of the work was arranging it so the program would keep running over controller restarts, which became the biggest technical hurdle. 49 | Eventually, I worked with Steven Connolly to create Multibranch Pipeline and Pipeline as code. 50 | This helped ensure our ultimate goal of keeping all these things within the same "package". 51 | 52 | Most recently, I've been working on the high availability system, and while it is a CloudBees proprietary feature, it has critical pieces that are rooted in open source such as the Pipeline continuing to run after controller restarts. 53 | Even now, there are challenges in keeping things running, working around limitations with the architecture, and dealing with isolation between the components. 54 | A lot of time is spent on these challenges, along with making sure tests keep running and making sure it's possible to do routine updates. 55 | 56 | == Why choose Jenkins over other projects? 57 | 58 | There weren't a lot of options at the time, with Cruise Control being the only other alternative. 59 | It worked and was very extensible. 60 | Jenkins either did what we needed it to or we could add plugins that would perform the necessary functions. 61 | After becoming familiar with the system, extending Jenkins further was fairly straightforward. 62 | For instance, we wanted to generate a historical diff for quick reference that anyone could use. 63 | This wasn't possible inherently with Jenkins, but we were able to create a plugin that completed this particular task. 64 | Jenkins' versatility has only expanded since then, proving to be one of its greatest strengths. 65 | 66 | == What problems have you solved in Jenkins? 67 | 68 | I'm always looking for opportunities to simplify some parts of the architecture where possible. 69 | One project I worked on was the re-design of the Jenkins CLI. 70 | At the time, it was very troublesome from a security perspective and we would have to issue emergency advisories for something like the controller sending back something malicious. 71 | The project goal was to rip out all of the problematic functionality and turn it into a dumb client. 72 | It could send a command and get back a stream of text, and the protocol was simplified so that it couldn't do anything more than these basic functions. 73 | However, this also meant tracking down every plugin that might interact with the CLI in this way and either updating code as needed or deprecating the function so that this would not persist. 74 | 75 | I also did some work on pluggable storage changes, mainly the link:https://plugins.jenkins.io/artifact-manager-s3/[Artifact Manager on S3] plugin, to help externalize the storage of artifacts and stashes. 76 | The plugin ecosystem also forces you to work in particular ways, such as keeping track of what plugins might be affected by a change, or determining how a plugin might interact with various functions or other plugins. 77 | It also pushes us to track down plugin maintainers for assistance with changes or updates, to ensure things are not broken by Jenkins core updates. 78 | 79 | == Is there an aspect of Jenkins that you're particularly interested in? 80 | 81 | A lot of my work has been done on Pipeline so I am partial to that. 82 | There have been several requests or bug reports from users that have also driven the work we do within Pipeline and Jenkins as a whole. 83 | These requests also help drive architectural changes, despite the challenges they can present. 84 | Such requests also help find and deal with technical debt. 85 | 86 | == What contributions have felt the most successful or impactful? 87 | 88 | I was eager to file one of the first substantive link:https://github.com/jenkinsci/jep/tree/master/jep[JEPs]: JEP-200. 89 | The goal of this JEP was to greatly reduce the surface area of Jenkins threatened by deserialization “gadgets”. 90 | The work planned was in the same spirit as the Jenkins CLI simplification, which predated the JEP system. 91 | Another notable feature was JEP-222, allowing WebSocket to be used to connect agents to the controller. 92 | This was inspired by the trickiness of setting up “level 4” network proxies, a common hurdle for CloudBees CI customers, especially in Kubernetes. 93 | JEP-227 was a very tedious, yet long overdue, project to update to the (then) current Spring Security release across several major versions. 94 | Preventing almost all user-visible regressions required a lot of refactoring in Jenkins core and a lot of plugin updates. 95 | It is great to see that the Jenkins project has gotten much more proactive in updating dependencies since those days. 96 | 97 | At the infrastructure level, JEP-305 made it possible to prototype changes spanning multiple plugins, without sacrificing CI coverage, despite the lack of a “monorepo” for Jenkins development. 98 | More recently, JEP-229 built on that system to make it possible to publish plugin releases automatically, without requiring maintainers to keep Artifactory credentials on their laptops. 99 | This had been a longstanding source of frustrating mistakes and a security risk. 100 | Both changes were inspired especially by work on Pipeline-related plugins, which form a loose coalition without a fixed boundary: I wanted it to be as simple as possible to develop, test, and publish changes rapidly. 101 | 102 | == Advice for new developers and new members of the open-source community 103 | 104 | Don't expect that something you do is automatically going to be accepted or even considered. 105 | Know the project and the people involved in the project so that you can build rapport. 106 | Maintainers are more inclined to spend time and mental energy when they are aware of what you are trying to do and what your contribution might involve. 107 | Pull requests can present a good idea from a quick read of the description, but that does not account for what work might be necessary to implement the work suggested. 108 | The work needed to understand its implications and even review it can sometimes take half a day depending on the complexity and reach of the pull request. 109 | There is nothing wrong with this, it's just the reality of taking responsibility for the work. 110 | 111 | The most valuable thing to include in many cases is a short, clear test for a problem or potential change. 112 | This provides maintainers with an accessible example of something that may need fixing or updating. 113 | Providing a clear example of the issue at hand also makes it easier for a maintainer to accept that it would be useful or at the very least agree that this change would be a good thing. 114 | In addition to a visual representation, try to keep your description and steps to reproduce as focused as possible. 115 | Unnecessary details that distract from the main focus of a pull request reduce the clarity that may be needed for faster adaptation. 116 | This also helps when the proposed work may be a bit outside of the maintainers' expertise. 117 | There is a lot of work that gets submitted to Jenkins, but if there is a gap in knowledge between the submitter and maintainer, it may take additional time for someone to pick up and review the pull request. -------------------------------------------------------------------------------- /src/pages/contributors/vincent-latombe.adoc: -------------------------------------------------------------------------------- 1 | = Vincent Latombe 2 | :page-name: Vincent Latombe 3 | :page-linkedin: 4 | :page-twitter: 5 | :page-github: vlatombe 6 | :page-email: 7 | :page-image: avatar/vincent-latombe.jpg 8 | :page-pronouns: He/Him/His 9 | :page-location: Villefranche sur Saone, France 10 | :page-firstcommit: 2011 11 | :page-datepublished: 2024-11-19 12 | :page-featured: false 13 | :page-intro: Vincent Latombe is a software engineer and long-standing Jenkins contributor who has worked on many areas since his first introduction. From plugins, to Jenkins core, to test parallelization, Vincent has been part of several improvements and new features over the last decade. He has held an interest in computers and technology since childhood, fostered by his parents encouragement. They like to say that Vincent broke his first keyboard at 18 months old, but Vincent maintains that he's never broken a keyboard in his life. His interest in programming languages started with some Commodore practice, but there was a lack of use cases to apply what he was learning. 14 | 15 | Vincent graduated from school and found his footing through roles in engineering and developer relations, where he eventually got connected with other Jenkins contributors and even Kohsuke Kawaguchi himself. Vincent has worn many hats when it comes to Jenkins and continues to find new ways to contribute to and enhance the project. When he's not working on HA, Vincent likes to balance his tech work with getting outside and being active in different ways. He's played badminton for half his life and enjoys biking around with his two children. He's also been passing on his love of computers to his children, hoping to foster the same sense of creativity that he still possesses. 16 | 17 | == What is your background prior to contributing to Jenkins? 18 | 19 | I graduated high school in 2001, followed by preparatory school in Paris. 20 | After receiving the marks needed, I went to Ensimag, an engineering school in Grenoble, where I studied telecommunications and software engineering. 21 | For my final year, I studied in Sweden for eight months, then returned and completed an internship for my masters degree. 22 | After getting my degree, I was hired by Amadeus and worked for them for eight years. 23 | Initially, I worked in a UI team that was embracing the beginning of JS frameworks (Yahoo UI), but after two years, I switched to a transversal team that dealt with tooling and builds. 24 | I was very fond of tooling and figuring out ways to make people more productive. 25 | 26 | In 2010, during the early stages of CI implementation, the company had some Cruise Control instances deployed. 27 | Then we heard about a product called Hudson that was open source. 28 | It had a nice web interface where you could edit your projects using the UI directly. 29 | When we started with Hudson, I started by picking one server, deploying a project with a branch and seeing what we could do with it quickly. 30 | The SCM we were using at the time was ClearCase from IBM, which was designed to work within an IBM environment. 31 | At the time, Hudson had a ClearCase plugin maintained by Andrew Bayer. 32 | When I started using Hudson, I began discovering some problems with my environment. 33 | 34 | I started to contribute fixes, and then after a while, we grew through a deployment. 35 | We started with building just the main branch of one project, then multiple projects, then all projects. 36 | This was a game changer, especially in an environment where integration phases were a real challenge and people delivering features as quickly as they could. 37 | These would result in conflicts that were taking days, if not weeks to resolve, but getting a point of reference and tracking stabilization efforts were key. 38 | Getting high-performance hardware was also a challenge back then since developers would take hours just to compile projects locally. 39 | CPUs were two cores and magnetic disks, with no efficient way to parallelize. 40 | My development with Jenkins grew organically over the years and that's how I got involved with the Jenkins project. 41 | Eventually, Andrew changed companies and stopped maintaining ClearCase (to start using Git), leaving the ClearCase plugin up for adoption. 42 | I adopted it and started fixing it for my use case and to improve it in general. 43 | I also started to contribute some bug fixes to Jenkins core whenever it was relevant to my use cases. 44 | I got some PRs reviewed by Kohsuke directly, even though we ended up rewriting half of what I was contributing. 45 | This was because I didn't know how to write things properly, at least in this ecosystem, and that's how I became accustomed to some of the idioms and ways of working in Jenkins. 46 | 47 | Eventually, I had moved to a developer advocacy role and I was not looking into the CI infrastructure anymore. 48 | Even though we started only with CI, we grew to implement code quality, along with running Sonar. 49 | Through all of the improvements, the instance became incredibly useful. 50 | While in the developers advocacy role, one of the goals at the time was to reorganize the many product silos. 51 | I was focused on meeting everyone and understanding how each of them was working and why they were working that way. 52 | Then we would try to come up with a unified approach that would work for most people. 53 | Eventually, they reorganized everything and put a transversal team at the top so that they could build some common practices across the whole organization, instead of having different styles. 54 | When I left Amadeus, I think we were up to maybe a hundred executors. 55 | We had around a dozen big machines and each machine had ten executors since we were not yet using virtualization. 56 | It was a pretty big instance with lots of builds and around 600 people using it. 57 | 58 | In 2014, I attended a Jenkins community event at CloudBees' office in Brussels, and I went to FOSDEM. 59 | That's when I met Kohsuke for the first time and other Jenkins contributors as well. 60 | We were in the same situation; contributing to Jenkins from our separate companies. 61 | Later on, when CloudBees did some fundraising, they started to hire some of the community members. 62 | This is when Kohsuke reached out to me to offer a position at Cloudbees, which I eventually accepted. 63 | 64 | == How long have you been using Jenkins? 65 | 66 | I started using Jenkins in the late 2000's when it was still under the Hudson name. 67 | I eventually started contributing to Jenkins core around 2010 or 2011, along with submitting fixes to the ClearCase plugin. 68 | Now, I've been working on Jenkins for the last ten years and have seen it grow in many ways since my initial usage. 69 | 70 | == Why choose Jenkins over other projects? 71 | 72 | As far as Jenkins is concerned, I've always been impressed by how versatile it is as a solution. 73 | Before using Jenkins, every time we wanted to change some configuration, we needed to apply a restart. 74 | The restart would cancel the builds and everything was much more complicated than it needed to be. 75 | With Jenkins, you could set up new jobs and adjust configuration for each one. 76 | You didn't need to restart in order to apply your changes. 77 | Jenkins removed a lot of the headaches we would deal with when it came to configuring and running builds. 78 | 79 | == What problems has Jenkins solved for you? 80 | 81 | In my previous job before CloudBees, we were using either Maven jobs or freestyle jobs. 82 | We started to consider building a project with different branches, where a job uses the branch as a parameter. 83 | This isn't ideal, because the different builds you get are unrelated to each other. 84 | So the best structure was to create one job per branch. 85 | However, it messy and complicated because there was no way to capture what was common between the different jobs. 86 | At the time, Pipeline, Multibranch, and Organization Folders did not exist. 87 | Therefore, we chose to build an automation using a template that would copy it over, customize the branch name, and then repeat that for the dozens of projects that were following the same lifecycle but managed as different projects. 88 | All of these projects needed to be managed and we needed to have a way to determine whether a component actually changed, otherwise a build that comes from the main branch would be reused. 89 | Every time we had a big project, it became very costly if we didn't do it in a smart way. 90 | So we always try to optimize for the infrastructure and time because otherwise we pay for the computing processes, storage, network, and other aspects. 91 | Jenkins helped with this optimization and provided a way for us to manage all the jobs that were being run. 92 | 93 | == What have you worked on in Jenkins? 94 | 95 | Initially, when I got recruited at CloudBees, they were building proprietary plugins on top of Jenkins as well as contributing to the community. 96 | When I came in, I started to work on a prototype of a deployment of Jenkins in the cloud. 97 | We were trying to generalize how some companies were doing massive deployments of Jenkins on clustered systems like Mesos, but packaged in a product that could be run by any of our customers. 98 | At the time, we started using Mesos and Marathon, while using Docker as a container engine. 99 | Since we were running on AWS (which was still charging by the hour), and Docker volumes did not exist, we had to create our own system to allocate ebs volumes on the fly. 100 | 101 | To focus on my current Jenkins efforts, I've been working on HA support. 102 | The goal is making a Jenkins installation able to span over multiple machines and horizontally scale. 103 | This has involved a lot of work because Jenkins historically had a lot of design principles that were counter to scaling that way; a heavy reliance on a file system, holding most of the state in memory. 104 | We made a lot of patches against Jenkins core in that context. 105 | In most cases, this involved creating new extension points, to allow users to swap the default implementation for another one that can work in a HA-context. 106 | 107 | Another plugin I became interested in is the parallel test executor plugin that Kohsuke initially wrote. 108 | It is very convenient when you're looking to parallelize the execution of tests. 109 | Imagine you run a build with Maven, produce test results, use the JUnit plugin to collect the results, and get a nice report in the Jenkins UI. 110 | This plugin gets the information from the JUnit plugin about each individual test, such as how much time it took, and then it computes the bucket automatically in the form of `include/exclude` that you can provide back to Maven. 111 | If you can easily expand your pool of machines running builds, then you can easily shrink down your build and test times to something that's much faster. 112 | Today, we parallelize tests at the Maven level (using `-T...` for modules and link:https://maven.apache.org/surefire/maven-surefire-plugin/examples/fork-options-and-parallel-execution.html[surefire options]), as well as over multiple machines using this plugin. 113 | You can shrink a build that would normally take eight hours and shrink it down to less than an hour or even, more depending on how your project is set up. 114 | It's pretty impressive and it has gone better over time. 115 | 116 | We recently added the ability to split per test case. 117 | Within one test class, you may have multiple test cases and these test cases can take time, especially when dealing with integration tests. 118 | The split is then being done based on each case, instead of just collecting everything by class. 119 | What is great with this plugin is that the configuration you define adapts to the project content. 120 | You focus on the number of buckets and it will find a way to bin-pack tests in the right way. 121 | If you add new tests, it will take them into account and it will adjust the composition of each bucket accordingly, without requiring any configuration updates. 122 | 123 | == What sort of contributions have felt the most successful or impactful? 124 | 125 | As part of my work on the CloudBees CI modern product, I took over as maintainer for the Kubernetes plugin after the departure of Carlos Sanchez. 126 | This plugin is really key if you're running a Jenkins or CloudBees CI instance in the cloud, to achieve scale on the agent side. 127 | It's very versatile as well. 128 | While there are lots of CI solutions on the market, they each have a particular way of serving things. 129 | These ways may work for some people, but in other cases, it's not flexible enough. 130 | There is always a potential gap where you need more flexibility, and I think Jenkins provides exactly that. 131 | 132 | == Advice for new developers and new members of the open-source community 133 | 134 | Contributing to a project like Jenkins involves a learning curve: it is a project with a lot of history, lots of functionalities, and custom frameworks. 135 | It has an expansive ecosystem of plugins and offers limitless extensibility. 136 | You need to understand what your abstract needs are before you do something. 137 | Sometimes, it only takes a step back to find a simpler approach to a problem you think is a bug, but in fact is only a symptom of a bad practice. 138 | If you want to contribute something good to Jenkins, you need to either reach out to the community for guidance or accept making mistakes. 139 | It's okay to make mistakes -- I did a lot when getting started and still do. 140 | Most importantly, you must take the time and have an attitude to come back to your mistakes and focus on improving the status quo. 141 | -------------------------------------------------------------------------------- /src/pages/contributors/james-nord.adoc: -------------------------------------------------------------------------------- 1 | = James Nord 2 | :page-name: James Nord 3 | :page-linkedin: jtnord 4 | :page-twitter: 5 | :page-github: jtnord 6 | :page-email: 7 | :page-image: avatar/james-nord.jpeg 8 | :page-pronouns: 9 | :page-location: Hampshire, United Kingdom 10 | :page-firstcommit: 2009 11 | :page-datepublished: 2024-12-10 12 | :page-featured: false 13 | :page-intro: James Nord is a software engineer based out of the UK that has been part of the Jenkins community since Kohsuke Kawaguchi first announced the move to open source. James started out with more basic usage of the Jenkins platform, but he soon started writing plugins to solve problems and fill any gaps that he found. Attributing his success with Jenkins to the ecosystem and extensibility it offers, James eventually collaborated directly with the project. Documenting bugs and starting his contributions in the early days of mailing lists was just the start of a much longer journey. He was one of Kohsuke's first customers, and then joined CloudBees as an employee. Since then, James has helped push Jenkins further along and been a driving force for necessary innovation, such as supporting FIPS 140 and making Jenkins more secure for government work. Throughout his involvement with Jenkins, James has enjoyed spreading his focus to different areas of the project, making sure to keep his work interesting and varied. 14 | 15 | == What is your background prior to contributing to Jenkins? 16 | 17 | After receiving my master's in electrical and electronic engineering from Manchester University, I moved to Sweden and started life as a research engineer at a university. 18 | I was working with location-aware applications and mass distribution of media on the internet. 19 | This was all before mobile phones had built-in GPS systems. 20 | After some time in Sweden, I moved to Hampshire in the UK to work on the "head end" (backend) for a company catering to satellite and cable TV operators, which was acquired by Cisco partway through my ten-year tenure there. 21 | Within broadcasting, they call it "head end" and it's everything that drives automation of the broadcast. 22 | This included EPGs, scheduling, and encryption of data and devices as well. 23 | So I was working on the management of life cycles, encryption for devices, and other various necessities. 24 | I got my first exposure to Hudson at this company, and I think it was a number of months after Kohsuke originally sent the email or announced that Hudson was being updated to open source and that it was available. 25 | 26 | I was working with another person on a project that we had to deliver as quickly as possible. 27 | It was just the two of us and I'm not a morning person, so I would work late while my colleague, who was a morning person, would work earlier. 28 | We were using Subversion because that was our only option back in the day. 29 | However, we would forget to check in some files, so we'd add new files, make loads of changes, perform a local build, do the check-in, and go home. 30 | Obviously, the codebase ends up broken because merging missed files. 31 | After dealing with this for long enough, I was looking for something to prevent this from happening and wanted to incorporate some CI so we could get feedback. 32 | This way, when either of us checks in some files, we can know five minutes before leaving and no one is waiting for an update at the end of the day. 33 | 34 | So, I spent a while looking around and there were various options out there. 35 | We settled on Cruise Control, which I then spent the better part of a week trying to set up, just to check out and build this project, but it just would not work whatsoever. 36 | I don't know if it's because we were running it on Windows Server or if something else was causing the issue, but everything I was doing was wrong. 37 | I had followed the documentation and it just didn't work. 38 | I was just getting incredibly discouraged and then, after getting frustrated for the last time, I decided there's got to be a better option. 39 | That was when I came across Hudson and I figured it couldn't be any worse. 40 | After configuring it, I was up and running in 10 minutes and it was amazing. 41 | While working on projects at this company, there was initially no budget for something like this. 42 | 43 | However, I was the lab manager for all the manual testing and we had racks of servers that were no longer powerful enough to do encryption. 44 | Since they were lying around, essentially being spare parts, I cobbled together pieces from various old servers to give them more memory and then shoved them back in the rack. 45 | There was no budget for it and no IT for it, but it was in the rack, ready to go. 46 | It was brilliant and we loved it, with other people eventually catching on. 47 | They saw what we were doing and they wanted that ability too. 48 | Eventually, along with my regular job of developing code and maintaining the lab, I took on ownership of CI that eventually snowballed and spread out across the division. 49 | We were a global company with source repositories in different locations, so we wound up with Jenkins (Hudson) in three different environments: Two in the UK and one in Israel, so it would always be close to the source code. 50 | 51 | == How long have you been using Jenkins? 52 | 53 | So, if you take when Hudson was first made available and add six months onto it, that would probably be about the timeline. 54 | After leaving my previous employer, I moved over to CloudBees and I've been working for CloudBees for the last nine and a half, almost 10 years. 55 | 56 | == What have you worked on in Jenkins? 57 | 58 | In regards to my initial usage, there were some bugs that kick-started my contributions to the project. 59 | I was asking for help on the mailing lists and getting answers from Kohsuke, and I started answering questions from other users. 60 | That eventually grew to the point that we wanted to stop doing releases from developer desktops, which we were still doing. 61 | While we weren't _technically_ doing them from developer desktops, we were doing releases from servers, but you would log into the server and do it from a server, which is just as bad. 62 | That led to my first plugin, which was the link:https://plugins.jenkins.io/m2release/[M2 Release (Maven Release)] plugin. 63 | I wrote that so we could do our releases from Hudson, and then it evolved from there. 64 | Later on, there were some instances where we started using Cucumber for automated tests. 65 | Since there was no good way to show Cucumber test results in Jenkins, I wrote the link:https://plugins.jenkins.io/cucumber-testresult-plugin/[Cucumber JSON test reporting] plugin. plugin. 66 | From there, my usage was mostly running and maintaining Hudson. 67 | I filed loads of bugs, while also fixing an odd bug here and there. 68 | 69 | During my time at CloudBees, I have focused on Enterprise Jenkins or CloudBees CI and all of its various parts. 70 | 10 years ago, when I started to work for CloudBees, I was working on the proprietary side of CloudBees' offering. 71 | So I was working on a lot of plugins for CloudBees and sometimes having to fix bugs in open source. 72 | I've also attempted to maintain the acceptance test harness. 73 | 74 | Most recently, I've been driving the link:https://csrc.nist.gov/pubs/fips/140-2/upd2/final[FIPS 140] effort for our proprietary products, which means we have had to have FIPS 140 hooks inside Jenkins. 75 | We've been working with the team and managing that to get enough into open source so that we can build on it. 76 | There's a link:https://github.com/jenkinsci/jep/tree/master/jep/237[JEP] and various plugins that we have contributed towards the FIPS 140 effort. 77 | CloudBees CI has now gone link:https://docs.cloudbees.com/docs/cloudbees-ci/latest/fips-install-guide/fips-landing-page[GA with support] for FIPS 140, so the base work for that is obviously in the open source. 78 | However, it's not as easy to run and you need to do your own checks. 79 | 80 | == Why choose Jenkins over other projects? 81 | 82 | While I was working for NDS, the satellite cable company, as we were scaling up and out, we wanted to be able to allow users to create their own projects. 83 | However, we wanted them to essentially be rubber stamp templates. 84 | So it's like this: you're always going to use a Maven project, so the only different things are where your source control is located and what email should be notified when something goes wrong. 85 | That was around the time that Kohsuke had just started his company InfraDNA. 86 | 87 | I believe the first time that I worked with Kohsuke, was on the Nectar VMware autoscaling plugin which allowed us to have a pool of resources in VMware that were just virtual machines and just resetting to snapshots and assigning them into builds. 88 | So we could say, for this build, I need a virtual machine; here you go, here's an IP address, and we were good to go. 89 | I was amazed at the quickness with which he created that plugin. 90 | While in Jerusalem, we mentioned something during a meeting and he came in the next day and said here you go, try this. 91 | It was almost out of nowhere and the collaboration with Kohsuke was amazing. 92 | 93 | Additionally, at the time it had a cutting-edge UI and the test result reports were great. 94 | If you compared it to other stuff, they had a little table of pass/fail or a mess. 95 | Hudson allowed you to have a summary, drill into things, and show you the full stack trace and full logs right at the bottom of the builds, as opposed to having all the information in a massive sprawling page of mess. 96 | 97 | == What problems have you solved in Jenkins? 98 | 99 | The most recent thing is being able to support FIPS 140 for any federal people that want to use Jenkins and do it themselves. 100 | Up until a year ago, you couldn't really start Jenkins in a FIPS 140-compliant way because the initial use password that it generates would be generated using a nonstandard encryption method, as well as other various issues. 101 | 102 | Recently, I made sure that all of the plugin class loaders are named. 103 | If something does go wrong and you get a stack trace, rather than having just the class, you have the plugin name and class so you can immediately see which plugin is having an issue. 104 | Because it's not always obvious, it can be, but if it's not this spells out which class is from the given plugin. 105 | So, a little thing for me has made a big difference. 106 | When I see a stack trace, I can immediately just read it as opposed to having to infer something and then check. 107 | 108 | == Is there an aspect of Jenkins that you're particularly interested in? 109 | 110 | Early on in our usage, I was very interested in the extensibility and the ease of writing plugins, extending Jenkins itself to make it do new things that it couldn't necessarily do on its own. 111 | More recently, I've been doing bits of various things as needed. 112 | It's good in that it allows you to keep a bigger picture as well, so I don't end up siloed on any one thing. 113 | 114 | == What contributions have felt the most successful or impactful? 115 | 116 | I think with Jenkins, it has evolution. 117 | Gentle evolution all the time that adds to it and makes Jenkins better. 118 | Then, every once in a while, you get this burst of updates that makes things so much better. 119 | The first burst of updates was Pipeline, followed by Multibranch Pipeline and then check support. 120 | In a strange way, they're all plugins. 121 | It's not Jenkins has done this on its own, it's more that the Jenkins ecosystem has fostered this. 122 | People are always doing small improvements, and those small improvements add up. 123 | 124 | Lots of little things for different people, depending on what their focus is. 125 | So there's been many tweaks to the UI, and there's been a lot of work from people recently for keeping the backend updated. 126 | Work such as updating Jakarta EE, removing legacy things, and upgrading to Spring Security and Spring Framework 6. 127 | These updates move Jenkins forward for developers, and it means you can do things more easily for users. 128 | 129 | == Advice for new developers and new members of the open-source community 130 | 131 | For new developers, don't be afraid to ask. 132 | There's a wealth of knowledge that all the developers have and we lurk in various different places. 133 | However, not all of us lurk in all of the same places. 134 | If you're not sure, just ask, people are always there for help. 135 | If you find there isn't an existing answer, but manage to come up with one, don't be afraid to help by updating documentation for the next person. 136 | We do have a lot of documentation, but there's always room for improvement across the board, whether that is the user manuals, plugin instructions, how to develop, or how to get started. 137 | I think 'Getting started' is quite good now, but in the API documentation you may have challenges figuring out exactly which API you need to use to accomplish your goal. 138 | 139 | Our code can always use help as well. 140 | If you're contributing to open source, try and make sure your code is documented using something like Javadoc. 141 | That way, when you file a pull request, people aren't concerned that you've got no documentation attached. 142 | For example, if you've introduced a new API, where documentation is crucial to understanding how to use it. 143 | This is a fairly standard engineering code practice. 144 | Check and ask before spending time writing code, there might be a very good reason that something is not done or not supported. 145 | For example, your idea maybe should be coded in a separate plugin, or you should have an extension point so you can extend. --------------------------------------------------------------------------------