Runner
Een erg belangrijke component in Gitlab CI zijn de runners. Het zijn de werkpaarden van CI/CD: daar gebeurt het doorlopen van de pipelines.
Bij een abonnement op Gitlab.com zijn een beperkt aantal 'werk'-minuten inbegrepen in je abonnement, en hoef je die niet noodzakelijk zelf op te zetten.
We kiezen er in dit lab voor om met een lokale runner
te werken. Toch is dat in de meeste gevallen niet nodig en kan je gebruik maken van de runners die gitlab ter beschikking stelt.
Zelfs als zou blijken dat een aangeboden runner van gitlab.com onvoldoende snel is kan je ook daar kiezen voor runners met meer resources. ==> Types beschikbare runners van gitlab.com
Met een aangepaste Runner Tag
kan je dan "zwaardere" runners kiezen of zelfs GPU-enabled runners.
Voor deze opgave werken we met een lokale Gitlab runner
, en dan is het nodig om deze runner zelf te installeren.
Voor de installatie zijn er verschillende mogelijkheden:
- In een container
- Door de executable manueel uit te voeren
- door de installatie te doen via rpm/deb repositories
Wij zullen gebruik maken van een runner in een container. Zo is er een bepaalde graad van isolatie tussen wat uitgevoerd wordt door de runner, en het bovenliggend operating system.
Gebruik server1 voor het hosten van de runner.
Maak hiervoor eerst een volume aan. Dat is nodig om ervoor te zorgen dat de container ook bij het herstarten nog steeds z'n persistente data aan boord heeft..
docker volume create gitlab-runner-config
Start daarna de container met het gekoppelde volume:
docker run -d --name gitlab-runner --restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v gitlab-runner-config:/etc/gitlab-runner \
--env TZ=Europe/Brussels \
gitlab/gitlab-runner:latest
Deze runner moet uiteraard geregistreerd (gekoppeld) worden in Gitlab. Zo weet Gitlab welke runners beschikbaar zijn.
Je kan een runner registeren op projectniveau, of op groepsniveau (waarbij een runner dan door meerdere repositories in die groep kan gebruikt worden).
Wij kiezen voor een 'Project runner'
. Ga daarvoor in gitlab.com naar Settings -> CI/CD -> Runners
in je geforkte project dat ook gebruikt werd voor de Jenkins opgave.
Maar een nieuwe project runner aan en geef die een tag-naam
die je later zal gebruiken om te refereren naar deze runner (vb.: WS_IaC_CICD)
Je krijgt, na de aanmaak, het commando waarmee je de runner kan registeren (inclusief een authentication token).
Als de runner werd aangemaakt krijg je het commando (inclusief het token) dat je moet uitvoeren.
Dit commando moet uitgevoerd worden op de gitlab-runner, in ons geval een container. Zorg er dus voor dat je eerst in de container zit.
docker exec -it gitlab-runner bash
In de container kan je nu het gekregen commando uitvoeren:
gitlab-runner register --url https://gitlab.com --token glrt-cPVwZbK9........................
Volg de wizard:
- Geef de url van onze Gitlab-instance op: https://gitlab.com/
- Geef een naam op voor je runner: iac_runner_[voornaamnaam]
- De default executor die je kies is Docker. Een overzicht van de verschillende executors vind je op https://docs.gitlab.com/runner/executors/
- als default image gebruik je ubuntu. Als in een pipeline geen type container gespecifieerd wordt, zal deze image gebruikt worden. Het is uiteraard geen goed idee om daarop te vertrouwen: specifieer steeds het image-type in je pipeline voor reproduceerbare builds.
Je runner staat nu klaar, te wachten op instructies...