Configurer les GitLab Runners comme moteurs de votre CI/CD

Installez, enregistrez et optimisez vos GitLab Runners pour exécuter efficacement vos jobs de test automatisés.

Configurer les GitLab Runners : Le moteur de vos automatisations

Le moteur de vos automatisations

Un GitLab Runner est une instance d'exécution qui traite les tâches (jobs) envoyées par GitLab. Comme nous l'avons vu précédemment, GitLab est le "cerveau" qui stocke le code et les Runners sont les bras qui compilent, testent et déploient vos applications.

De nos jours, la flexibilité est totale : vous pouvez installer des Runners sur vos propres serveurs (Ubuntu), sur des machines Windows, ou utiliser des instances éphémères dans le cloud. Une fois installé, un Runner doit être enregistré auprès de votre instance GitLab pour commencer à travailler.

Information importante

Pour rappel, nous avons déjà configuré les Runners lors de la mise en place initiale de notre environnement GitLab. Si vous n'avez pas encore effectué cette installation ou si votre Runner n'est pas actif, je vous invite à revenir sur les chapitres précédents pour finaliser cette étape avant de poursuivre.

Types de Runners : Partagés vs Spécifiques

Selon vos besoins techniques et de sécurité, vous pouvez choisir entre deux grandes catégories de Runners.

Les Runners Partagés (Shared Runners)

Ces machines sont disponibles pour tous les projets de votre instance GitLab. Ils sont parfaits pour les tâches génériques (tests unitaires, analyse de code) qui ne nécessitent pas de configuration matérielle particulière. Ils permettent de centraliser la maintenance : une seule mise à jour du Runner profite à toute l'équipe.

Les Runners Spécifiques (Specific Runners)

Ils sont dédiés à un seul projet. C'est le choix idéal si votre application nécessite des dépendances lourdes, un accès matériel spécifique (GPU) ou des clés de sécurité que vous ne souhaitez pas partager. Ils fonctionnent sur le principe FIFO (First In, First Out) : le premier job arrivé est le premier servi.

Vérifier l'état d'un Runner enregistré

Information

Ces commandes de diagnostic doivent être tapées directement sur la machine physique (ou virtuelle) qui héberge le Runner, et non sur votre serveur GitLab principal.

Pour vous assurer que le service est bien actif et prêt à recevoir des ordres, utilisez la commande suivante :

gitlab-runner status

Résultat :

Runtime platform                                    arch=amd64 os=linux pid=4521 revision=de7731d1 version=17.10.0
gitlab-runner: Service is running

Si vous voulez voir tous les exécuteurs enregistrés sur cette machine spécifique, listez-les avec :

gitlab-runner list

Résultat :

Listing configured runners                          ConfigFile=/etc/gitlab-runner/config.toml
Runner-Production-01                                Executor=docker Token=glrt-tXy87PaL URL=https://gitlab.example.com

Le conseil du SysAdmin

Si le statut affiche Service is running, cela signifie que votre "ouvrier" est bien réveillé. Si vous voulez vérifier s'il est bien connecté au "cerveau", c'est dans l'interface web de GitLab (Settings > CI/CD > Runners) qu'il faudra regarder si la pastille est verte.

Verrouiller un Runner spécifique

Pour éviter qu'un Runner dédié ne soit activé par erreur sur d'autres projets, vous pouvez le "verrouiller".

Rendez-vous dans votre projet, puis dans Settings > CI/CD. Dépliez la section Runners. Vous y verrez vos Runners activés. Cliquez sur l'icône du crayon (éditer) à côté du Runner concerné.

Édition d'un Runner dans GitLab

Sur l'écran de configuration, cochez l'option Lock to current projects et validez avec Save changes. Ce Runner ne pourra désormais plus être assigné à un autre dépôt sans une action manuelle de votre part.

Option de verrouillage du Runner

Sécurité : Les Runners Protégés (Protected)

De nos jours, la sécurité des déploiements est prioritaire. Un Runner Protégé ne peut exécuter des jobs que sur des branches elles-mêmes protégées, comme la branche main.

