Use Case: Build en test in de cloud

Wat is CI

Continuous Integration of (CI) is het constant integreren van de applicatie code van het development team. Hierop worden dan builds en tests op uitgevoerd. Faalt een build of test dan dient de developer in kwestie de fout te onderzoeken en de bug uit de code te halen.

Een CI software product kan bijvoorbeeld volgende taken uitvoeren elke keer dat nieuwe code in het versiecontrolesysteem geplaatst wordt:

  • Een build (compilen en packagen)
  • Unit tests
  • Regressietesten
  • Integratie tests
  • Smoke / performantie tests
  • Geautomatiseerde UI tests

De lijst van tests kan al snel lang worden. Hoe groter het project, hoe langer het ook zal duren om een build uit te voeren. Een goede CI omgeving heeft dan ook redelijk wat capaciteit nodig om dit allemaal uit te voeren. Omdat de capaciteitsbehoeften zeer tijdsgebonden zijn (developers werken vaak alleen maar tijdens kantooruren), is het on-demand en pay-as-you-go model van de publieke cloud ideaal om build & test uit te voeren.

CI Software

Afhankelijk van welke CI software er gebruikt wordt, kan publieke cloud gemakkelijk geïntegreerd worden in het build proces. De onderstaande populaire CIs hebben alvast ondersteuning voor publieke cloud providers:

  • Jenkins (via plugins)
  • Bamboo (Elastic Agents via AWS EC2)
  • TeamCity (integraties voor Amazon AWS, Azure)

Wanneer CIs veel build & tests moeten uitvoeren, dan kunnen ze gebruiken maken van externe agents. Deze agents worden gestart op nieuwe servers, voeren de build en test taken uit, en sturen het resultaat terug naar de CI server. De cloud integraties die deze CIs hebben, gaan automatisch deze agents opstarten op de publieke cloud providers, wanneer er nieuwe capaciteit nodig is.

Kostenvoordeel

Doordat cloud resources alleen maar betaald hoeven te worden wanneer deze effectief gebruikt worden, is er een enorm kostenvoordeel om dit op cloud infrastructuur te doen, in plaats van aangekochte (on-premise) hardware. De agents hoeven namelijk alleen maar gestart te worden, wanneer er effectief een vraag is voor meer resources: wanneer de developers afgewerkte code in het versiecontrolesysteem plaatsen. Een vergelijking:

Omgeving Uren per maand Kostprijs
1 agent, hardware aangekocht 730 (24/7) hardware, installatie, netwerk, stroom, arbeidsuren
5 agents, hardware aangekocht 3650 (24/7) hardware, installatie, netwerk, stroom, arbeidsuren
1 agent, cloud 173 (40h werkweek) 2 CPU, 8 GB RAM op AWS: ±$20.6 / maand voor 173 uren
5 agents, cloud 866 (40h werkweek) 5x 2 CPU, 8 GB op AWS: ±$103 / maand voor 866 uren

Afgaande op bovenstaande tabel is de jaarlijkse prijs voor 5 agents ongeveer $1236. Met een gemiddelde afschrijvingsperiode on-premise van 3 jaar, is het onmogelijk om voor dezelfde prijs de hardware zelf te kopen, de installatie te voorzien, stroom/netwerk/koeling te betalen en mogelijk nog extra onderhoudskosten te voorzien. In dit voorbeeld zullen er altijd 5 agents actief zijn tijdens de kantooruren. In de realiteit zal de CI server de agents die geen werk hebben afsluiten, waardoor de eigenlijke cloud kosten nog lager liggen.

Het grote voordeel van de cloud oplossing is ook de flexibiliteit. Indien meer of minder CPU of geheugen nodig zou zijn, dan is het maar kwestie van enkele eigenschappen aan te passen. Het is zeer moeilijk om vooraf te schatten wat de benodigde capaciteit zal zijn. Het on-demand model maakt het mogelijk dat deze beslissing niet eens gemaakt moet worden.

Architectuur

Hieronder is een voorbeeld weergegeven van hoe bamboo met 5 agents met AWS geconfigureerd kan worden:

_images/use-case-ci-on-cloud-1.png

De 5 agents zullen alleen maar gestart worden wanneer er een vraag is naar meer resources. Als de CI server de vraag kan bijhouden zonder externe agents, dan zullen er geen agents op AWS actief zijn.

_images/contact-in4it.png