Agence web » Actualités du digital » Comment activer le proxy de dépendance de GitLab pour les images Docker –

Comment activer le proxy de dépendance de GitLab pour les images Docker –

Graphique montrant le logo GitLab, une tête de renard stylisée

GitLab a un proxy de dépendance intégré qui met en cache les images Docker en amont. Anciennement une fonctionnalité premium, Dependency Proxy a été open-source et mis à disposition de toutes les versions de GitLab en novembre 2020 dans le cadre de GitLab 13.6.

Le proxy de dépendance se comporte comme un cache d’extraction pour les images Docker stockées sur Docker Hub. La configuration du proxy de dépendance peut accélérer vos pipelines et vous aider à rester dans les limites de taux de Docker.

Activation du proxy de dépendance

La disponibilité de Dependency Proxy est contrôlée par un paramètre au niveau de l’instance. L’activation du proxy de dépendance nécessite la reconfiguration de GitLab. Cela entraînera une brève période d’indisponibilité.

Pour activer la fonction, ajoutez la ligne suivante à votre installation /etc/gitlab/gitlab.rb déposer:

gitlab_rails["dependency_proxy_enabled"] = true

Enregistrez le fichier et exécutez la commande suivante dans votre terminal:

sudo gitlab-ctl reconfigure

Les instructions ci-dessus concernent les installations GitLab Omnibus. Si vous avez installé à partir de la source, le proxy de dépendance doit être activé dans votre config/gitlab.yml déposer.

Utilisation du proxy de dépendance

Dependency Proxy fonctionne uniquement avec les groupes GitLab. Vous ne pouvez actuellement pas l’utiliser avec des projets personnels autonomes.

La fonctionnalité est normalement utilisée dans les scripts de pipeline CI. Lors du référencement d’une image dans un pipeline, préfixez le nom Docker Hub de l’image avec le CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX variable. Cette variable se résout automatiquement en l’URL du proxy de dépendance pour votre groupe GitLab actif.

image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/nodejs:latest

Ce pipeline exécutera son travail dans un nodejs:latest récipient. L’image sera extraite via le proxy de dépendance. Les exécutions de pipeline suivantes n’auront pas besoin d’atteindre Docker Hub à moins que l’image en amont ne change réellement.

Vous pouvez également accéder manuellement au proxy de dépendance, en dehors de GitLab CI. Vous devez vous authentifier avec docker login première. Vous devrez utiliser votre nom d’utilisateur et votre mot de passe GitLab, ou votre nom d’utilisateur et un jeton d’accès personnel.

docker login gitlab.example.com --username username --password password

Une fois authentifié, vous pouvez docker pull à l’aide du proxy de dépendance GitLab. Remplacer example-group dans l’URL ci-dessous avec le nom du groupe que vous souhaitez utiliser. L’image extraite sera mise en cache dans le proxy de dépendance de ce groupe.

docker pull gitlab.example.com/example-group/dependency_proxy/containers/nodejs:latest

Si vous utilisez également Container Registry de GitLab (pour stocker des images tu build), notez que Dependency Proxy est entièrement séparé et possède une URL différente. Alors que Container Registry est normalement exposé sur son propre sous-domaine (par exemple registry.example.com), Dependency Proxy est accessible via le même nom d’hôte que l’interface utilisateur Web GitLab.

Fonctionnement du proxy de dépendance

Le proxy de dépendance se présente comme un autre registre Docker. Lorsque vous souhaitez utiliser le proxy, vous docker login à lui et puis docker pull comme d’habitude.

Si le proxy de dépendance a déjà mis en cache l’image, il la retournera directement sans utiliser Docker Hub. Sinon, l’image est extraite de Docker Hub, mise en cache dans le proxy et renvoyée à votre CLI Docker.

GitLab essaiera de contacter Docker Hub pour chaque docker pull, même si une image mise en cache est disponible. En effet, le proxy doit vérifier si l’image a été mise à jour sur Docker Hub.

Cette procédure n’affecte pas la limitation de débit de Docker. Docker permet gratuitement HEAD demandes de comparaison des versions du manifeste d’image. Si Docker indique que l’image mise en cache est obsolète, GitLab extraira la nouvelle version (entraînant une atteinte de la limite de débit). Sinon, l’image mise en cache sera renvoyée, sans ajouter à votre décompte de limite de débit Docker Hub.