C'est une protection cruciale : cela empêche un utilisateur malveillant de créer une branche de test pour tenter d'extraire des secrets de production (mots de passe, clés d'API) via le Runner. Pour l'activer, suivez la même procédure d'édition que pour le verrouillage et cochez Protected.

Activation du mode Protected sur un Runner

"Un Runner protégé est le gardien de votre branche main"

Qu'est-ce qu'une branche protégée ?

Par défaut, n'importe quel utilisateur ayant le rôle Developer peut pousser du code ou supprimer une branche sur un dépôt. Dans un contexte professionnel, laisser la branche principale (souvent main) sans surveillance est un risque majeur pour la stabilité de la production.

Une branche protégée est une branche sur laquelle GitLab applique des restrictions de sécurité strictes. Elle permet de garantir que :

  • Le Push direct est interdit : Personne ne peut envoyer de code directement sur la branche sans passer par une Merge Request validée.
  • La suppression est impossible : Même par erreur, la branche ne peut pas être effacée du serveur.
  • Le contrôle des fusions : Seuls les utilisateurs ayant le rôle Maintainer (ou des rôles spécifiques autorisés) peuvent valider l'intégration du code.

Comment activer la protection d'une branche ?

GitLab protège généralement la branche par défaut lors de la création du projet, mais vous pouvez configurer ces règles manuellement :

  1. Rendez-vous dans votre projet GitLab.
  2. Dans le menu latéral gauche, allez dans Settings > Repository.
  3. Cherchez la section Protected branches et cliquez sur le bouton Expand.
  4. Sélectionnez la branche à protéger (ex: main ou develop).
  5. Définissez qui a le droit de Merge et qui a le droit de Push.
  6. Cliquez sur le bouton Protect pour valider.
Activer les branches protégées

"Activer les branches protégées"

Configurer et utiliser les Tags GitLab Runners

Pourquoi utiliser des Tags ?

Dans une infrastructure DevOps complète, vous disposez souvent de plusieurs Runners avec des capacités différentes. Les Tags (étiquettes) sont le mécanisme qui permet de faire correspondre un job spécifique avec le Runner le plus adapté.

Sans tags, GitLab envoie les jobs au premier Runner disponible qui accepte les jobs sans étiquette, ce qui peut mener à des échecs.

Comment configurer des Tags sur un Runner ?

La gestion des tags a radicalement changé. Elle se fait désormais en amont, directement depuis l'interface web de GitLab, avant d'enregistrer physiquement votre machine :

  1. Création du Runner sur GitLab :
    • Allez dans Settings > CI/CD > Runners.
    • Cliquez sur le bouton bleu New project runner.
    • Dans la section Tags, saisissez vos mots-clés (ex: docker, linux).
    • Cochez éventuellement Run untagged jobs si vous voulez qu'il accepte aussi les tâches sans étiquette.
    • Cliquez sur Create runner.
  2. Enregistrement sur votre machine : GitLab vous fournira alors une commande toute prête avec un jeton (token). Copiez-la et collez-la dans le terminal de votre serveur (ou PC Windows). Les tags définis à l'étape 1 y seront automatiquement rattachés.

Information

Pour rappel, nous avons déjà effectué cette procédure lors de l'installation initiale au début de ce cours. Si votre Runner est déjà en ligne, vous pouvez modifier ses tags à tout moment en cliquant sur l'icône du crayon dans la liste de vos Runners sur GitLab.

Comment utiliser les Tags dans votre pipeline ?

Une fois vos Runners étiquetés, vous devez indiquer à votre fichier .gitlab-ci.yml quel Runner utiliser pour chaque job grâce au mot-clé tags.

Exemple de configuration YAML :

stages:
  - test
  - deploy

job_linux:
  stage: test
  tags:
    - docker  # Ce job cherchera un Runner possédant le tag "docker"
  script:
    - echo "Exécution sur Linux Docker"

job_windows:
  stage: test
  tags:
    - windows # Ce job attendra qu'un Runner Windows soit disponible
  script:
    - echo "Exécution sur serveur Windows"

Règle de sélection

Pour qu'un Runner accepte un job, il doit posséder tous les tags listés dans le job. Si vous mettez les tags "docker" et "linux", un Runner qui n'a que le tag "docker" ignorera la tâche.

Gérer les jobs sans étiquettes (Untagged)

Par défaut, les jobs dans votre fichier .gitlab-ci.yml peuvent utiliser des tags pour cibler un Runner précis. Mais que faire si un job n'a pas de tag ?

Vous pouvez configurer un Runner pour qu'il accepte de prendre en charge ces jobs "orphelins". Dans l'écran d'édition du Runner, cochez l'option Run untagged jobs.

Option Run untagged jobs

"Utile pour s'assurer que tous les petits jobs de test sont bien exécutés"

Le conseil du SysAdmin

Il est recommandé de toujours utiliser des Tags pour vos Runners. Cela permet de piloter précisément quel environnement de travail est utilisé pour chaque étape de votre pipeline.

Conclusion

La configuration des Runners est le dernier maillon technique pour rendre votre forge logicielle totalement autonome. Vous savez maintenant isoler vos ressources, sécuriser vos déploiements sur main et gérer la distribution des tâches.

De plus, l'utilisation rigoureuse des Tags est une pratique de "Clean CI". Elle garantit que chaque tâche s'exécute dans l'environnement prévu.

Votre infrastructure est prête. Dans le prochain chapitre, nous allons voir comment passer à la vitesse supérieure avec les usages avancés de GitLab CI.

Espace commentaire

Écrire un commentaire

Rejoignez la discussion

Vous devez être connecté pour poster un message.

15 commentaires

Concept des Shared vs Specific Runners, trop pertinent. On est passés aux Specific Runners pour toutes nos APIs critiques qui dépendent d'une version spécifique de JDK et qui ont besoin de leur propre mémoire allouée. La garantie FIFO est vitale pour le latency budget.

Modifié le 23/05/26 à 16:20
mathilde-tanguy
Membre actif
Avatar de mathilde-tanguy
mathilde-tanguy
Membre actif

J'ai vu ce pattern avec nos vieux projets Java et l'approche dédiée (Specific) a vraiment réduit les flakiness lors des tests de performance.

Par contre, il faut gérer le resource cleanup : un Runner dédié qui crashe, ça peut bloquer le pipeline pour tout le monde si le mécanisme de reap n'est pas parfait.

Modifié le 23/05/26 à 16:20
pdevaux
Membre
Avatar de pdevaux
pdevaux
Membre

⚠️ Attention sur la distinction Shared/Specific. Si le job ne demande rien de spécifique (juste npm ci et jest), un Shared Runner fera l'affaire 99% du temps. L'over-engineering des Specific Runners, ça coûte cher en maintenance.

Modifié le 23/05/26 à 16:20
jules32
Membre
Avatar de jules32
jules32
Membre

On a mis en place nos Specific Runners sur des machines avec accès GPU (NVIDIA). Sans ça, les tests ML/AI sont des cauchemars de timeout. Le confinement est un plus sécurité, surtout quand on touche à des librairies externes non maîtrisées.

Modifié le 23/05/26 à 16:20
rene50
Membre actif rédacteur
Avatar de rene50
rene50
Membre actif rédacteur

Super rappel sur la commande gitlab-runner status. C'est le diagnostic de base.

Mais l'info de l'interface web (pastille verte) reste le single source of truth. C'est ce qui nous dit si l'enregistrement auprès de GitLab a réussi, même si le service est running localement.

Modifié le 23/05/26 à 16:20
jacqueline-potier
Membre actif
Avatar de jacqueline-potier
jacqueline-potier
Membre actif

Le principe FIFO pour les Specific Runners est bien expliqué. Ça sécurise l'accès, mais attention à ne pas throttler volontairement les pipelines ! Si vous avez un flux de jobs très lourd, la queue de Specific Runners peut devenir un point de contention majeur.

Modifié le 23/05/26 à 16:20
jeannine-guyon
Membre actif
Avatar de jeannine-guyon
jeannine-guyon
Membre actif

Avez-vous considéré le docker executor avancé ? On utilise des images customisées pour injecter des dépendances système spécifiques (e.g., un build-essential précis, ou des bibliothèques libstdc++ versionnées) au lieu de se fier aux images de base des Runners.

Modifié le 23/05/26 à 16:20
dalexandre
Membre actif
Avatar de dalexandre
dalexandre
Membre actif

Je valide l'approche des docker executor pour la flexibilité matérielle. Ça nous a permis d'isoler totalement les environnements.

Petite question : si je configure un restart policy spécifique au niveau du service OS, est-ce que ça va entrer en conflit avec la logique de lifecycle management intégrée à gitlab-runner lui-même ?

Modifié le 23/05/26 à 16:20
umillet
Membre actif
Avatar de umillet
umillet
Membre actif

Le 'Conseil du SysAdmin' est gold. On oublie trop souvent qu'un service OS étant 'running' n'équivaut pas à 'registered et operational' dans l'instance GitLab. Vraiment crucial de vérifier les deux endroits.

16/05/26 à 15:30
margaret68
Membre
Avatar de margaret68
margaret68
Membre

Confirmer que la commande gitlab-runner list doit être faite sur la machine et non sur le client SSH, sinon tout le monde va bugger. Petit détail, mais critique en contexte de troubleshooting.

Modifié le 23/05/26 à 16:20

Le verrouillage (locking) des Runners spécifiques est une bonne pratique DevSecOps. Ça empêche les job rogue de contourner l'environnement sécurisé que vous avez mis en place (ex: accès aux secrets de production).

16/05/26 à 15:30
bnicolas
Membre actif secouriste
Avatar de bnicolas
bnicolas
Membre actif secouriste

J'ai dû passer par là il y a deux ans. Le piège, c'est d'oublier de synchroniser la configuration TOML. Si on change le tags ou l'executor localement, ça ne se répercute pas automatiquement sur le fichier de configuration global.

Modifié le 23/05/26 à 16:20
htanguy
Membre
Avatar de htanguy
htanguy
Membre

Pour les Runners qui doivent se connecter à des systèmes ultra-critiques, on ajoute un layer de vérification par certificate et on désactive toute communication HTTP/S simple. On passe en mTLS pour le handshake du Runner.

Modifié le 23/05/26 à 16:20

Les Runners dédiés qui gèrent des données sensibles doivent absolument être sur un réseau isolé et ne communiquer qu'avec les endpoints nécessaires. Le Shared Runner ne doit jamais avoir de droits de débogage sur la production.

16/05/26 à 15:30
celina54
Membre actif
Avatar de celina54
celina54
Membre actif

Si on parle de performance, l'optimisation du build dans le job lui-même (cache de dépendances, parallélisation des tests) aura toujours plus d'impact que de passer de Shared à Specific Runner. C'est la règle d'or CI.

Modifié le 23/05/26 à 16:20

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire