# Jenkins (software)

Jenkins is een open source automatiseringsserver, die softwareontwikkelaars ondersteunt bij het bouwen, testen en implementeren van software. Een deel van de stappen in het ontwikkelproces worden met Jenkins geautomatiseerd, zodat ontwikkelaars eenvoudig wijzigingen kunnen doorvoeren, met lagere kans op fouten. Aanvankelijk was Jenkins enkel bedoeld voor software geschreven in Java. Het pakket ontving ook andere mogelijkheden erbij.
Jenkins maakt gebruik van het principe van CI en CD. Het is een servergebaseerd systeem dat draait in servletcontainers zoals Apache Tomcat. Het ondersteunt versiebeheersystemen zoals AccuRev, CVS, Subversion, Git, Mercurial, Perforce, ClearCase en RTC, en kan op Apache Ant, Apache Maven en sbt gebaseerde projecten uitvoeren, evenals willekeurige shellscripts en Windows- batchcommando's .

## Geschiedenis

De basis van Jenkins werd gelegd door Sun Microsystems-medewerker Kohsuke Kawaguchi, toen nog onder de naam Hudson. Het product werd beschouwd als goed alternatief voor bestaande open source build-servers, zoals Cruse Control. Op de JavaOne -conferentie in mei 2008 won de software de Duke's Choice Award in de categorie Developer Solutions.
Nadat Sun eind januari 2010 door Oracle werd overgenomen, verliet Kawaguchi het bedrijf, maar bleef hij werken aan zijn open-source-project Hudson. Hierdoor ontstonden twee vertakkingen (forks) van de broncode van Hudson; de tak waar de open-source-gemeenschap achter Kawaguchi aan verder werkte, en de tak die bij Oracle was achtergebleven. Oracle beschouwde zich echter als eigenaar van Hudson en eiste in november 2010 de handelsmerknaam op. Door de open-source-gemeenschap achter de tak van Kawaguchi, werd vervolgens in 2011 met een ruime meerderheid besloten om hun vertakking om te dopen naar Jenkins. Oracle zelf zou de ontwikkeling van Hudson nog enige jaren voortzetten, totdat de code werd geschonken aan de Eclipse Foundation. In 2017 werd het onderhoud aan Hudson geheel gestaakt. Vanaf dat moment zou Jenkins Hudson in Eclipse vervangen.
In juni 2019 had de Jenkins-organisatie op GitHub 667 projectleden en ongeveer 2.200 openbare repositories, vergeleken met de 28 projectleden en 20 openbare repositories van Hudson bij de laatste update in 2016.
In 2011 ontving maker Kohsuke Kawaguchi een O'Reilly Open Source Award voor zijn werk aan het Hudson/Jenkins-project.
Op 20 april 2016 werd versie 2 uitgebracht met de Pipeline -plug-in standaard ingeschakeld. Met de plug-in kunnen bouwinstructies worden geschreven met behulp van een domeinspecifieke taal op basis van Apache Groovy.
In maart 2018 werd het Jenkins X-softwareproject voor Kubernetes publiekelijk gepresenteerd met ondersteuning voor verschillende cloudproviders, waaronder AWS EKS.

## Builds

Builds kunnen op verschillende manieren worden geactiveerd, bijvoorbeeld door:
* een webhook die wordt geactiveerd bij gepushte commits in een versiebeheersysteem
* planning via een cron-achtig mechanisme
* een aanvraag van een specifieke build-URL
* direct nadat de andere builds in de wachtrij zijn voltooid
* aanroepen vanuit andere builds

## Plug-ins

Er is een grote verscheidenheid aan plug-ins beschikbaar, om Jenkins met functionaliteit uit te bereiden. Zo zijn er plug-ins uitgebracht waarmee Jenkins kan worden gebruikt voor projecten die andere talen gebruiken dan Java, en om Jenkins te integreren met de meeste versiebeheersystemen en bugdatabases. Veel build-tools worden ondersteund via hun respectievelijke plug-ins. Plug-ins kunnen ook het uiterlijk van Jenkins veranderen of nieuwe functionaliteit toevoegen. Er is een set plug-ins die speciaal zijn bedoeld voor unit-testen die testrapporten genereren in verschillende formaten (bijvoorbeeld JUnit gebundeld met Jenkins, MSTest, NUnit, etc.) en geautomatiseerde tests die geautomatiseerde tests ondersteunen. Plug-ins kunnen builds testrapporten laten genereren, die door Jenkins vervolgens kunnen worden weergegeven, en waarmee aan de gebruiker trends getoond kunnen worden via een gebruikersinterface.

### Mailer

    Met de Mailer kan ingesteld worden dat bij bepaalde handelingen meldingen worden verstuurd. Jenkins stuurt e-mails naar de opgegeven ontvangers wanneer een bepaalde belangrijke gebeurtenis plaatsvindt, zoals:
* Een mislukte build
* Een instabiele build
* Succesvolle build na een mislukte build
* Instabiele build na een succesvolle

### Inloggegevens

    Deze plug-in staat het opslaan van referenties in Jenkins toe. Er is een gestandaardiseerde API voor andere plug-ins om verschillende inloggegevens op te slaan en op te halen

### Externe processen bewaken

    Deze plug-in voegt de mogelijkheid toe om het resultaat van extern uitgevoerde taken te bewaken.

### SSH-agents

    Met deze plug-in kunnen agents (voorheen bekend als slaves) worden uitgevoerd op *nix-machines via SSH.

### Javadoc

    Deze plug-in voegt Javadoc-ondersteuning toe aan Jenkins. Deze functionaliteit maakte vroeger deel uit van de kern, maar vanaf Jenkins 1.431 werd het opgesplitst in afzonderlijke plug-ins. De plug-in maakt de selectie van "Javadoc publiceren" mogelijk als een actie na het bouwen, waarbij de map wordt gespecificeerd waar de Javadoc moet worden verzameld en of retentie wordt verwacht voor elke succesvolle build.

### Online uitleg

    Jenkins kan worden gebruikt om de uitvoering van een shellscript te plannen en te controleren via de gebruikersinterface in plaats van via de opdrachtprompt.

### Veiligheid

    De beveiliging van Jenkins hangt af van twee factoren: toegangscontrole en bescherming tegen externe bedreigingen. Toegangscontrole kan op twee manieren worden aangepast: gebruikersauthenticatie en autorisatie. Bescherming tegen externe bedreigingen zoals CSRF- aanvallen en kwaadaardige builds wordt ook ondersteund.

## Onderscheidingen en erkenning

* InfoWorld Bossie Award (Best of Open Source Software Award) in 2011.
* Ontvangen Geek Choice Award in 2014.
* Dit artikel of een eerdere versie ervan is een (gedeeltelijke) vertaling van het artikel Jenkins (software) op de Engelstalige Wikipedia, dat onder de licentie Creative Commons Naamsvermelding/Gelijk delen valt. Zie de bewerkingsgeschiedenis aldaar.
Referentie
* ↑ Release 2.477 (17 september 2024). Geraadpleegd op 22 september 2024.