De zoektocht naar een geschikte CI oplossing

Bij WebIQ maken we graag gebruik van diverse handigheden om het ontwikkelen van websites en webshops makkelijker te maken. Zo is het ontwikkelen van een website een proces waarbij de klant nauw betrokken is en zijn er diverse handelingen die voor elk project standaard terug komen. Een aantal van deze handelingen zijn te automatiseren. Iets waar we bij WebIQ een onderzoek naar hebben uitgevoerd en graag onze kennis met jullie delen.

Continous Intergration (CI) is een term uit de webdevelopment wereld die gebruikt wordt om diverse handelingen te automatiseren. Via continuous intergration is het mogelijk om in zeer korte tijd nieuwe versies van een product uit te brengen. Omdat softwareontwikkeling een continu proces is is er ook de vraag naar regelmatige updates.

Het komt maar zelden voor dat maar 1 persoon aan een product werkt. Alle broncode die gemaakt wordt moet op een gegeven moment samen komen om het uiteindelijke product te vormen. Nadat deze code is samen gevoegd moet deze online worden gezet zodat de klant de werkzaamheden kan beoordelen en eventuele aanpassingen weer met het team kan terug communiceren. Wanneer er geen wijzigingen zijn geeft de klant zijn akkoord om het product, zoals hij is, in productie te zetten.

Deze fases zijn terug te vertalen naar het ICT bekende DTAP (Development, Testing, Acceptance en Production). Deze term omschrijft een viertal fases die voorkomen bij software ontwikkeling. Elke fase kent een aantal handelingen die uitgevoerd moeten worden. Dit kan, zoals we dat bij WebIQ doen, met Continous Intergration.

Bij WebIQ hebben we Testing en Acceptance samen gevoegd en wordt dit Staging genoemd. Dit omdat WebIQ en de projecten die wij uitvoeren (nog) niet complex en groot genoeg zijn om dit onderscheid te hoeven maken. Het zou op dit moment het proces onnodig complex maken. Hieronder staat een korte uitleg van elke fase zoals wij die toepassen:

1. Development

De development omgeving is terug te vinden op de laptop van de ontwikkelaar. Hier ontwikkelt hij lokaal op zijn eigen machine de broncode van het product.

2. Staging

Deze omgeving staat gelijk aan de fase voordat de klant zijn akkoord geeft om de website live te zetten. In deze omgeving is het te ontwikkelen product eigelijk al productie klaar, enkel heeft de klant nog te ruimte om eventuele wijzigen door te geven en zijn product te testen. Ook het team kan zelf hier het product beoordelen op correcte en te verwachten werking. Deze omgeving maakt gebruik van test data.

3. Productie

Het uiteindelijke product in productie omgeving. Dit is de openbaar bereikbare variant. Deze maakt ook gebruik van productie data uit de database. Hier staan bijvoorbeeld de daadwerkelijke orders in van klanten.

Kwaliteit van code

Voordat het product van de Deveopment fase naar de Staging/Acceptatie/Test omgeving mag wordt deze doorgemeten door diverse programma’s. Wanneer deze afwijkt van een bepaalde standaard, bijvoorbeeld als de kwaliteit niet hoog genoeg is of er toch nog een fout in de code wordt gevonden wordt, mag het product niet door naar de Staging omgeving. De klant kan deze wijzigingen dus niet inzien. De developer kan dit proces volgen en zien wat de feedback is en zijn code daarop aanpassen. Hierdoor weten wij zeker dat onze klanten een product ontvangen waarvan de code van een dermate hoge kwaliteit dat het niet waarschijnlijk is dat hier slordigheden of eventuele bugs in zitten.

Database wijzigingen

Via deze DTAP straat is het ook voor ons mogelijk om gemakkelijker database wijzigen door te voeren in de databases van de productie servers. Via een slim script kunnen wij de wijzigen tussen 2 databases bepalen en de benodigde wijzigen wegschrijven naar een update-script. Voorheen moesten deze met de hand gebeuren. Via deze nieuwe methode is het voor ons mogelijk om, theoretisch gezien, 1000 websites te voorzien van de laatste database wijzigen met 1 muisklik. Mocht hier onverwacht toch wat fout gaan kunnen wordt de update automatisch stopgezet en teruggaan naar de vorige versie.

Jenkins

Via Jenkins kunnen wij de diverse producten die wij ontwikkelen voorzien van een Continuous Intergration proces en daarmee deze, zelfs meerdere keren per dag, geautomatiseerd updaten. Jenkins is een programma die voor heel veel diverse soorten softwareontwikkel projecten wordt gebruikt om deze te voorzien van een continue update cyclus. Jenkins is modulair van aard en via diverse plugins configureerbaar tot elk soort continous intergration platform wenselijk. Dit omdat niet elk software ontwikkel traject hetzelfde is. Wij zijn op Jenkins gekomen nadat wij enige tijd met PHPCI hebben gewerkt. Helaas bleek deze software net niet genoeg aan te sluiten bij onze wensen. Daarnaast is Jenkins voor diverse soorten software te gebruiken, mochten wij in de toekomst nog eens met andere programmeer- of scripttalen gaan werken.

De zoektocht naar een geschikte CI oplossing