Gitlab Runner

Pourquoi les GitLab Runners Auto-Hébergés Sont Lents et Comment les Optimiser

Guénolé Delanoë
·
August 19, 2023

L'intégration et le déploiement continus (CI/CD) ont révolutionné le processus de développement logiciel. Les runners GitLab jouent un rôle crucial en automatisant la pipeline de déploiement en exécutant les tâches CI/CD. Cependant, de nombreux développeurs constatent que leurs runners GitLab auto-hébergés ne sont pas aussi performants qu'ils devraient l'être. Explorons les raisons de cette inefficacité et comment les résoudre pour améliorer les performances de votre pipeline CI/CD GitLab.

Ressources Matérielles Insuffisantes

Une raison courante des performances lentes des runners GitLab auto-hébergés est le manque de ressources matérielles. Lorsque vos tâches CI/CD nécessitent une forte puissance CPU, de la RAM ou de l'espace disque, des ressources insuffisantes peuvent sévèrement affecter les performances des runners. Voici quelques étapes pratiques pour optimiser vos runners GitLab :

Exemple : Mise à Niveau des Ressources Matérielles

Avant l'optimisation :

Un runner avec des ressources minimales pourrait ressembler à ceci :

[[runners]]
 name = "Minimal Runner"
 url = "https://gitlab.example.com/"
 token = "votre-token"
 executor = "shell"
 limit = 1
 [runners.custom_build_dir]
 [runners.cache]
   [runners.cache.s3]
   [runners.cache.gcs]

Après l'optimisation :

Améliorez les ressources matérielles de votre runner pour mieux gérer les charges de travail CI/CD :

[[runners]]
 name = "Optimized Runner"
 url = "https://gitlab.example.com/"
 token = "votre-token"
 executor = "shell"
 limit = 4
 [runners.custom_build_dir]
 [runners.cache]
   [runners.cache.s3]
   [runners.cache.gcs]
 [runners.machine]
   IdleCount = 2
   MachineDriver = "digitalocean"
   MachineName = "gitlab-runner-%s"
   MachineOptions = [
     "digitalocean-access-token=your-do-token",
     "digitalocean-size=s-2vcpu-4gb",
     "digitalocean-image=ubuntu-20-04-x64"
   ]

Explication :

Augmenter le nombre de tâches simultanées (limit) et utiliser un type d'instance plus puissant (par exemple, s-2vcpu-4gb) fournit un gain de performance considérable. Cela permet au runner de gérer plus de tâches simultanément et de réduire le temps nécessaire pour chaque tâche CI/CD.

Goulots d'Étranglement Réseau

Un autre problème fréquent qui affecte les performances des runners GitLab est les goulots d'étranglement réseau. Les tâches CI/CD nécessitent souvent de télécharger des dépendances, de téléverser des artefacts et de communiquer avec d'autres services, ce qui dépend d'une connexion réseau stable et rapide. Voici comment optimiser votre infrastructure réseau :

Exemple : Optimisation de la Configuration Réseau

Avant l'optimisation :

Un runner ayant des problèmes de réseau pourrait montrer des signes tels que des téléchargements ou téléversements lents :

# Exemple de téléchargement lent
curl -O https://example.com/largefile.zip

Après l'optimisation :

Investissez dans une connexion Internet rapide et stable, et, si possible, utilisez une ligne réseau dédiée uniquement pour les opérations CI/CD :

# Exemple de téléchargement plus rapide utilisant des connexions parallèles
aria2c -x 16 https://example.com/largefile.zip

Explication :

Assurer une connexion réseau fiable et rapide minimise les retards causés par les goulots d'étranglement réseau. Utiliser des outils comme aria2 pour des téléchargements parallèles peut également aider à optimiser l'utilisation du réseau.

Erreurs de Configuration

Les erreurs de configuration peuvent également contribuer à la lenteur des runners GitLab. Des variables d'environnement incorrectement définies, des paramètres de runner sous-optimaux ou des configurations de cache défectueuses peuvent tous nuire à l'efficacité. Voici comment examiner et optimiser vos configurations de runner :

