Mettre en place un GitLab Runner sous Ubuntu 22.04 LTS
Objectif
Installer et configurer un GitLab Runner
Pré-requis
Il faut disposer d'un accès à un serveur GitLab. Que ce soit en self-hosted ou dans le cloud. De mon côté, j'utilise un serveur GitLab hébergé au sein d'un cluster Proxmox.
Tutoriel
Installation
Pour le déploiement d'un Gitlab runner, nous aurons besoin d'un ordinateur ou d'une machine virtuelle. Dans mon cas, je vais procéder à l'installation au sein d'une machine virtuelle sous Ubuntu 22.04 LTS. Cette dernière sera déployée au sein de mon cluster Proxmox. Je vous invite à suivre mon article sur la création de templates avec Cloud-init. Cet article vous permettra de déployer rapidement des machines virtuelles.
Une fois déployée, nous installerons l'exécutable GitLab Runner ainsi que Docker.
Au lieu de détailler l'installation des logiciels, je vous ai mis les liens vers les documentations officielles.
Voici le lien vers la documentation de Gitlab sur l'installation d'un Gitlab Runner et le lien vers la documentation de Docker.
Une fois installé, il faut ajouter l'utilisateur gitlab-runner
au groupe docker
en lançant cette commande : /usr/sbin/usermod -aG docker gitlab-runner
.
Vous pouvez vérifier vos installations en lançant les commandes : gitlab-runner --version
pour le Runner et docker --version
pour Docker.
Le résultat de la commande gitlab-runner --version
est :
Version: 16.0.2
Git revision: 85586bd1
Git branch: 16-0-stable
GO version: go1.19.9
Built: 2023-06-02T17:31:27+0000
OS/Arch: linux/amd64
Le résultat de la commande docker --version
est :
Docker version 24.0.2, build cb74dfc
Enregistrement du GitLab Runner
Avant d'enregistrer le Runner dans GitLab, il faut disposer de l'URL du serveur GitLab et du token d'enregistrement. Vous pouvez les retrouver, soit au niveau d'un projet, soit au niveau d'un groupe. Pour ma part, j'enregistre mes runners dans les groupes.
Pour enregistrer un Runner dans GitLab, il faut être authentifié en root
sur votre machine et lancer la commande : gitlab-runner register
.
En lançant cette commande, vous aurez un questionnaire à renseigner avec l'URL du serveur GitLab, le token, la description du Runner, les tags associés, le type d'exécution...
Dans mon cas, j'ai créé un Runner Docker, j'ai renseigné l'image Docker par défaut que je souhaite utiliser.
Une fois enregistré, les paramètres que vous avez renseignés sont stockés dans le fichier de configuration /etc/gitlab-runner/config.toml
.
Enregistrer plus rapidement
Il est possible d'enregistrer un Runner plus rapidement en lançant la commande :
gitlab-runner register \
--non-interactive \
--url "https://url/" \
--registration-token "XXX" \
--executor "shell" \
--description "Shell Runner" \
--tag-list "shell" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"
Après chaque enregistrement en ligne de commande, il faut relancer le service gitlab-runner : gitlab-runner restart
.
Configuration avancée
Vous avez la possibilité de modifier le fichier de configuration. Voici le lien vers la documentation de GitLab.
Vous pouvez modifier le nombre de jobs lancés simultanément en changeant la valeur de concurrent
. Une fois modifié, il sera nécessaire de redémarrer le GitLab Runner en lançant la commande gitlab-runner restart
, toujours avec l'utilisateur root
.
Tester le GitLab Runner
Pour tester le Runner, il faut créer un projet GitLab dans le groupe où le Runner est enregistré.
Depuis l'interface graphique de GitLab, ajouter un nouveau fichier nommé .gitlab-ci.yml
et enregistrer le.
Insérer le contenu suivant dans le fichier .gitlab-ci.yml
:
stages:
- test
docker:test:
stage: test
tags:
- shell
before_script:
- docker --version
script:
- docker ps
Dès que vôtre commit
sera effectué, ainsi que le push
vers le dépôt, un pipeline
sera lancé content un job
. Le résultat du job devrait être :
Running with gitlab-runner 16.0.2 (775dd39d)
on Shell Runner XXX
Preparing the "shell" executor
Using Shell executor...
Preparing environment
Running on XXX...
Getting source from Git repository
Fetching changes with git depth set to 50...
Dépôt Git vide initialisé dans /home/gitlab-runner/builds/XXX/0/XXX/.git/
Created fresh repository.
Checking out a694a02f as master...
Skipping Git submodules setup
Executing "step_script" stage of the job script
$ docker --version
Docker version 24.0.2, build cb74dfc
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Cleaning up file based variables
Job succeeded