Comment configurer Minio en tant que cache partagé pour GitLab CI
Minio est un système de stockage d’objets auto-hébergé compatible avec les interfaces API Amazon S3. Dans ce guide, nous utiliserons Minio pour configurer la mise en cache partagée pour GitLab Runner comme alternative à une solution de stockage d’objets hébergée dans le cloud.
Sommaire
Quel est le problème?
Les pipelines GitLab CI prennent en charge un cache
pour accélérer les futures courses. Les caches sont stockés localement sur chaque instance d’exécution par défaut. Vous pouvez utiliser un fournisseur de stockage d’objets à la place pour activer le mode cache « partagé ».
La mise en cache partagée garantit que plusieurs tâches peuvent accéder simultanément au cache. L’accès simultané n’est pas pris en charge lorsque vous utilisez la mise en cache locale avec l’exécuteur de pipeline Docker. Cela peut entraîner une réduction des performances du pipeline en raison d’accès manqués au cache.
Bien que la restauration du cache soit conçue sur la base du « meilleur effort », ce qui signifie que vos travaux ne devraient pas exiger un cache inclut le contenu d’un travail antérieur, en pratique, de nombreuses personnes utilisent le cache
champ pour transmettre des données entre leurs emplois. Cela ne fonctionne pas actuellement lorsque vous avez plusieurs tâches qui s’exécutent en parallèle et que vous essayez de restaurer le même cache.
L’auto-hébergement d’une installation Minio avec votre instance GitLab vous permet de bénéficier d’une restauration de cache plus fiable qui fonctionne toujours de manière prévisible avec des tâches parallèles. Voici comment installer Minio et configurer GitLab Runner pour l’utiliser pour la mise en cache.
Installation de Minio
Minio Server peut être téléchargé en tant que binaire autonome ou .deb
et .rpm
paquets. Nous nous concentrons sur le paquet Debian dans ce guide. Si vous utilisez directement le binaire, vous devrez ajouter manuellement le script de service Minio à votre init
implémentation pour que Minio démarre avec votre machine.
Téléchargez et installez Minio .deb
en utilisant les instructions sur le site Web pour obtenir la dernière version. Cela ajoutera le serveur Minio à votre système et enregistrera sa définition de service.
Minio s’attend à exécuter comme le minio-user
utilisateur. Créez ce compte utilisateur maintenant :
sudo useradd -r minio-user -s /sbin/nologin
Créez ensuite un répertoire de données Minio. Tous les fichiers téléchargés dans votre magasin d’objets seront enregistrés à cet emplacement. nous utilisons /mnt/minio
aux fins de ce tutoriel. Utiliser chown
donner votre minio-user
propriété du répertoire.
sudo mkdir -p /mnt/minio sudo chown -R minio-user:minio-user /mnt/minio sudo chmod -R 0775 /mnt/minio
Création d’un fichier de configuration Minio
Minio charge automatiquement les valeurs de configuration à partir du /etc/default/minio
déposer. Créez ce fichier maintenant et ajoutez le contenu suivant :
MINIO_ROOT_USER="minio" MINIO_ROOT_PASSWORD="P@$$w0rd" MINIO_OPTS="--address :9600 --console-address :9601" MINIO_VOLUMES="/mnt/minio"
Les deux premières lignes définissent les informations d’identification pour l’utilisateur root initial de Minio. Remplacez le mot de passe par une valeur sécurisée.
le MINIO_OPTS
La ligne fournit les paramètres du serveur Minio. Nous définissons explicitement le port d’écoute sur 9600
(par défaut) et exposer la console Web de Minio sur 9601
. le MINIO_VOLUMES
La directive définit où Minio stockera vos données. Ceci est défini sur le répertoire configuré précédemment.
Remplacez la propriété de votre fichier de configuration par minio-user
suivant. Minio peut ne pas démarrer si la propriété est incorrecte :
sudo chown minio-user:minio-user /etc/default/minio
Démarrez le service Minio et accédez à la console Web dans votre navigateur à l’adresse localhost:9601
. Utilisez vos informations d’identification d’utilisateur racine pour vous connecter.
sudo service minio start
Configuration de Minio pour GitLab
L’étape suivante consiste à créer un bucket pour que GitLab y télécharge les caches de pipeline. Cliquez sur le lien « Seaux » dans la barre latérale de la Minio Console, puis sur le bouton bleu « Créer un seau » en haut à droite.
Donnez un nom à votre bucket et cliquez sur le bouton « Créer un bucket » en bas à droite. Aucune des fonctionnalités proposées ne sera disponible dans cette installation simpliste de Minio utilisant un seul disque local. Ils ne sont pas nécessaires car le contenu du bucket sera géré par GitLab Runner.
Une fois que vous avez créé votre bucket, rendez-vous sur la page « Utilisateurs » de la Minio Console. Cliquez sur « Créer un utilisateur » pour ajouter un compte d’utilisateur pour GitLab Runner. Bien que cela ne soit pas strictement requis, il s’agit d’une étape de bonne pratique, vous n’avez donc pas besoin de fournir à GitLab vos informations d’identification d’utilisateur racine.
Saisissez un nom d’utilisateur, par exemple gitlab
, dans le champ « Clé d’accès ». Fournissez un mot de passe sécurisé dans le champ « Clé secrète ». Attribuez au nouvel utilisateur le readwrite
politique dans la liste, puis cliquez sur le bouton « Enregistrer ». GitLab nécessite un accès en lecture-écriture pour pouvoir télécharger et récupérer vos données mises en cache.
Configuration de GitLab Runner
Vous pouvez maintenant intégrer Minio dans GitLab Runner. Ouvrez votre fichier de configuration GitLab Runner ; cela se trouve généralement à /etc/gitlab-runner/config.toml
pour les installations omnibus GitLab.
Trouvez le [runners.cache]
section et ajoutez les lignes suivantes :
[runners.cache] Type = "s3" Shared = true [runners.cache.s3] AccessKey = "gitlab" SecretKey = "P@$$w0rd" BucketName = "gitlab" Insecure = true ServerAddress = "192.168.0.1:9600"
Voici l’effet de ces valeurs :
Type
– Informe GitLab qu’un moteur de stockage de type S3 doit être utilisé.Shared
– Permet de partager le cache entre des tâches simultanées.AccessKey
etSecretKey
– Ceux-ci doivent correspondre aux informations d’identification du compte d’utilisateur Minio que vous avez créé dans la console Minio.BucketName
– Remplacez-le par le nom du compartiment que vous avez créé dans la console Minio.Insecure
– Permet à GitLab d’accéder à Minio via HTTP simple. Si vous comptez utiliser votre serveur Minio à des fins supplémentaires, vous devez suivre la documentation pour configurer HTTPS pour votre installation.ServerAddress
– Ajoutez l’adresse IP de votre serveur ici. Cela informe GitLab des détails de connexion du serveur S3.
Redémarrez le service GitLab Runner pour vous assurer que vos modifications prennent effet :
sudo gitlab-runner restart
Exécutez vos tâches CI
Vos tâches CI devraient maintenant extraire et pousser les caches définis dans votre .gitlab-ci.yml
jusqu’à votre serveur Minio. Cela permet d’utiliser des caches partagés accessibles sans difficulté par des travaux parallèles.
Lorsque tout fonctionne, vous verrez un Uploading cache.zip
dans vos journaux de travail CI qui montre que GitLab utilise votre serveur de stockage d’objets. Les travaux suivants qui font référence au cache doivent inclure cache.zip is up to date
et successfully extracted cache
près du haut de la bûche.
Vous pouvez parcourir les caches actuellement stockés en inspectant votre compartiment dans la console Minio. Cela vous offre également un moyen pratique de vérifier l’utilisation du disque et de supprimer les anciens caches pour libérer de l’espace. GitLab crée un répertoire pour chacun de vos ID de projet. Dans ce dossier, vous trouverez des archives ZIP contenant vos caches, chacune nommée par branche et le nom de cache donné dans votre .gitlab-ci.yml
.
Conclusion
Minio est facilement configuré comme une installation de base qui fonctionne comme un cache partagé pour GitLab Runner. Cela garantit que le cache est utilisé de manière fiable lorsque plusieurs tâches s’exécutent simultanément. C’est un ajout intéressant à votre installation GitLab auto-hébergée.
Bien que, dans de nombreux cas, la mise en cache partagée améliore les performances, sachez que cela peut ne pas être universellement vrai. Il ajoute des frais généraux supplémentaires au processus de pipeline car GitLab Runner doit compresser le cache de votre tâche et le télécharger sur Minio avant d’enregistrer un résultat réussi. Lorsqu’un travail ultérieur restaure le cache, le ZIP devra être extrait de Minio et décompressé avant que votre script puisse commencer. Cela vaut la peine de surveiller vos propres pipelines après être passé au stockage d’objets pour vérifier que vous obtenez les résultats que vous attendiez.