Configuration avancée des Runners GitLab via config.toml

Maîtrisez le fichier de configuration des Runners GitLab pour gérer le parallélisme, les executors et la sécurité.

Configuration des Runners (Executors & config.toml)

Comprendre le concept d'Executor

Lorsque vous enregistrez un GitLab Runner, la question la plus importante qui vous est posée est le choix de l'Executor (l'exécuteur). Le Runner n'est que le messager, l'Executor est l'environnement réel dans lequel votre code va s'exécuter.

Trois exécuteurs dominent le marché DevOps :

  • Shell : Le code s'exécute directement sur la machine hôte du Runner. Très rapide, mais dangereux car les dépendances s'accumulent sur le serveur et les jobs peuvent interférer entre eux.
  • Docker : L'exécuteur standard et incontournable. Chaque job démarre dans un conteneur vierge et isolé, garantissant que "ça marche sur ma machine ET sur le serveur".
  • Kubernetes : Pour les infrastructures massives. Le Runner crée dynamiquement des "Pods" sur un cluster Kubernetes pour exécuter les jobs, offrant une scalabilité infinie.

Plongée dans le fichier config.toml

La véritable puissance d'un administrateur se trouve dans la configuration sous-jacente du Runner. Sous Linux, ce fichier se trouve généralement dans /etc/gitlab-runner/config.toml. C'est ici que vous définissez la capacité de charge de votre machine.

Augmenter la concurrence (Parallélisme)

Par défaut, un Runner n'exécute qu'un seul job à la fois. Si vous avez une machine puissante (ex: 8 cœurs, 32 Go de RAM), c'est un énorme gâchis. La variable globale concurrent permet d'augmenter cette limite.

# /etc/gitlab-runner/config.toml
concurrent = 4
check_interval = 3
log_level = "info"

[[runners]]
  name = "Docker-Runner-Production"
  url = "https://gitlab.com/"
  token = "glrt-XxYyZz1234"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "alpine:latest"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0

Explication des paramètres critiques :

  • concurrent = 4 : Ce Runner peut maintenant traiter jusqu'à 4 jobs de n'importe quel projet simultanément.
  • check_interval = 3 : Le Runner demandera à GitLab s'il y a du nouveau travail toutes les 3 secondes.
  • volumes = ["/cache"] : Indispensable pour que le système de cache (comme les dépendances Node.js ou Maven) persiste entre deux exécutions de conteneurs.

Le mode "Privileged" : Puissance et Danger

Dans la section [runners.docker], vous remarquerez le paramètre privileged = false. Si vous le passez à true, le conteneur exécutant votre job aura un accès quasi-complet au système hôte.

Alerte Sécurité (DevSecOps)

Activer le mode privilégié est souvent nécessaire pour exécuter Docker dans Docker (DinD), mais c'est un risque de sécurité majeur sur un Runner partagé. Ne l'activez que sur des Runners spécifiques dédiés à des projets de confiance. On lui préfère des alternatives "Daemonless" comme Kaniko.

Appliquer les modifications

Contrairement à beaucoup de services Linux, il n'est pas toujours nécessaire de redémarrer brutalement le Runner après une modification du config.toml. Le processus lit le fichier régulièrement. Cependant, pour forcer la prise en compte immédiate, utilisez la commande :

sudo gitlab-runner restart

Conclusion

Maîtriser les Executors et le fichier de configuration config.toml vous permet de transformer une simple machine de calcul en une flotte de Runners taillés sur mesure pour votre architecture.

Maintenant que vos moteurs tournent à plein régime, il est temps d'écrire des partitions plus complexes. Dans le chapitre suivant, nous allons explorer les mots-clés avancés du fichier .gitlab-ci.yml.

Espace commentaire

Écrire un commentaire

Rejoignez la discussion

Vous devez être connecté pour poster un message.

25 commentaires

ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

N'oubliez pas de bien tester vos modifs en staging. Un mauvais config.toml peut paralyser toute votre CI/CD. Vérifiez toujours la syntaxe après chaque edit.

23/05/2026 à 18:40
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Non, un [[runners]] = un executor. Mais tu peux déclarer plusieurs sections [[runners]] dans le même config.toml pour gérer plusieurs types de jobs.

23/05/2026 à 11:47
marchal-franck
Membre Actif Secouriste
Avatar de marchal-franck
marchal-franck
Membre Actif Secouriste

Est-ce que je peux avoir deux executors différents sur le même runner ?

