Cloud Deployments

Continuous Integration met GitLab

Door Freek Schoenmakers

Logo_gitlab.png

Bij softwareontwikkeling is samenwerking essentieel. Vaak werken een heleboel ontwikkelaars tegelijk aan hetzelfde softwareproject. Het is daarom van belang dat versiebeheer goed geregeld is. Hier biedt GitLab goede ondersteuning voor. Met GitLab kun je heel gemakkelijk versies beheren en verzoeken plaatsen om een nieuwe feature aan een release toe te voegen. Maar dat is niet het enige. Een andere – zeer nuttige – functie van GitLab zijn de zogenoemde pipeline tools. Hiermee wordt het build-, test-, deployment- en provisioningproces geautomatiseerd. Naast vele softwarebedrijven zoals Ticketmaster, Uber, ING en Alibaba maakt ook Universiteit Utrecht succesvol gebruik van GitLab.


Wat is het?

Pipeline tools ondersteunen softwareontwikkeling door het automatiseren van taken zoals testen. Een pipeline is een groep jobs die worden uitgevoerd in stages. De jobs worden parallel uitgevoerd; als ze allemaal succesvol uitgevoerd zijn gaat de pipeline verder naar de volgende stage. Deze jobs en stages kunnen van alles omvatten, maar heel standaard zijn de build en test stages.

Hieronder zie je een schematische weergave van een pipeline uit een softwareproject van Freek Schoenmakers, een van onze Young Professionals. Deze pipeline bestaat in totaal uit drie stages (build, test en deploy) en vier jobs.

Freek_pipeline_1.png

In de build stage wordt een oplossing gecompileerd en wordt het resultaat eventueel opgeslagen als artifact. Vervolgens worden in de test stage twee jobs uitgevoerd. In deze jobs wordt een serie geautomatiseerde tests losgelaten op de artifacts van de build stage. De testresultaten worden opgeslagen als artifact en als alle tests succesvol doorlopen zijn is de job voltooid. Je ziet in het schema een test codestyle. De projectgroep had afgesproken om volgens een vaste stijl te werken, zodat alle code op elkaar lijkt en daardoor goed leesbaar is. De oplossing uit de build stage werd getest op deze codestyle. Dat scheelt de code reviewers een hoop tijd!

Als laatst wordt in het voorbeeld de deploy stage doorlopen. Hierbij wordt een release-build van de oplossing gecompileerd en bewaard. Op die manier is het heel makkelijk om een oudere versie opnieuw te downloaden en te vergelijken. Dit kan bijvoorbeeld handig zijn bij een vergadering met een opdrachtgever. Merk op dat hier in de deploy stage alleen een release-build gemaakt is. Voor dit project was niet meer nodig. Echter, in professionele omgevingen zou de deploy stage bijvoorbeeld de nieuwe versie naar een server kunnen uploaden en zo automatisch de server bijwerken.

“Pipelines bieden veel flexibiliteit en mogelijkheden rondom projectontwikkeling en automatiseren taken die anders veel tijd zouden kosten.”

Je kunt zelf met een kort script precies definiëren hoe de pipeline verloopt. Welke stappen moeten er worden doorlopen vóór het starten van de pipeline, welke stages bevat deze, uit welke jobs bestaat iedere stage, wat houdt elke job precies in, et cetera. Dit biedt veel flexibiliteit en mogelijkheden rondom projectontwikkeling en automatiseert taken die anders veel tijd zouden kosten.

Freek_pipeline_2a.png

In GitLab kun je overigens verschillende statistieken zien over de pipelines, zoals hiernaast en hieronder weergegeven. De statistieken die je hier ziet hebben betrekking op het softwareproject dat net beschreven is.

Freek_pipeline_2b.png

verschillen met GitHub

Niet alle services hebben deze pipeline tools op dezelfde manier geïntegreerd. Zo heeft GitHub externe services nodig, bijvoorbeeld Travis CI. Hierdoor ontstaat het risico om  een ‘radertje in de machine’ te worden. GitLab daarentegen zet de pipeline tools centraler neer, waardoor deze de bron vormen van alle activiteiten.

verschillen met Azure DevOps

Echter, ook bij GitLab is er nog altijd ruimte voor verbetering. Zo kan het gebruiksvriendelijker. Op dit moment maak je een configuratiebestand aan en vervolgens pikt GitLab dit bestand automatisch op. Ter vergelijking: Azure DevOps heeft hier een mooie grafische interface voor. Hier kun je gemakkelijk jobs en stages toevoegen en nieuwe pipelines configureren zonder direct in script bestanden te rommelen.

