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

Module

Variables protégées, environnements, review apps, cache et pipelines multi-projets.

  • 1h30
  • Avancé
  • 6 exercices
Voir les exercices

Formation 100 % Linux

Tous les modules nécessitent un environnement Linux. Si vous êtes sur Windows, installez d'abord WSL (Windows Subsystem for Linux) avant de continuer.

GitLab CI avancé : review apps, cache et multi-projets

🎯 Objectifs

  • ✅ Gérer les variables et secrets de manière sécurisée
  • ✅ Utiliser rules: pour contrôler l'exécution des jobs
  • ✅ Configurer des environnements (staging, production)
  • ✅ Optimiser les pipelines avec le cache et needs:
  • ✅ Utiliser le Container Registry intégré
  • ✅ Réutiliser des templates avec include:

📋 Prérequis

PrérequisNiveau
GitLab CIIntermédiaire (module précédent)
DockerIntermédiaire
GitIntermédiaire

🔐 Variables et Secrets

Configurez vos secrets dans Settings → CI/CD → Variables :

OptionDescription
ProtectedDisponible uniquement sur les branches protégées
MaskedMasquée dans les logs du pipeline
yaml
deploy:
  script:
    - echo "Deploying with token $DEPLOY_TOKEN"
  variables:
    ENV: production

⚠️ Ne mettez jamais de secrets directement dans .gitlab-ci.yml. Utilisez toujours les variables CI/CD de GitLab.

Pour les secrets sensibles, cochez Protected ET Masked.


📏 Rules (remplace only/except)

rules: est la méthode moderne pour contrôler quand un job s'exécute :

yaml
deploy:
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      when: always
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      when: manual
    - when: never

Conditions courantes

ConditionDescription
$CI_COMMIT_BRANCH == "main"Sur la branche main
$CI_PIPELINE_SOURCE == "merge_request_event"Déclenché par une MR
$CI_COMMIT_TAGUn tag est présent
changes: ["src/**"]Fichiers modifiés dans src/

💡 Préférez toujours rules: à only/except - c'est plus lisible et plus puissant.


🌍 Environnements

Définissez des environnements pour suivre vos déploiements :

yaml
deploy-staging:
  stage: deploy
  environment:
    name: staging
    url: https://staging.example.com
  script:
    - ./deploy.sh staging

deploy-production:
  stage: deploy
  environment:
    name: production
    url: https://example.com
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      when: manual
  • Consultez vos environnements dans Operations → Environments
  • Chaque déploiement est tracé avec le commit et la date
  • when: manual exige un clic pour déployer en production

💡 Ajoutez auto_stop_in: 1 week pour arrêter automatiquement les environnements de review.


⚡ Cache

Le cache accélère les pipelines en réutilisant des fichiers entre exécutions.

Cache vs Artefacts

AspectCacheArtefacts
ButAccélérer les jobsPasser des fichiers entre stages
PersistanceEntre pipelinesDans le même pipeline
FiabilitéBest-effortGaranti
Usage typiquenode_modules/, .pip/dist/, rapports de tests
yaml
test:
  cache:
    key: $CI_COMMIT_REF_SLUG
    paths:
      - node_modules/
  script:
    - npm ci
    - npm test

💡 $CI_COMMIT_REF_SLUG crée un cache par branche.


🐘 Services (Docker-in-Docker)

Lancez des conteneurs additionnels aux côtés de votre job :

yaml
test:
  image: node:20-alpine
  services:
    - postgres:15
  variables:
    POSTGRES_DB: testdb
    POSTGRES_USER: user
    POSTGRES_PASSWORD: pass
  script:
    - npm ci
    - npm test

Le service PostgreSQL est accessible à l'adresse postgres (nom du service).

💡 Vous pouvez ajouter plusieurs services : Redis, MySQL, Elasticsearch, etc.


🔄 Pipeline Multi-Stage Complet

Exemple réaliste avec needs: pour des pipelines DAG (plus rapides) :

yaml
stages:
  - lint
  - test
  - build
  - deploy

lint:
  stage: lint
  image: node:20-alpine
  script:
    - npm ci
    - npm run lint
  allow_failure: true

