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, 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.