Stage opdracht

Onderzoek en prototype voor een hybride buildstraat 

AMEXIO ontwikkelt voor klanten oplossingen in Adobe Experience Manager (AEM), een op Java gebaseerd CMS-systeem. Voor deze projecten is een buildstraat ingericht die bij elke wijziging de code bouwt, test en controleert op kwaliteit, bijvoorbeeld met unit tests, linting en statische code-analyse zoals SonarQube. Binnen AMEXIO worden hiervoor verschillende CI/CD-platformen gebruikt: Jenkins, GitLab CI en GitHub Actions. 

Voor één van onze projecten kan een volledige run van deze buildstraat op de CI-server ongeveer 15 minuten duren. Dezelfde stappen draaien lokaal op de machine van een ontwikkelaar in ongeveer 3 minuten. Ontwikkelaars pushen hun wijzigingen vaak eerst en wachten op de remote pipeline om te weten of alles goed is. Dit brengt een aantal uitdagingen met zich mee: 

  • Ontwikkelaars wachten relatief lang op feedback, wat de doorlooptijd verlengt en de focus verstoort 
  • Problemen met de code worden pas later ontdekt, vaak pas in een pull request 
  • Servercapaciteit wordt gebruikt voor runs die falen op problemen die lokaal eenvoudig te vinden zijn, wat zorgt voor extra ‘fix pipeline’ commits 

Het is nog niet duidelijk welk deel van de tijd waaraan opgaat, en welke stappen veilig en betrouwbaar lokaal kunnen draaien. Belangrijke vragen hierbij zijn: 

  • Waar gaat de tijd in de remote buildstraat naartoe en hoe kunnen we het verschil met lokaal verklaren? 
  • Hoe kunnen dezelfde build-, test- en kwaliteitsstappen lokaal worden uitgevoerd, met hetzelfde resultaat als in CI? 
  • Welke stappen horen lokaal thuis en welke alleen remote (afhankelijk van geheimen of omgevingen bijvoorbeeld)? 
  • Hoe voorkom je dat de lokale en de remote buildstraat uit elkaar gaan lopen? 
  • Welke tools en technieken zijn hiervoor beschikbaar, en welke past het best bij de Jenkins-pipelines van AMEXIO? 

Doel van de opdracht

Het doel van deze opdracht is om te onderzoeken hoe een hybride buildstraat voor AEM/Java-projecten kan worden opgezet, en om op basis van dit onderzoek een prototype te ontwikkelen. Je gaat onderzoeken hoe een oplossing kan worden ingericht die: 

  • Builds, tests en kwaliteitschecks lokaal uitvoert met hetzelfde resultaat als de remote pipeline 
  • Zoveel mogelijk dezelfde pipeline-definitie hergebruikt, zodat lokaal en remote niet uit elkaar lopen 
  • Snel genoeg is om tijdens het ontwikkelen te gebruiken 
  • Eenvoudig door andere teams kan worden overgenomen 

Daarnaast onderzoek je of de remote buildstraat zelf sneller gemaakt kan worden, bijvoorbeeld met caching, parallelle stages of persistente agents. 

Deliverables

  • Onderzoeksrapport 
    • Analyse van de werking van de huidige buildstraten 
    • Overzicht en vergelijking van tools en technieken om pipelines lokaal uit te voeren, ook buiten Jenkins 
    • Analyse over mogelijke risico’s van een lokale én remote oplossing 
    • Onderbouwde aanbeveling voor een geschikte oplossing 
  • Architectuur en strategie 
    • Een architectuurdiagram van de hybride buildstraat 
    • Verdeling van stappen tussen lokaal en remote 
    • Integratie met de bestaande buildstraten 
  • Prototype op een AEM/Java-project dat laat zien hoe: 
    • Build, tests en kwaliteitschecks met één commando lokaal draaien 
    • Lokaal en remote dezelfde stappen en versies gebruiken 
    • Tijdswinst en gelijkheid van resultaten worden gemeten en gerapporteerd 
  • Handleiding of template waarmee andere teams de oplossing kunnen overnemen 
  • Eindpresentatie en documentatie 

Niveau

4e-jaars Software of DevOps/Infrastructure student 

Complexiteit

De opdracht vereist zowel onderzoeksvaardigheden als praktische softwareontwikkeling. Op het eerste gezicht lijkt het lokaal draaien van een pipeline eenvoudig, maar in de praktijk is het lastig om lokaal exact hetzelfde resultaat te krijgen als in CI. Je gaat onder andere: 

  • Meten en analyseren waar de tijd in de buildstraat naartoe gaat 
  • Verschillende tools en technieken onderzoeken en vergelijken 
  • Een ontwerp maken dat gelijkheid tussen lokaal en remote waarborgt, inclusief afhankelijkheden zoals artifact repositories, credentials en code-analyse-servers 
  • Bepalen welke stappen lokaal en welke remote uitgevoerd worden 
  • Een prototype implementeren met een bestaand AEM/Java-project 

Daarnaast moet je de oplossing helder documenteren en presenteren aan stakeholders. 

 

Tools (suggesties)

Je krijgt ruimte om zelf geschikte tools te onderzoeken en te gebruiken. Het Jenkins-platform heeft onze voorkeur, maar ook andere tools mogen in het onderzoek worden meegenomen. Mogelijke categorieën van tools zijn: 

  • CI/CD tooling: Jenkins, GitLab CI, GitHub Actions etc. 
  • Tools om pipelines lokaal uit te voeren (bijv. Jenkinsfile Runner, gitlab-ci-local, act, Dagger, lokale Github Action runners) 
  • Containers en devcontainers (bijv. Docker) 
  • Java build tooling en caching (bijv. Maven, Gradle build cache) 
  • Kwaliteitstools (bijv. SonarQube, unit tests, linters) 

De uiteindelijke toolkeuze onderbouw je in het onderzoeksrapport.


Wat krijg je van AMEXIO?

  • Tijdens je stage krijg je twee begeleiders: een procesbegeleider en een technisch begeleider. Bij AmeXio hebben we jarenlange ervaring met het begeleiden van stagiaires.
  • Een stagevergoeding van €400 per maand.
  • Deelname aan onze personeelsvereniging "Borrels & Bytes" voor gezellige evenementen zoals pubquizen, lasergamen, etentjes, game nights en karaoke!
  • En natuurlijk: een kei gezellige en leerzame stage waar je alle ruimte krijgt om vragen te stellen en te groeien als professional!

Heb je nog vragen?

Melissa Raijmakers (Corporate Recruiter)
Top