23/05/2026 à 03:53
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

C'est pas au runner de faire le ménage total, c'est à Docker. Ajoute un cron sur l'hôte qui fait un docker system prune -f.

22/05/2026 à 22:14

Mon runner Docker ne nettoie pas les conteneurs arrêtés. Mon disque est plein !

22/05/2026 à 15:20
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Expose les métriques Prometheus du runner. C'est natif, il suffit de configurer l'adresse d'écoute dans le fichier de config.

22/05/2026 à 09:26

Une idée pour monitorer l'usage CPU des runners ?

22/05/2026 à 04:53
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Content que ça aide. Par contre, n'abuse pas du check_interval trop bas, sinon tu vas spammer ton instance GitLab pour rien.

22/05/2026 à 00:48

Merci pour l'astuce sur le check_interval. Ça a réduit la latence au lancement des jobs.

21/05/2026 à 20:31
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Oui, tu dois l'ajouter dans la section [runners.docker]. Par défaut c'est 0, ce qui est trop faible pour du browser testing :

[runners.docker]
  shm_size = 268435456
21/05/2026 à 14:19

Quelqu'un a réussi à faire marcher le shm_size ? J'ai des erreurs de segmentation sur mes tests Selenium.

21/05/2026 à 07:13
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Tout est dit. Si tu veux de la vitesse avec Docker, configure bien tes volumes de cache dans le config.toml pour éviter de tout retélécharger à chaque fois.

21/05/2026 à 02:01
etienne04
Membre
Avatar de etienne04
etienne04
Membre

Le shell est plus rapide car il n'y a pas de pull d'image, mais c'est le bordel pour nettoyer les dépendances entre les builds. Docker est plus lent mais beaucoup plus propre.

20/05/2026 à 20:17
dorothee15
Membre
Avatar de dorothee15
dorothee15
Membre

C'est quoi la différence entre shell et docker pour le cache ? J'ai l'impression que le shell est plus rapide.

20/05/2026 à 14:03
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Vérifie la syntaxe, une simple erreur de quote ou de virgule dans le TOML fait planter le parsing. Teste ta config avec gitlab-runner verify.

20/05/2026 à 06:37

J'ai fait une modif dans le fichier et sudo gitlab-runner restart ne change rien. Le runner reste en mode dégradé.

20/05/2026 à 02:10
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Utilise les limites Docker directement dans ton config.toml :

[runners.docker]
  memory_limit = "2g"
  cpus = "2"
19/05/2026 à 19:31
ugautier
Membre
Avatar de ugautier
ugautier
Membre

Comment je peux limiter la RAM par job ? Avec concurrent = 4, mes jobs finissent par tuer le serveur hôte.

19/05/2026 à 14:10
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Exact. Tente de forcer pull_policy = "always" dans la config pour être sûr qu'il ne cherche pas une image locale inexistante.

19/05/2026 à 09:07

T'as vérifié ton /etc/gitlab-runner/config.toml ? Peut-être que ton pull_policy est mal configuré dans la section [runners.docker].

19/05/2026 à 03:29

Help, j'ai une erreur image pull backoff sur mes jobs alors que mon config.toml pointe bien sur le bon registry. Je sèche.

18/05/2026 à 20:24
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Oui. Si un job est compromis, l'attaquant a accès au socket Docker de l'hôte. À ne jamais faire en prod sur un runner mutualisé. Regarde du côté de Kaniko pour build tes images sans privilèges.

18/05/2026 à 12:47
madeleine06
Membre
Avatar de madeleine06
madeleine06
Membre

J'ai testé le mode privileged = true pour faire du Docker-in-Docker. Ça fonctionne, mais j'ai peur pour la sécurité. C'est vraiment si risqué que ça ?

18/05/2026 à 05:42
ajdaini-hatim
Auteur Rédacteur Secouriste Actif
Avatar de ajdaini-hatim
ajdaini-hatim
Auteur Rédacteur Secouriste Actif

Vérifie tes logs avec journalctl -u gitlab-runner. Si tu as plusieurs runners enregistrés dans le même fichier, assure-toi de bien modifier la valeur globale en haut du fichier et non juste pour un runner spécifique.

17/05/2026 à 23:42

Super article. J'ai un souci avec mon config.toml, le service ne veut pas monter en charge. J'ai mis concurrent = 10 mais il ne prend qu'un seul job. Une idée ?

17/05/2026 à 18:46

Rejoindre la communauté

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

S'inscrire