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