DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesGitLab CI avancé : review apps, cache et multi-projets02 - Pousser vers le Container Registry GitLab

Détails

  • 25 minutes
  • Avancé

Objectifs

  • S'authentifier au Container Registry avec $CI_REGISTRY_USER et $CI_REGISTRY_PASSWORD
  • Construire et pousser une image avec $CI_REGISTRY_IMAGE
  • Tagger une image avec le SHA du commit et latest
  • Comprendre les variables $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_IMAGE
Module GitLab CI avancé : review apps, cache et multi-projets

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_USER et $CI_REGISTRY_PASSWORD
  • ✅ Construire une image Docker et la pousser vers $CI_REGISTRY_IMAGE
  • ✅ Tagger l'image avec $CI_COMMIT_SHORT_SHA et latest
  • ✅ 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 :

`dockerfile

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

`yaml

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

`bash

docker 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_TOKEN courant (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 :

`bash

docker 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 latest permet 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 :

`bash

curl --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 login réussit avec les variables prédéfinies
  • L'image est construite avec deux tags (SHA + latest)
  • Les deux docker push se terminent avec succès
  • L'image est visible dans Packages → Container Registry de GitLab

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Préparer l'application et le Dockerfile
  • Tâche 2 : Configurer le job avec Docker-in-Docker
  • Tâche 3 : S'authentifier au Container Registry
  • Tâche 4 : Construire et pousser l'image avec deux tags
  • Tâche 5 : Vérifier l'image dans l'interface GitLab
  • 🗂️ Mini-Projet : Image publiée dans le Container Registry