Wat is Jenkins en hoe ondersteunt het CI/CD?
Auteur: Redactie Domeny.ForSale Gepubliceerd
In het kort: Jenkins is een opensource-automatiseringsserver die ontwikkelteams helpt applicaties te bouwen, te testen en uit te rollen. Meestal ondersteunt Jenkins CI/CD-processen: het regelmatig controleren van codewijzigingen en het voorbereiden van nieuwe versies voor release. Je kunt Jenkins op een eigen server met Linux draaien, maar dan moet je zelf zorgen voor beheer, updates en beveiliging.
Waarvoor dient Jenkins en wat is het niet?
Jenkins voert taken uit volgens een vastgelegd stappenplan: het haalt code op, voert opdrachten uit, slaat resultaten op en meldt of de uitvoering is geslaagd of mislukt. Een taak kan starten na een wijziging in de repository, volgens een tijdschema of op verzoek van een gebruiker. Een repository is een opslagplaats voor code en de bijbehorende wijzigingsgeschiedenis.
Jenkins is echter geen systeem om ontwikkelaars aan te sturen en geen vervanging voor een tool om werk te plannen. Het automatiseert technische handelingen, maar verdeelt geen verantwoordelijkheden en beoordeelt het team niet. Ook vervangt het geen versiebeheersysteem zoals Git, al kan het daarmee samenwerken.
Typische toepassingen zijn:
- applicaties bouwen: code omzetten naar een vorm die kan worden uitgevoerd of verspreid;
- tests en kwaliteitscontroles op de code uitvoeren;
- pakketten of containerimages maken;
- resultaten publiceren en applicaties naar een gekozen omgeving uitrollen.
Jenkins coördineert deze activiteiten, maar gebruikt meestal andere tools om ze uit te voeren. Het compileert niet zelf elke programmeertaal en bevat geen tests voor een specifieke applicatie: het voert opdrachten uit die het team heeft voorbereid.
Hoe Jenkins CI/CD ondersteunt
CI, oftewel continue integratie, houdt in dat codewijzigingen regelmatig worden samengevoegd en dat automatisch wordt gecontroleerd of de applicatie nog goed kan worden gebouwd en de tests doorstaat. Zo kan het team eerder ontdekken dat een nieuwe wijziging een bestaande functie heeft verstoord. Een geslaagde controle garandeert echter niet dat er geen fouten zijn: dat hangt af van de dekking en kwaliteit van de tests.
CD kan staan voor continue levering of continue uitrol. Bij continue levering staat een gecontroleerde versie klaar voor publicatie, maar kan goedkeuring nodig zijn voordat gebruikers ermee aan de slag kunnen. Bij continue uitrol gaat een wijziging die aan de vastgelegde voorwaarden voldoet automatisch naar productie. Productie is de omgeving die echte gebruikers gebruiken.
Jenkins schrijft geen van deze modellen voor. Je kunt alleen tests configureren, een volledige uitrol automatiseren of een proces instellen waarbij vóór publicatie handmatige goedkeuring nodig is. Alleen de tool installeren levert nog geen CI/CD-proces op: je moet ook de stappen, de voorwaarden voor een geslaagde uitvoering en de afhandeling van fouten vastleggen.
Pipeline: een stappenplan voor de uitvoering
Een pipeline beschrijft de opeenvolgende stappen van de automatisering. In Jenkins wordt die vaak vastgelegd in het bestand Jenkinsfile, dat samen met de applicatiecode wordt opgeslagen. Daardoor kun je wijzigingen in het bouwproces beoordelen en onder versiebeheer houden, net als wijzigingen in de applicatie zelf.
Stel je een team voor dat een webwinkel ontwikkelt. Nadat een wijziging naar de repository is gestuurd, kan Jenkins de volgende procedure uitvoeren:
- De opgegeven versie van de code ophalen.
- Afhankelijkheden installeren en de applicatie bouwen.
- Tests uitvoeren, bijvoorbeeld om de berekening van het winkelmandtotaal te controleren.
- Een artefact opslaan: het resultaat van het bouwproces, bijvoorbeeld een applicatiepakket.
- Dat pakket naar een testomgeving uitrollen.
- Wachten op goedkeuring van een bevoegde persoon voordat het naar productie wordt uitgerold.
Als de test voor het winkelmandje mislukt, stopt een correct geconfigureerde pipeline de volgende stappen. Het team krijgt het uitvoeringsresultaat en de logs: een registratie van het verloop van de opdrachten die helpt om de oorzaak van het probleem te achterhalen.
Een praktische vuistregel is om hetzelfde artefact uit te rollen dat eerder de tests heeft doorstaan. De applicatie opnieuw bouwen vóór publicatie kan een ander resultaat opleveren, bijvoorbeeld als de opgehaalde afhankelijkheden zijn gewijzigd.
Zelf Jenkins hosten op Linux: wat moet je beheren?
Je kunt Jenkins zelf op Linux hosten, onder meer als service of in een container. Daarvoor is een compatibele Java-omgeving nodig. Controleer vóór de installatie in de officiële documentatie de vereisten van de gekozen Jenkins-versie, de ondersteunde Java-versies en de aanbevolen installatiemethode.
In een grotere configuratie scheidt Jenkins de coördinatie van het werk van de uitvoering. De controller beheert de taken en configuratie, terwijl agents de bouw- en testbewerkingen uitvoeren. Deze verdeling maakt het mogelijk uitvoeringsomgevingen op projecten af te stemmen en de belasting van de controller te beperken.
Eigen hosting geeft je controle over de omgeving, maar brengt ook concrete verantwoordelijkheden met zich mee:
- Jenkins, het systeem en de plugins die de functionaliteit uitbreiden bijwerken;
- toegang en authenticatiegegevens, zoals tokens, beheren;
- back-ups maken en controleren of de configuratie kan worden hersteld;
- schijfruimte, logs en het gebruik van systeembronnen bewaken.
Wees extra voorzichtig bij het uitvoeren van code van personen die je niet vertrouwt. Een automatiseringstaak voert opdrachten uit en mag daarom geen onnodige toegang krijgen tot geheime gegevens of de productie-infrastructuur.
Wanneer kies je voor Jenkins?
Jenkins kan een goede keuze zijn als een team flexibele processen, integraties met verschillende tools of uitvoering van taken op de eigen infrastructuur nodig heeft. Het is ook nuttig wanneer het releaseproces van een applicatie ongebruikelijke stappen bevat die niet gemakkelijk in een eenvoudig schema passen.
Die flexibiliteit heeft een prijs: iemand moet de configuratie onderhouden en problemen met de server en plugins oplossen. Als een klein team alleen enkele tests na elke wijziging nodig heeft, kan een CI/CD-dienst die bij de repository beschikbaar is minder beheer vergen.
Begin voordat je een keuze maakt met één proces: code ophalen, de applicatie bouwen en tests uitvoeren. Controleer of je dat proces betrouwbaar kunt herhalen en wie verantwoordelijk wordt voor het beheer. Voeg automatische uitrol pas toe nadat je de toegangsrechten en de manier om een foutieve versie terug te draaien hebt vastgelegd.
Zie ook: Wat is API?
