Par defaut, un GitLab Runner auto-heberge n’execute qu’un seul job a la fois. Lorsque vos pipelines CI/CD impliquent plusieurs etapes et jobs, cette execution sequentielle ralentit considerablement vos workflows. Voici comment augmenter le parallelisme.
Prerequis
- GitLab Runner version 15.x ou ulterieure installe sur votre infrastructure
- Un projet GitLab depuis lequel envoyer des jobs a executer
Augmenter la concurrence pour tous les runners
Par defaut, GitLab Runner configure concurrent = 1 dans /etc/gitlab-runner/config.toml. Pour modifier cela, editez le fichier de configuration et changez la valeur :
concurrent = 10
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
...
Cela permet jusqu’a 10 jobs simultanes sur l’ensemble des runners enregistres.
Augmenter la concurrence pour un runner en particulier
Pour augmenter l’execution de jobs en parallele pour un runner specifique, ajoutez le parametre request_concurrency :
[[runners]]
name = "electron"
url = "https://gitlab.com/"
id = 19200342
token = "Psz2ezrzeo5z5z4Z565ze"
token_obtained_at = 2022-11-21T14:01:33Z
token_expires_at = 0001-01-01T00:00:00Z
executor = "docker"
request_concurrency = 15
[runners.custom_build_dir]
Augmenter le nombre de runners
Une autre solution consiste a enregistrer plusieurs runners pour un meme projet. Le serveur GitLab distribuera alors l’execution des jobs parmi tous les runners disponibles.
Purger les images Docker inutilisees
Avec l’executeur Docker, la saturation du disque devient un probleme car les instances disposent generalement de 8 a 20 Go de capacite disque. Mettez en place un nettoyage regulier via une tache cron :
crontab -e
*/10 * * * * /usr/bin/docker system prune -a -f
Cette commande execute docker system prune toutes les 10 minutes pour recuperer de l’espace disque.
Conclusion
GitLab Runner est facile et rapide a deployer sur votre infrastructure, mais sa configuration par defaut limite significativement la vitesse d’execution des jobs par rapport aux runners partages de GitLab.com. Ajuster les parametres concurrent et request_concurrency est essentiel pour des workflows CI/CD efficaces.