Lab 1 Report
Succesvolle CI/CD Job link : https://gitlab.stud.atlantis.ugent.be/mponomar/devops-project/-/pipelines/77480
Structuur van de pipeline is als volgt:
stages:
- build
- package
- execute
De maven-build job compileert de hele broncode met Maven. Hierbij is er dan een cache en artifacts bij toegevoegd zodat de build versnelt en zodat de ouput beschikbaar zal zijn in toekomstige jobs.
De maven-container-image-generation: In de package stage gebeurt dan het degelijke generatie en publicatie van een Docker-image. Deze zal dan vervolgens gepusht worden naar de Gitlab-container.
De execute stage (run-game) bevat dan een aparte image om het spel uit te voeren en zal daarbij de logic-service ook bij opstarten.
Problemen die tijdens het proces opkwamen: - Tijdens het pushen van verschillende commits kwamen er verschillende merge problemen (onverwacht) en probeerde deze op te lossen, maar is er dan besloten geweest om de repository te verwijderen en opnieuw aan te maken.
-
De execute stage kon niet succesvol worden uitgevoerd omdat er een verkeerde JDK versie werd gebruikt.
-
Tijdens de execute stage werd de image niet gevonden, dit kwam doordat in de image-tag niet de volledige juiste image werd gebruikt.
-
Bij het pushen van de image kreeg kwam er een loginfout , die daarna opgelost is geweest met de volgende regels :
QUARKUS_CONTAINER_IMAGE_USERNAME: $CI_REGISTRY_USER QUARKUS_CONTAINER_IMAGE_PASSWORD: $CI_REGISTRY_PASSWORD
Over het algemeen waren er niet te veel problemen opgedoken en verliep het project/pipeline vlot.
Questions:
What is ./mvnw and what is the advantage of using it above mvn?
./mvnw is een Maven Wrapper die een script bevat in het project zelf. Hierbij is één van de voordelen tegenover mvn dat mvnw automatisch gedownload wordt en dat alle ontwikkelaars ook dezelfde versie gebruiken zodat er geen conflicten zijn.
Explain the key differences between GitLab's cache and artifacts mechanisms. For each of Maven dependencies and build files, explain which mechanism you chose and why. What are the trade-offs of your choices?
cache: key: maven-deps paths: - .m2/repository artifacts: paths: - target/
Hier werd een cache (voor .m2/repository) gebruikt om de build sneller te kunnen verlopen door alle dependencies op te kunnen slaan in een cache zodat deze niet elke keer opnieuw gedownload moeten worden bij elke build die er gebeurd. Artifacts werden daarentegen gebruikt om bestanden die gecompileerd werden (/target) opnieuw te kunnen gebruiken in de toekomst tussen verschillende jobs, zoals in de package of execute stage. Ze kunnen dus dezelfde build gebruiken. De trade-offs zijn dan dat artifacts extra opslagruimte nodig hebben.
In this lab, we use a 25-jre image as the base for our runtime container and a 25-jdk image for the CI/CD build jobs. Explain the reasoning behind this choice. What would be the impact (positive or negative) of using 25-jdk for both? What about using 25-jre for both?
De opdracht van de JDK is om code te compileren met behulp van Maven. Bij runtime container is dan de JRE nodig om de applicatie uit te kunnen voeren.
JDK voor beiden impact: JDK wordt gebruikt om te bouwen, dus bij het opstarten zal deze dan veel langzamer opstarten doordat het meer geheugen nodig heeft.
JRE voor beiden impact: Als de JRE voor beiden wordt gebruikt dan zal heel de build niet eens kunnen opstarten omdat deze geen compiler bevat zoals de JDK.
Conclusie: JDK wordt gebruikt om te bouwen, JRE wordt gebruikt om uit te voeren. Met deze setup verhoog je dan de efficiëntie.