Voor deze opdracht maken we gebruik van Github en de Jenkins server uit de vorige lessen.
Je krijgt bij het clonen van deze repository een Github repository met daarin een Jenkinsfile die je moet gebruiken voor het opbouwen van je pipeline.
-
Maak een nieuw pipeline project die gebruik maakt van de Jenkinsfile uit deze repository als pipeline script. Alle stages, stappen, aanpassingen aan de pipeline gebeuren vanaf nu in de Jenkinsfile in de repository van deze opdracht. De naam van het project in jenkins mag je zelf kiezen. Tip: gebruik ssh keys voor de authenticatie naar je repository toe. Let op bij het kopieren van de public key naar GitHub: hierbij kopieer je het hostname gedeelte niet mee!
-
Hierna maak je een fork van onderstaande repository op je eigen github (username) space:
https://github.com/PXL-2TIN-DevOps-Resources/calculator-app-finished
. Forken kan je met de knopFork
rechts bovenaan op de Github pagina. BV. Is je username JohnDoe54 zou je een repository moeten krijgen met als urlhttps://github.com/JohnDoe54/calculator-app-finished
. Deze url (van de geforkte repository) gebruik je in de volgende stap.
ℹ️ Er zijn in deze repository verschillende functionaliteiten, unittesten, ... voor de calculator applicatie voorzien. De codebase is wel aangepast: De packagejest-junit
werd toegevoegd aan depackage.json
file en er werd een jest config voorzien. Dit werd gedaan zodat, wanneer we de unittesten runnen, er een junit rapport gegenereerd wordt in de root directory van de repository. -
Voorzie een stage "fetching source" die ervoor zorgt dat de code van de calculator app binnengehaald wordt van je persoonlijke calculator repository uit de vorige stap.
Toon aan met screenshots & uitleg onder punt (a) in oplossing.md hoe je dit bovenstaande gedaan hebt. Leg de focus hier op het gebruik van de credential manager.
- Voorzie een
nodejs
configuratie in de global tool configuration van jenkins met als naam "TINnode-devops" die je gebruikt doorheen de pipeline. Tip: NodeJS plugin
Toon aan met screenshots & uitleg onder punt (b) in oplossing.md hoe je de global tool configuration ingesteld & gebruikt hebt.
-
Vervolgens maak je een stage “install dependencies” die ervoor zal zorgen dat alle
npm
dependencies van de applicatie geïnstalleerd zullen worden. Denk hierbij terug wat er nodig was in de 1ste les. -
Hierna krijgen we een stage “unittest” die de unit testen van de applicatie zal uitvoeren. Daarnaast moet in deze stap ook een junit rapport gemaakt worden en gelinkt worden aan de huidige build. Hoe we de Unittesten van de applicatie kunnen uitvoeren, hebben we in de vorige les gezien. Je zal zelf moeten uitzoeken waar je het test rapport kan terugvinden en hoe je dit koppelt aan de build poging.
-
Voorzie een stage “create bundle” waarbij je alle benodigde files voor de werkende applicatie (de .git folder, .gitignore, readme.md,Jenkinsfile, test folder, ... zijn dus niet nodig!) in een map bundle steekt. Vervolgens wordt er een zip file gemaakt waarin de map "bundle" gestoken wordt.
-
Bij het falen van de volledige pipeline wordt er de melding “pipeline poging faalt op <datum + tijd>” weggeschreven naar een file jenkinserrorlog in de homefolder van de jenkins user op je systeem. Deze file bestaat default niet. Bij het succesvol doorlopen van de pipeline wordt de zip file uit stap 7 gearchiveerd als artifact.
De gehele pipeline moet zo opgebouwd zijn dat we hem meerdere malen na elkaar succesvol kunnen uitvoeren. Indien je voor vraag 2 tem. 7 stages/stappen moet toevoegen, doe je dit ook en documenteer je dit in je oplossing.md file onder punt (c).
Zoek een manier waarop je ervoor kan zorgen dat de pipeline automatisch elke vrijdag om 14u zal draaien. Documenteer je werkwijze & oplossing onder punt (d) in de oplossing.md file.
Zorg ervoor dat alle werkende stappen aanwezig zijn in de Jenkinsfile van je repository. Indien deze hier niet in staan, krijg je voor deze opdracht ook geen punten.
Een repository met:
- Een opgevulde Jenkinsfile
- Geen gevulde Jenkinsfile = 0 op deze opdracht
- Een niet werkende (=syntax errors in het pipeline script) Jenkinsfile = -30% op het eindresultaat
- Een opgevulde oplossing.md file met antwoorden op bovenstaande vragen inclusief screenshots