test:
  stage: test
  image: node:20-alpine
  script:
    - npm ci
    - npm test

build:
  stage: build
  image: node:20-alpine
  needs: ["lint", "test"]
  script:
    - npm ci
    - npm run build
  artifacts:
    paths:
      - dist/

deploy-staging:
  stage: deploy
  needs: ["build"]
  environment:
    name: staging
  script:
    - ./deploy.sh staging
  rules:
    - if: $CI_COMMIT_BRANCH == "main"

deploy-production:
  stage: deploy
  needs: ["build"]
  environment:
    name: production
  script:
    - ./deploy.sh production
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      when: manual
Mot-cléRôle
needs:Dépendance directe (DAG) - n'attend pas tout le stage
allow_failure: trueLe pipeline continue même si le job échoue
when: manualDéploiement déclenché manuellement

🐳 Container Registry

GitLab intègre un registry Docker. Construisez et poussez vos images directement :

yaml
build-image:
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

💡 $CI_REGISTRY_* sont des variables prédéfinies - pas besoin de les configurer.

Accédez à vos images dans Packages & Registries → Container Registry.


📦 Include et Templates

Réutilisez des configurations entre projets :

yaml
include:
  - template: Auto-DevOps.gitlab-ci.yml
  - project: 'group/shared-ci'
    file: '/templates/deploy.yml'
  - local: '.gitlab/ci/test.yml'
SourceUsage
template:Templates fournis par GitLab
project:Fichier d'un autre projet GitLab
local:Fichier local dans le même dépôt
remote:URL distante

💡 Découpez les gros .gitlab-ci.yml en fichiers séparés avec local:.


✅ Bonnes Pratiques

PratiquePourquoi
rules: au lieu de only/exceptPlus flexible et lisible
needs: pour les DAGPipelines plus rapides
Cache les dépendancesÉconomise du temps à chaque run
Images Docker avec tags précisBuilds reproductibles (node:20.11 > node:latest)
Variables protégées + masquéesSécurité des secrets en production
include: pour les templatesDRY - évite la duplication

💡 Explorez Auto DevOps pour des pipelines préconfigurés : build, test, security scan et deploy.


📌 Points Clés

  1. Les variables protégées sécurisent vos secrets sur les branches sensibles
  2. rules: remplace only/except avec plus de contrôle
  3. Les environnements tracent chaque déploiement dans l'interface GitLab
  4. Le cache accélère les pipelines, les artefacts passent des fichiers
  5. needs: crée des pipelines DAG plus rapides que l'ordre séquentiel des stages

📚 Ressources

  • Documentation GitLab CI/CD
  • Référence complète `.gitlab-ci.yml`
  • Environments & Deployments
  • CI/CD Variables
  • Container Registry

🚀 Prochaines étapes

Vos pipelines GitLab CI sont au niveau production. Passez à l'orchestration :

  1. Découvrir Kubernetes : pods, services et kubectl - Pods, services et premières commandes kubectl

Exercices Pratiques

6 exercices pour mettre en pratique

01

01 - Gérer les variables secrètes et protégées

20 minutesAvancé
02

02 - Pousser vers le Container Registry GitLab

25 minutesAvancé
03

03 - Configurer des environnements de déploiement

20 minutesAvancé
04

04 - Réutiliser des templates avec include

25 minutesAvancé
05

05 - Planifier et déclencher des pipelines automatiquement

20 minutesAvancé
06

08 - Projet Capstone : Pipeline GitLab CI de déploiement avec Container Registry et environnements

1hAvancé
Retour aux modules

Sur cette page

  • 🎯 Objectifs
  • 📋 Prérequis
  • 🔐 Variables et Secrets
  • 📏 Rules (remplace only/except)
  • Conditions courantes
  • 🌍 Environnements
  • ⚡ Cache
  • Cache vs Artefacts
  • 🐘 Services (Docker-in-Docker)
  • 🔄 Pipeline Multi-Stage Complet
  • 🐳 Container Registry
  • 📦 Include et Templates
  • ✅ Bonnes Pratiques
  • 📌 Points Clés
  • 📚 Ressources
  • 🚀 Prochaines étapes