Gitlab Dependency Proxy vs Docker pull limit

illustration de l'article

Depuis le mois de d’août 2020, Docker a instauré une limite de 100 pull que l’on peut faire gratuitement toutes les 6h. Comme chaque job Gitlab-CI nécessite le pull d’une image Docker, on peut vite se retrouver à dépasser cette limite, ce qui fera échouer vos jobs avec une erreur comme celle-ci :

ERROR: Preparation failed: failed to pull image "node:12.19" with specified policies [always]: toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit (manager.go:205:1s)

Afin de remédier à ce désagrément, il est possible de mettre à profit le Dependency Proxy de Gitlab. Il fonctionne comme un proxy local, qui permet de retourner une image en cache lorsqu’il reçoit une requête

Il est utilisable depuis la version 11.11 et est activé par défaut.

Voir la documentation ici

Définir l’image d’un job

Il suffit de préfixer l’image choisie pour le job avec l’url du proxy, par exemple :

# .gitlab-ci.yml
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/alpine:latest

Attention : les images doivent être présentes dans le Docker Hub pour que ça fonctionne

Utiliser Docker dans le script d’un job

Si vos jobs utilisent des commandes Docker dans leurs scripts, par exemple pour builder une image Docker ou faire un push vers un registry Docker, vous risquez de voir apparaître une erreur 403 lors de leur execution. Pour éviter cela il suffit de faire un docker login avant toute commande docker.

docker login ${CI_DEPENDENCY_PROXY_SERVER} --username ${CI_DEPENDENCY_PROXY_USER} --password ${CI_DEPENDENCY_PROXY_PASSWORD}

Les variables d’environnement utilisées ici sont fournies au job par Gitlab CI, il n’est donc pas nécessaire de se créer un user ou de récupérer un token.

Il est possible que vos scripts fonctionnent sans authentification. En effet, d’après la documentation Gitlab, l’authentification est nécessaire seulement depuis version 13.7.

Photo by Ian Taylor on Unsplash

Date

Auteur

Avatar Nicolas SAUVAGE

Nicolas SAUVAGE

Lead Developer

Catégories

craft cloud

Tags

#Docker #Gitlab