CI/CD met Gitlab

Een belangrijk deel van DevOps is CI/CD. Deze automatisering en monitoring zorgt ervoor dat een team meerdere malen per dag code kan deployen op een productie omgeving. Het is een vereiste om in deze tijden mee te kunnen met hoe de wereld en ook de gebruikers veranderen.

Gitlab is een versioning provider en heeft ook de mogelijkheid om een (groot) deel van de workflow in een project te automatiseren.

Voorstelling van weinig druk op een leiding door middel van een drukmeter

Onderdelen

In een vorige blogpost heb ik het gehad over PM2 en hoe je deze kan gebruiken om een simpele CI/CD pipeline op te zetten. Echter was de automatisatie (of het ontbreken ervan) een heel groot nadeel. Ook is het de verantwoordelijkheid van de developers om elke stap te doorlopen.

Gitlab

Gitlab is een systeem op basis van git waar men publieke en private repositiories (code) kan opzetten. Het grote verschil met een github of bitbucket is dat gitlab zich onderscheidt door features aan te bieden gericht op DevOps.

Kosten vergelijken

Zoals bitbucket en Github heeft Gitlab ook een gratis gedeelte en een betalend gedeelte.
De volgende vergelijking van de diensten duidt aan waarvoor men betaald bij elke provider:

 

 

BitBucket

  • Samenwerken met meer dan 5 personen
  • Test en bouw minuten (voor CI/CD)

Gitlab

  • Test en bouw minuten (voor CI/CD)
  • Support
  • Code kwaliteit checks

Github

  • Meer inzicht in wat er gebeurd in een project
  • Binnenkort ook CI/CD (Details nog niet gekend)

Zoals je merkt, heeft Bitbucket en Gitlab gelijkaardige voordelen als men betaalt voor de diensten. Echter vind ik persoonlijk dat het basis aanbod van Gitlab iets meer uitgebreid is.

Ook zeer interessant aan Gitlab zijn de zogenaamde pipeline runners die je zelf kan opstellen. Dit betekent dat je een eigen server ter beschikking stelt om testen en dergelijke te laten lopen. Doordat de server onder eigen beheer (en kost) is, hoef je niet te betalen aan Gitlab.

Laat het wel duidelijk zijn dat je niet een server kan opstellen voor de maandelijkse prijs van Gitlab... Het helpt wel met het duidelijk in kaart te houden van de kosten en zorgt ervoor dat testen altijd zullen lopen... Ook als de gratis test- en bouwminuten van Gitlab opgebruikt zijn.

Licht eind tunnel - voorstelling van CI CD pipeline

CI/CI pipeline

Door een CI/CD pipeline van Gitlab te starten, kan een automatische workflow van lokale ontwikkeling naar de productie tot stand gebracht worden. Indien gewenst kunnen er ook nog manuele stappen tussen zitten.
Zoals eerder aangehaald is het belangrijk om te weten dat gitlab een beperkt aantal minuten CI/CD pipelines in de gratis versie geeft. Toch is het opstellen van zo’n server kinderspel door de goede documentatie van Gitlab.
https://docs.gitlab.com/runner/

Voorbeeld

Het volgende voorbeeld gaat een connectie maken over ssh en een paar commando’s zal uitvoeren. Echter kan je wel kiezen bij installatie tussen ssh, docker,  docker-machine, kubernetes, virtual box, ...

 

stages:
  - app-staging-build
  - app-staging-deploy
  - app-manual-end

staging-build:
  stage: app-staging-build
  script:
    - ssh root@10.0.0.1 "cd /home/project/source && git fetch && git status"

staging-deploy:
  stage: app-staging-deploy
  script:
    - ssh root@10.0.0.1 "cd /home/project/source && git pull && npm install && pm2 reload ecosystem.config.js --env development"

manual-end:
  stage: app-manual-end
  script:
    - echo "DONE"
  when:
    - manual

In dit voorbeeld zie je duidelijk 3 stages of stappen.
Build, deploy en manual-end ... De manual-end zou bijvoorbeeld een manuele actie kunnen zijn om de code door te duwen naar de live of productie omgeving. In een ideale wereld is deze stap ook geautomatiseerd.

Conclusie

Het opzetten van een CI/CD pipeline is niet moeilijk. Het zorgt ervoor dat de werking van een development team enkel ten goede kan komen. Tevens zorgt het ervoor dat een project (ook na aflevering) snel kan aangepast worden.

Een CI/CD pipeline trekt de complexiteit van een project/architectuur weg van bij de developers.