Mettre en place un GitLab Runner

Objectif

Installer et configurer un GitLab Runner

Pré-requis

Il faut disposer d'un accès à un serveur GitLab. De mon côté, j'utilise un serveur GitLab hébergé en local.

Tutoriel

Installation

Pour l'article, nous aurons besoin d'un ordinateur, ou d'une machine virtuelle, ayant GitLab Runner et Docker installés.

Au lieu de détailler l'installation des logiciels, je vous ai mis les liens vers les documentations officielles. De mon côté, j'ai utilisé une machine virtuelle avec Debian Buster où j'ai procédé aux installations ci-dessous.

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.

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 votre 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 13.8.0 (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 20.10.2, build 2291f61
$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
Cleaning up file based variables
Job succeeded