Exemple : Correction des Problèmes de Configuration

Avant l'optimisation :

Un runner mal configuré pourrait avoir des paramètres de cache inefficaces ou des variables d'environnement incorrectes :

variables:
 GIT_STRATEGY: fetch
 GIT_SUBMODULE_STRATEGY: recursive

cache:
 paths:
   - node_modules/

Après l'optimisation :

Optimisez les paramètres de cache et les variables d'environnement pour améliorer les performances :

variables:
 GIT_STRATEGY: clone
 GIT_SUBMODULE_STRATEGY: none

cache:
 key: "$CI_COMMIT_REF_SLUG"
 paths:
   - node_modules/
   - .m2/repository

Explication :

Utiliser la stratégie clone au lieu de fetch peut être plus rapide pour certains dépôts. De plus, configurer correctement les chemins et les clés de cache garantit que les dépendances sont réutilisées efficacement, réduisant ainsi les temps de build.

Scripts de Build Inefficaces

Des scripts de build mal optimisés peuvent ralentir considérablement votre pipeline CI/CD. Refactorer vos scripts de build peut améliorer cette situation. Éliminez tout code inutile, optimisez votre logique et simplifiez vos scripts pour exécuter les tâches CI/CD aussi rapidement que possible.

Exemple : Refactorisation des Scripts de Build

Avant l'optimisation :

Un script de build avec des étapes inutiles et une logique inefficace :

# build.sh
echo "Starting build..."
sleep 10
npm install
npm run build

Après l'optimisation :

Simplifiez le script de build pour éliminer les délais inutiles :

# build.sh
echo "Starting build..."
npm ci
npm run build

Explication :

Remplacer npm install par npm ci (qui est plus rapide et plus fiable pour les environnements CI) peut accélérer considérablement le processus de build en assurant des installations propres basées sur package-lock.json.

Accélérer le CI/CD avec la Parallélisation

Exécuter des tâches de manière séquentielle plutôt qu'en parallèle peut entraîner des retards dans votre pipeline CI/CD. La parallélisation permet à plusieurs tâches de s'exécuter simultanément, maximisant ainsi l'utilisation des ressources du serveur et réduisant le temps de complétion du pipeline.

Exemple : Activation de la Parallélisation

Avant l'optimisation :

Exécution séquentielle des tâches dans un pipeline CI/CD :

stages:
 - build
 - test
 - deploy

build:
 stage: build
 script:
   - ./build.sh

test:
 stage: test
 script:
   - ./test.sh

deploy:
 stage: deploy
 script:
   - ./deploy.sh

Après l'optimisation :

Activez l'exécution des tâches en parallèle :

stages:
 - build
 - test
 - deploy

build:
 stage: build
 script:
   - ./build.sh

unit_test:
 stage: test
 script:
   - ./unit_test.sh

integration_test:
 stage: test
 script:
   - ./integration_test.sh

deploy:
 stage: deploy
 script:
   - ./deploy.sh


Explication :

En configurant plusieurs tâches au sein de la même étape pour s'exécuter en parallèle, vous pouvez réduire le temps total nécessaire à l'achèvement du pipeline. Cela permet une meilleure utilisation des ressources disponibles du runner et accélère le processus CI/CD.

Cloud-Runner : Une Solution Adaptée à Vos Besoins

Vous cherchez une solution plus simple pour accélérer vos runners GitLab ? Cloud-Runner propose des runners GitLab haute performance conçus pour les charges de travail CI/CD. Avec des ressources dédiées, une infrastructure optimisée et un support expert, Cloud-Runner garantit une exécution plus rapide des pipelines et des temps d'attente réduits. De plus, pour ceux ayant des instances GitLab auto-hébergées, Cloud-Runner peut configurer des VPNs vers votre réseau privé, permettant une communication transparente entre votre instance et le runner.

Découvrez comment Cloud-Runner peut transformer vos processus CI/CD et améliorer vos workflows de développement. Cliquez ici pour en savoir plus !

Untitled UI logotext
© 2024 Cloud-Runner. All rights reserved.