Blog
Op Datum
Populaire tags
- February (0)
- January (0)
- December (0)
- November (0)
- October (0)
- Archief (11)
- Alle Titels (11)
Continuous Integration met Hudson
Om voortdurend de kwaliteit te waarborgen van de software projecten die wij in-house uitvoeren, hebben wij de Continuous Integration (CI) tool Hudson in gebruik genomen. Continuous Integration is, zoals de naam al doet vermoeden, een continu proces dat de ontwikkelaars ondersteunt bij het behalen én behouden van een bepaald kwaliteitsniveau. Het integreert o.a. het versiebeheersysteem en de ontwikkelomgeving en indien wenselijk de testomgeving. Het is een Open Source Java applicatie en is bij TA Team op een speciale server geïnstalleerd.Een aantal mogelijkheden van Hudson die wij gebruiken:
- integriteit van de source code waarborgen
- automatisch regressietesten
- automatisch documenteren
- integratie met trac (issue tracking systeem)
- web interface voor configuratie en status
Integriteit van de source code kan als volgt worden omschreven: te allen tijde moet het project foutloos gebouwd kunnen worden in de ontwikkelomgeving. Hiertoe krijgt Hudson een automatische trigger wanneer een ontwikkelaar een commit doet in het versiebeheersysteem, in ons geval Subversion. Hudson zal zijn lokale working copy van dat project bijwerken en een bouwpoging starten. Wanneer deze poging faalt, dan zullen de ontwikkelaars hierover met een email geïnformeerd worden. De fout kan dan hersteld en in het versiebeheersysteem vastgelegd worden. Zolang de fout blijft bestaan blijft Hudson de ontwikkelaars hierover informeren. Hudson zal slechts éénmalig melding doen dat de bouwpoging weer is gelukt. Er worden geen emails meer verstuurd zolang daartoe geen reden is. Op deze wijze is Hudson feitelijk onzichtbaar en worden de ontwikkelaars niet overstelpt met meldingen die al snel als overbodig worden beschouwd.
Hudson biedt de mogelijkheid na een succesvolle bouwpoging automatisch testen te starten. Wanneer één of meerdere tests falen kan de ontwikkelaar hierover geïnformeerd worden. Daarnaast biedt de web interface de mogelijkheid om test statistieken te bekijken. In de loop van de tijd kunnen deze statistieken tonen hoe de kwaliteit (op basis van deze testen) van het project is verlopen. Automatisch documenteren behoort tot de mogelijkheden wanneer hiervoor een build target is aangemaakt. Hierbij kunt u bijvoorbeeld denken aan Doxygen om automatisch de source code te documenteren.
Alle resultaten van Hudson kunnen ook in het issue tracking systeem trac worden getoond. Zo zal de tijdlijn van trac alle bouwpogingen tonen en een link bevatten naar de bijbehorende web pagina met de resultaten van die poging. De documentatie die d.m.v. Doxygen is gebouwd kan ook in trac worden getoond. Omdat wij al gebruik maakten van trac als issue tracking systeem, was deze integratiemogelijkheid reden te meer om voor Hudson te kiezen.
De configuratie van Hudson gebeurt d.m.v. een web interface en kan dus met elke (moderne) browser worden uitgevoerd. Soms is het nodig voor een bepaald project een extra plug-in voor Hudson te downloaden. Wij hebben o.a. MSVC++ en Grails projecten in Hudson aangemaakt. Hiervoor is bijvoorbeeld de MSBuild plug-in toegevoegd. Er zijn vele plug-ins beschikbaar en het installeren ervan is kinderspel.
Na een vrij steile leercurve, en het installeren van een aantal plug-ins, hebben wij een stabiel werkende Hudson omgeving gecreëerd waarmee we op effectieve wijze Continuous Integration voor onze projecten hebben ingericht. Deze ondersteunt onze ontwikkelaars en zit daarbij niet in de weg. De informatieverstrekking vanuit Hudson is zodanig ingesteld dat alleen zinvolle meldingen worden gedaan. Daarmee hebben we voorkomen dat ontwikkelaars worden overstelpt met meldingen die als niet zinvol worden ervaren, waardoor de meldingen die echt belangrijk zijn wellicht over het hoofd worden gezien.
Referenties (alle in het Engels):
- http://en.wikipedia.org/wiki/Continuous_integration
- https://hudson.dev.java.net/
- http://en.wikipedia.org/wiki/Subversion_(software)
- http://trac.edgewall.org/
- http://en.wikipedia.org/wiki/Doxygen
- http://www.grails.org/


