Exercice 02 : Pousser vers le Container Registry GitLab
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ S'authentifier au Container Registry GitLab avec
$CI_REGISTRY_USERet$CI_REGISTRY_PASSWORD - ✅ Construire une image Docker et la pousser vers
$CI_REGISTRY_IMAGE - ✅ Tagger l'image avec
$CI_COMMIT_SHORT_SHAetlatest - ✅ Vérifier l'image dans l'onglet Packages → Container Registry de GitLab
Durée estimée : 25 minutes
Difficulté : ⭐⭐⭐⭐☆ (Avancé)
Prérequis :
- Exercice Docker-in-Docker (gitlab-ci-debutant) complété
- Compréhension de docker build et docker push
📖 Contexte
Chaque projet GitLab dispose d'un Container Registry intégré et gratuit. L'URL du registry suit le format registry.gitlab.com/<namespace>/<projet>. GitLab injecte automatiquement les variables $CI_REGISTRY, $CI_REGISTRY_USER, $CI_REGISTRY_PASSWORD et $CI_REGISTRY_IMAGE dans chaque job, sans configuration manuelle.
📋 Énoncé
Créez un pipeline qui construit une image Docker pour une application Node.js et la pousse vers le Container Registry GitLab avec deux tags : le SHA du commit et latest. L'image doit être visible dans l'interface GitLab après le pipeline.
🧭 Déroulement de l'exercice
Tâche 1 : Préparer l'application et le Dockerfile
Créez une application Node.js minimaliste avec un Dockerfile. Vérifiez que le projet GitLab a bien le Container Registry activé (Settings → General → Visibility → Container Registry).
Indice :
`dockerfileFROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
`Le Container Registry est activé par défaut sur les projets GitLab.com.
Vérification : L'onglet "Packages & Registries → Container Registry" est visible dans la sidebar du projet.
Tâche 2 : Configurer le job avec Docker-in-Docker
Créez un job build-and-push avec image: docker:26, services: docker:26-dind et DOCKER_TLS_CERTDIR: "/certs". Ce job s'exécute uniquement sur main.
Indice : Rappel de la configuration DinD :
`yamlbuild-and-push:
image: docker:26
services:
- docker:26-dind
variables:
DOCKER_TLS_CERTDIR: "/certs"
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
`
Vérification : Le job démarre sans erreur de connexion au daemon Docker.
Tâche 3 : S'authentifier au Container Registry
Dans le script du job, ajoutez la commande docker login en utilisant les variables prédéfinies de GitLab.
Indice :
`bashdocker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
`
$CI_REGISTRY=registry.gitlab.com
$CI_REGISTRY_USER=gitlab-ci-token
$CI_REGISTRY_PASSWORD= le$CI_JOB_TOKENcourant (token temporaire)Ces variables sont automatiquement injectées sans aucune configuration.
Vérification : Les logs affichent "Login Succeeded".
Tâche 4 : Construire et pousser l'image avec deux tags
Construisez l'image avec deux tags : $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA et $CI_REGISTRY_IMAGE:latest. Poussez les deux.
Indice :
`bashdocker build \
-t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA \
-t $CI_REGISTRY_IMAGE:latest \
.
docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
docker push $CI_REGISTRY_IMAGE:latest
`Tagger avec le SHA permet de garder un historique immuable. Tagger
latestpermet de toujours pointer sur la version la plus récente.
Vérification : Les deux docker push se terminent avec succès dans les logs.
Tâche 5 : Vérifier l'image dans l'interface GitLab
Naviguez vers Packages & Registries → Container Registry dans votre projet. Vérifiez que l'image est présente avec les deux tags.
Indice : Vous pouvez aussi utiliser l'API GitLab pour lister les images :
`bashcurl --header "JOB-TOKEN: $CI_JOB_TOKEN" \
"https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/registry/repositories"
`
Vérification : L'interface Container Registry affiche votre image avec les tags latest et le SHA du commit.
🗂️ Mini-Projet : Image publiée dans le Container Registry
Checkpoints de validation :
- Le Container Registry est activé dans les Settings du projet
docker loginréussit avec les variables prédéfinies- L'image est construite avec deux tags (SHA + latest)
- Les deux
docker pushse terminent avec succès - L'image est visible dans Packages → Container Registry de GitLab