Logo de Béjean Développement

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