Ces caractéristiques rendent le proxy de dépendance idéal pour les pipelines CI. En vous connectant au proxy, vous pouvez en toute sécurité docker pull à chaque exécution de pipeline, sans atteindre la limite de débit Docker Hub.

Configuration des paramètres du proxy de dépendance

Dependency Proxy peut utiliser une quantité substantielle de stockage au fil du temps. Vous mettez en cache des images depuis Docker Hub; ces images peuvent être assez grandes en fonction de ce que vous utilisez.

GitLab vous permet de personnaliser l’emplacement de stockage. Met le dependency_proxy_storage_path mise en /etc/gitlab/gitlab.rb si vous souhaitez utiliser un lecteur de stockage dédié.

gitlab_rails["dependency_proxy_storage_path"] = "/mnt/my-storage-drive"

Les installations sources doivent définir le storage_path propriété dans le dependency_proxy section de config/gitlab.yml au lieu.

Vous pouvez également stocker vos images mises en cache sur un service de stockage d’objets tel qu’Amazon S3. Voici un exemple de configuration Omnibus dans /etc/gitlab/gitlab.rb:

gitlab_rails["dependency_proxy_object_store_enabled"] = true
 
# This is the S3 bucket name
gitlab_rails["dependency_proxy_object_store_remote_directory"] = "gitlab-dependency-proxy"
 
gitlab_rails["dependency_proxy_object_store_connection"] = {
    "provider" => "AWS",
    "region" => "eu-west-1",
    "aws_access_key_id" => "AWS_ACCESS_KEY_ID",
    "aws_secret_access_key" => "AWS_SECRET_ACCESS_KEY"
}

Pour améliorer les performances, GitLab mettra en cache les images localement, puis les téléchargera sur S3 en arrière-plan. Si vous préférez télécharger directement sur S3, définissez le dependency_proxy_object_store_direct_upload réglage sur true.

Vous devez reconfigurer GitLab (sudo gitlab-ctl reconfigure) après avoir modifié les paramètres de stockage. Le proxy de dépendance stockera ensuite les images mises en cache en utilisant votre nouvelle configuration.

Libérer du stockage

GitLab ne supprime jamais les données du proxy de dépendance mises en cache. Vous pouvez afficher le contenu d’un cache de groupes en sélectionnant Packages et registres> Proxy de dépendance dans sa barre latérale. Cet écran vous permet d’activer ou de désactiver le proxy de dépendance pour le groupe et de voir la taille totale des données stockées. Cependant, vous ne pouvez pas utiliser l’interface utilisateur pour effacer les anciens objets blob.

Si vous avez besoin de libérer de l’espace de stockage, vous devez utiliser l’API GitLab. Il existe un seul point de terminaison qui vous permet d’effacer toutes les données du proxy de dépendance stockées pour un groupe spécifique.

Créez un jeton d’accès personnel en cliquant sur votre profil en haut à droite, en cliquant sur «Jetons d’accès» dans la barre latérale gauche et en ajoutant un nouveau jeton d’accès avec le api portée.

Ensuite, utilisez curl pour supprimer le cache du proxy de dépendance d’un groupe:

curl --request DELETE --header "PRIVATE-TOKEN: <Access-Token>" https://gitlab.example.com/api/v4/groups/<Group-Id>/dependency_proxy/cache

Pour trouver votre ID de groupe, visitez la page d’accueil du groupe que vous souhaitez nettoyer. L’ID du groupe sera affiché à côté de son nom.

Conclusion

L’activation du proxy de dépendance est une étape simple qui améliore la résilience de vos pipelines. Si Docker Hub tombe en panne, le proxy fournira toujours à votre pipeline des versions d’image mises en cache.

Le proxy de dépendance vous aide également à respecter les limites de débit de Docker Hub. Vous n’aurez besoin d’extraire des images de Docker Hub que lorsqu’elles changent réellement. Pour une équipe active exécutant de nombreux pipelines chaque jour, cela peut vous éviter d’avoir à passer à un plan Docker Hub premium.

★★★★★