CI/CD

Continous integration is geen nieuw fenomeen in de software ontwikkeling. Het heeft veel weg van Kaizen. Zo efficient mogelijk werken, verspillingen tegengaan. Zo veel mogelijk invloed hebben op alle mogelijke niveaus van de code lifeline.

Ik heb meerdere jaren op integratie niveau gewerkt. Hier heb ik veel traditionele valkuilen gezien. Een ontwikkelaar wil enkel coderen en zo min mogelijk valideren dan wel rapporteren. Een projectleider wil alleen maar horen dat iets (bijna) af is. Een tester wil enkel horen wat er daadwerkelijk af is en wat te valideren is en de integrator is de speelbal daar tussen in. Wat mij altijd opviel aan project meetings was dat de projectleider altijd aangaf dat het zojuist die ochtend af was en of het al in de patch zat zodat het te valideren is op een machine. Af was hierin een ruim begrip en om dit concreet te maken ben ik een framework gaan ontwikkelen welke inzicht geeft in alle werkpakketten.

Dit is uitgegroeid tot een dashboard framework welke meerdere verschillende systemen uitleest, valideert t.o.v. een aantal voorgedefinieerde validaties maar ook t.o.v. een aantal klant specifieke validaties. De uitkomst van dit alles wordt gepresenteerd door een webserver. Daar waar het in het begin vooral statisch gegenereerde pagina’s waren is dit inmiddels vervangen door een database. Hierdoor is de flexibiliteit in presentatievorm toegenomen.

Releases
Inmiddels is release 3.1.0 een feit. Zie hieronder de tijdlijn van de mayor releases en de details van de laatste minors.

Versie 1.0

Deze versie is eigenlijk nooit echt gereleased. Het was een samen raapsel van scripts en voornamelijk voor 1 klant en 1 repository geschreven. Omdat dit niet werkbaar is voor meerdere repositories, laat staan voor meerdere klanten, is deze codebase achtergelaten. De code wordt door een aantal fanatiekelingen nog onderhouden.

Versie 2.0

In deze versie is de volledige codebase opnieuw geschreven. In het achterhoofd leeft nog wel de functionaliteit van versie 1, maar nu vanuit de architectuur dat alles zo uniform mogelijk moet zijn. Naast Bitbucket is er ook ondersteuning voor Gitlab en naast Bamboo is er ondersteuning voor Jenkins. Door deze toevoeging kunnen we zoveel mogelijk klanten bedienen. Er is een abstractielaag gekomen tussen functionaliteit en communicatie, wat de leesbaarheid en stabiliteit van de code ten goede komt. Daarnaast is er ook een record & playback functionaliteit op de communicatie laag gekomen. Hierdoor wordt remote debugging makkelijker zonder toegang nodig te hebben tot de klant infrastructuur. Tevens biedt dit ook de mogelijkheid om complexe use-cases met unittesten af te dekken en bij elke build automatisch mee te laten lopen.

Versie 3.0

Er is nog een abstractielaag toegevoegd. In plaats van dat we direct Gitlab of Bamboo aanroepen, doen we dat nu via een functionele laag. Hierin zijn generieke functies opgenomen die functioneel per verschillend systeem anders de informatie bovenwater halen. Daarboven is nog een module laag gekomen welke nog meer generaliseert. Hierdoor is de klant specifieke code geminimaliseerd wat de betrouwbaarheid ten goede komt.

Versie 3.1

Toevoegen van een aparte database control functionaliteit. Toevoeging van twee artifact systemen (Artifactory + Nexus).


Print Friendly, PDF & Email