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é.
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.
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.
"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 :
- Rendez-vous dans votre projet GitLab.
- Dans le menu latéral gauche, allez dans Settings > Repository.
- Cherchez la section Protected branches et cliquez sur le bouton Expand.
- Sélectionnez la branche à protéger (ex: main ou develop).
- Définissez qui a le droit de Merge et qui a le droit de Push.
- Cliquez sur le bouton Protect pour valider.
"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 :
-
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.
- 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.
"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.
29 commentaires
Au fait, pour ceux qui ont des erreurs de timeout, vérifiez votre fichier
config.tomlet augmentez lerequest_concurrencysi nécessaire.Oui, si la branche source est protégée, les mêmes règles de sécurité s'appliquent. C'est du gros verrouillage pour éviter les fuites.
Est-ce que le mode "Protected" s'applique aussi aux merges requests ?
T'as dû oublier l'étape de l'enregistrement. Lance
gitlab-runner registerpour lier ton binaire à ton instance GitLab.Le
gitlab-runner listme sort rien, pourtant il est bien installé.Ajoute l'utilisateur
gitlab-runnerau groupedockersur ta machine :J'ai un souci de permissions docker. Le runner me dit "permission denied" quand il essaie de pull une image.
Vérifie que ton Runner est bien assigné au projet dans l'interface. Parfois, il faut cliquer sur le bouton "Enable for this project" manuellement.
Merci pour le tuto, ça m'a sauvé. Par contre, mon runner ne veut pas exécuter les jobs "untagged" malgré l'option cochée.
Oui, va dans l'interface web, clique sur le crayon à côté du runner, change les tags et enregistre. Pas besoin de toucher à la machine physique.
Est-ce que je peux changer les tags d'un runner sans le supprimer et le refaire ?
Limite le nombre de jobs concurrents dans ton fichier de conf. Modifie la valeur
concurrenten haut du fichier :Comment je peux monitorer la charge de mon runner ? Il sature dès que j'ai trois builds en parallèle.
Oui, carrément. Tu peux en enregistrer autant que tu veux, ils seront tous listés dans ton
config.toml.Peut-on avoir plusieurs runners sur la même machine ?
Vérifie ton architecture avec
uname -a. Si t'es en 32 bits, t'auras des problèmes. Il faut absolument du 64 bits pour les versions récentes.Je galère avec l'installation sur une vieille Debian. Le binaire
gitlab-runnerne veut pas se lancer.Regarde si tu n'as pas activé le mode "Protected" sur tes variables alors que ton runner n'est pas sur une branche protégée. Ça bloque tout.
Mon runner tourne bien, mais il ne voit pas les variables d'environnement que j'ai définies dans le projet. Une idée ?
Non, rien à voir. Le verrouillage empêche le runner d'être utilisé par d'autres projets sur ton instance. Les tags, c'est pour router le job vers la bonne archi.
C'est quoi la diff entre
lock to current projectset les tags ? J'ai l'impression que ça fait la même chose.T'as peut-être un souci de réseau ou de certificat. Essaie de vérifier ton
config.tomlpour voir si l'URL est correcte.J'ai une erreur 403 quand j'essaie de register mon runner. Le token est bien celui donné par l'interface.
Utilise des tags spécifiques et désactive "Run untagged jobs" dans la config de tes runners partagés sur GitLab. Sinon, il prendra tout ce qui traîne.
Comment on fait pour forcer un job à ne pas utiliser les runners partagés ? Je veux que mon build tourne uniquement sur ma machine locale.