Een ander voordeel van Azure DevOps is dat het doorlopen van het deployment-proces beter is ingebouwd. Door deze integratie kunnen de resultaten van een pipeline gemakkelijk gedeployed worden zonder tussenkomst van een externe service. Dit is ook mogelijk in GitLab, maar daar zijn extra services voor nodig waardoor het minder eenvoudig is dan bij Azure. Zo is er bijvoorbeeld integratie mogelijk met Prometheus voor performance monitoring en Kubernetes voor clustermanagement.

Al met al zijn er veel voordelen van Continuous Integration en ik hoop je te hebben geïnspireerd om te profiteren van de services die GitLab hiervoor biedt. Meer informatie? Ga naar onze Continuous Delivery 3.0 of Continuous Intelligence pagina.

Introductie Ewan Klomp - DevOps Engineer / Continuous Delivery

20180815_195621.jpg

Hallo, mijn naam is Ewan Klomp en ben bij Search4Solutions werkzaam als Continuous Delivery Expert.

Als eerste Young Professional heb ik het programma en de groep zien groeien in professionaliteit en kennisdeling. We zijn begonnen met een kleine club informaticastudenten die een passie voor software development hebben. Inmiddels zijn we uitgegroeid tot een grote club young professionals die met passie aan onze projecten werken.

Zelf heb ik mij kunnen specialiseren op het gebied van Continuous Delivery, door intern een traineeship te volgen. Daarna met de opgedane kennis in het bedrijfsleven te stappen, in projecten die mij deze kennis liet benutten. Deze projecten waren leuk en succesvol. Eveneens heb ik in die tijd mijn studie Informatiekunde met veel plezier afgerond. 

Nu maak ik als Young Professional de stap naar voltijd. Ik kijk er zeer naar uit om deze stap te mogen maken en ik ben benieuwd wat het mij gaat brengen.

In de tussentijd wil ik mijn opgedane kennis delen met de community die we hebben opgebouwd. In de komende tijd komen er op deze pagina daarom artikelen die u zou kunnen helpen met uw Continuous Testing processen. Vorige week is een artikel uitgekomen over cross platform UI Testing met Xamarin als voorproefje op deze reeks.

In de volgende delen zal u meer kunnen lezen over AT testen, performance testen en A/B testing. Wilt u eerder meer weten? Neem dan contact met ons op.

Je applicatie hosten in containers

Het verplaatsen van de hosting van een eigen rekencentrum naar een cloud-omgeving kan veel besparing opleveren. Bedrijven verplaatsen daarom hun hosting op grote schaal naar de cloud.

Veel organisaties denken daarbij dat virtual machines dan de beste oplossing is. Jammer want ze missen dan de kans om software te hosten in containers. Hosten in containers heeft vele voordelen. In dit artikel leggen we uit wat containers zijn en wat de voor- en nadelen zijn van containers.

Wat zijn containers?

Een container biedt de mogelijkheid om het Operating Systeem te sharen over meerdere containers. Ze zijn daardoor veel goedkoper qua hosting dan virtual machines. 

Het Operating Systeem onder de container bevat alle benodigde libraries die een applicatie nodig heeft om te functioneren. De containers zelf zijn daardoor zeer compact en zijn binnen een paar seconden te creeren. Dit maakt ze niet alleen goedkoper, maar ook veel flexibeler.

Containerization is geen nieuw begrip. Het idee om de OS laag te virtualiseren bestaat al sinds begin deze eeuw. 

Het container framework ‘Docker’ heeft het begrip containers praktisch gepopulariseerd. Veel innovatieve bedrijven hebben Docker snel geadopteerd. 

 
VM_vs_Container_stack.png
 

De nadelen van containers.

Evenals de virtual machine niet de universele vervanger is van de fysieke server, is de container dit niet van de virtual machine. Beide technologieën hebben hun krachten. Containers floreren in een omgeving met microservices. Ze schalen mooi, doordat ze zeer snel te creeren zijn afhankelijk van het benodigde dataverkeer.

Containers zijn echter wel gevoeliger voor virussen doordat ze het onderliggende Operating Systeem delen. Ook kunnen ze diep reiken in het OS om überhaupt te functioneren. VM-instanties bieden deze controle en veiligheid wel. 

Overweeg containers

Bij veel bedrijven staat veiligheid op nummer één en kennis omtrent containers is vaak niet paraat, virtual machines zijn daarom een veilige keuze.

Jammer, want de toekomst van containers is veelbelovend en het zal niet lang duren voordat de meerderheid deze techniek adopteert, zoals dit nu gebeurt met VM-instanties in de cloud.

Meer informatie? Bekijk dan de volgende onderwerpen: Continuous Delivery 3.0, Cloud Software Engineering, Cloud Deployments en Testautomatisering.