Utiliser la registry de conteneur de Gitlab
Disponible même dans la version libre de gitlab, un registre de containers est complètement intégré à Gitlab et permet donc de stocker vos images docker, podman et autres.
Il se trouve dans le menu Packages et Registries > Container Registry.
S’authentifier auprès du container registry Gitlab
Avant de pouvoir envoyer des images, vous devez vous authentifier auprès du Container Registry.
Vous pouvez utiliser votre mot de passe ou générer un Personal Access Token ou
encore un deploy token. Je vais prendre ici un PAT. Pour cela il suffit de se
rendre dans le menu Access Tokens de votre profil utilisateur.
docker
Il faut bien donner les droits api
+ read_registry
et write_registry
. Donnez lui
un nom et une date de validité si besoin.
Conversez bien votre token nous le stockerons plus tard dans les variables d’un CI.
Créer et envoyer des images dans le container registry Gitlab
Nous allons prendre en exemple une image contenant l’outil que nous avons vu récemment ansible-lint dont voici le dockerfile.
Pour ceux qui ne connaissent pas l’utilisation étapes multiples pour créer des images avec une taille contenu, je vous renvoie à ce billet. Le principe est simple on utilise des containers temporaires pour builder des outils et on recopie dans un autre container les répertoires utiles. Cela permet par exemple ici de passer d’une image avec une taille de 1.9Gb à 453Mo. Le reste est très classique.
Pour stocker vos containers vous avez le choix de les stocker au niveau d’un projet ou d’un groupe. Cela va simplement changer le chemin de l’url. Quand vous allez la première fois dans le menu container registry, gitlab vous indique le chemin.
Si il contient deja des images il suffit de déplacer la souris au dessus de l’une d’entre elles.
Lançons le build :
lastversion ↗ est outil python permettant de récupérer la dernière release d’un projet. Ici je récupère la dernière version de l’outil ansible-lint. Son installation est simple :
Personnellement je l’utilise dans mon environnement virtuel pyython ansible construit avec pyenv.
Au bout de quelques minutes vous devriez obtenir votre image. Il ne reste plus qu’à la pousser:
Mettre en place un ci pour construire vos images
Voici un exemple de fichier .gitlab-ci.yml pour générer l’image et la stocker dans votre container registry.
Il faudra juste avant créer deux variables masquées dans les settings CI-CD du groupe ou du projet :
Pour optimiser les temps de traitement je vous laisse créer une image qui reprends les commandes présentes dans le before_script. Ensuite à remplacer dans le .gitlab-ci.yml l’image utilisé avec la votre.
Encore quelques releases et on pourra de passer de nexus ou d’artifactory.
Utiliser une images stockées dans le container registry Gitlab
C’est assez classique. Je lance par exemple l’image ansible-lint
La même chose sur un playbook.
Quelques petites corrections à apporter.
Si vous souhaitez surcharger l’entrypoint ca donne ceci :
Plus d’infos dans la documentation gitlab ↗