
Où déployez-vous votre application : développement, staging, production ? Les environnements GitLab CI/CD permettent de visualiser, suivre et contrôler vos déploiements vers chaque cible. Avec l’historique des versions, le rollback en un clic, et la protection des environnements sensibles.
Ce guide est fait pour vous si…
Section intitulée « Ce guide est fait pour vous si… »Prérequis
Section intitulée « Prérequis »Avant de continuer, assurez-vous de maîtriser :
- Rules GitLab CI/CD (pour contrôler quand déployer)
- Variables GitLab CI/CD
Qu’est-ce qu’un environnement ?
Section intitulée « Qu’est-ce qu’un environnement ? »Un environnement représente une cible de déploiement : un serveur, un cluster Kubernetes, une instance cloud. GitLab utilise cette information pour :
- Afficher l’historique des déploiements sur chaque environnement
- Permettre le rollback vers une version précédente
- Fournir un lien direct vers l’application déployée
- Protéger les environnements sensibles (approbation, branches autorisées)

Types d’environnements
Section intitulée « Types d’environnements »| Type | Nom | Cas d’usage |
|---|---|---|
| Statique | production, staging | Environnements permanents, un seul de chaque |
| Dynamique | review/$CI_COMMIT_REF_NAME | Un par branche/MR, créé et détruit automatiquement |
Créer un environnement statique
Section intitulée « Créer un environnement statique »Un environnement statique existe en permanence. C’est le cas typique de vos environnements de staging et production.
deploy_staging: stage: deploy script: ./deploy.sh staging environment: name: staging url: https://staging.example.com rules: - if: $CI_COMMIT_BRANCH == "main"
deploy_production: stage: deploy script: ./deploy.sh production environment: name: production url: https://www.example.com rules: - if: $CI_COMMIT_BRANCH == "main" when: manualPropriétés de environment :
| Propriété | Description |
|---|---|
name | Nom de l’environnement (apparaît dans l’interface) |
url | URL de l’application déployée (lien cliquable dans GitLab) |
deployment_tier | Niveau : production, staging, testing, development, other |
Créer des environnements dynamiques (review apps)
Section intitulée « Créer des environnements dynamiques (review apps) »Les review apps créent un environnement unique pour chaque branche ou merge request. Idéal pour tester une fonctionnalité avant de la merger.
deploy_review: stage: deploy script: ./deploy-review.sh $CI_COMMIT_REF_SLUG environment: name: review/$CI_COMMIT_REF_NAME url: https://$CI_COMMIT_REF_SLUG.review.example.com on_stop: stop_review auto_stop_in: 1 week rules: - if: $CI_MERGE_REQUEST_ID
stop_review: stage: deploy script: ./destroy-review.sh $CI_COMMIT_REF_SLUG environment: name: review/$CI_COMMIT_REF_NAME action: stop rules: - if: $CI_MERGE_REQUEST_ID when: manualPoints clés :
name: review/$CI_COMMIT_REF_NAMEcrée un environnement unique par brancheon_stop: stop_reviewdéfinit le job qui détruira l’environnementauto_stop_in: 1 weekdétruit automatiquement après 1 semaine d’inactivitéaction: stopdans le job stop_review indique que c’est le job de destruction
Variables d’environnement spécifiques
Section intitulée « Variables d’environnement spécifiques »GitLab expose des variables automatiques pour chaque déploiement :
| Variable | Description | Exemple |
|---|---|---|
CI_ENVIRONMENT_NAME | Nom complet de l’environnement | review/feature-login |
CI_ENVIRONMENT_SLUG | Nom formaté pour URL (max 24 car.) | review-feature-lo-a1b2c3 |
CI_ENVIRONMENT_URL | URL définie dans environment.url | https://staging.example.com |
CI_ENVIRONMENT_TIER | Niveau de l’environnement | production |
CI_ENVIRONMENT_ACTION | Action en cours | start, stop, prepare |
deploy: script: - echo "Deploying to $CI_ENVIRONMENT_NAME" - echo "URL will be $CI_ENVIRONMENT_URL" - ./deploy.sh --env-slug $CI_ENVIRONMENT_SLUG environment: name: staging url: https://staging.example.comScoped variables : variables par environnement
Section intitulée « Scoped variables : variables par environnement »Définissez des variables différentes selon l’environnement dans Settings > CI/CD > Variables :
- Ajoutez une variable (ex:
DATABASE_URL) - Dans “Environments”, sélectionnez l’environnement cible
- La variable n’existera que pour les jobs déployant sur cet environnement
# Variable DATABASE_URL avec scope- Scope: staging → postgres://staging-db.example.com/app- Scope: production → postgres://prod-db.example.com/appProtéger un environnement
Section intitulée « Protéger un environnement »Les environnements sensibles (production) doivent être protégés pour éviter les déploiements accidentels.
-
Allez dans Settings > CI/CD > Protected environments
-
Sélectionnez l’environnement à protéger (ex:
production) -
Configurez les restrictions :
- Allowed to deploy : qui peut déployer (Maintainers, groupes, utilisateurs)
- Required approvals : nombre d’approbations avant déploiement
- Allowed to approve : qui peut approuver
Résultat : un déploiement vers production nécessitera une approbation avant de s’exécuter.
Rollback en un clic
Section intitulée « Rollback en un clic »GitLab garde l’historique de tous les déploiements sur chaque environnement. Pour revenir à une version précédente :
-
Allez dans Operate > Environments
-
Cliquez sur l’environnement concerné
-
Dans l’historique des déploiements, trouvez la version souhaitée
-
Cliquez sur le bouton Rollback (flèche circulaire)

Arrêt automatique des environnements
Section intitulée « Arrêt automatique des environnements »Pour éviter l’accumulation d’environnements, configurez l’arrêt automatique :
deploy_review: environment: name: review/$CI_COMMIT_REF_NAME on_stop: stop_review auto_stop_in: 3 days # Arrêt automatique après 3 jours
stop_review: environment: name: review/$CI_COMMIT_REF_NAME action: stop when: manualFormats pour auto_stop_in :
30 minutes3 days1 week1 month
Pour prolonger la durée, épinglez l’environnement dans l’interface :

Exemple complet : workflow multi-environnements
Section intitulée « Exemple complet : workflow multi-environnements »stages: - build - test - deploy
build: stage: build script: docker build -t myapp:$CI_COMMIT_SHA .
test: stage: test script: docker run myapp:$CI_COMMIT_SHA npm test
# Review app pour chaque MRdeploy_review: stage: deploy script: ./deploy.sh review $CI_COMMIT_REF_SLUG environment: name: review/$CI_COMMIT_REF_NAME url: https://$CI_COMMIT_REF_SLUG.review.example.com on_stop: stop_review auto_stop_in: 1 week rules: - if: $CI_MERGE_REQUEST_ID
stop_review: stage: deploy script: ./destroy.sh review $CI_COMMIT_REF_SLUG environment: name: review/$CI_COMMIT_REF_NAME action: stop rules: - if: $CI_MERGE_REQUEST_ID when: manual
# Staging : auto sur maindeploy_staging: stage: deploy script: ./deploy.sh staging environment: name: staging url: https://staging.example.com deployment_tier: staging rules: - if: $CI_COMMIT_BRANCH == "main"
# Production : manuel sur maindeploy_production: stage: deploy script: ./deploy.sh production environment: name: production url: https://www.example.com deployment_tier: production rules: - if: $CI_COMMIT_BRANCH == "main" when: manualSurveillance des environnements
Section intitulée « Surveillance des environnements »GitLab propose un dashboard des environnements (Operate > Environments) qui affiche :
- État actuel de chaque environnement
- Dernier déploiement réussi
- Branche/commit déployé
- Lien vers l’application

Erreurs fréquentes
Section intitulée « Erreurs fréquentes »| Symptôme | Cause probable | Solution |
|---|---|---|
| Environnement non créé | Job n’a pas la clé environment | Ajouter environment: au job |
| Review apps qui s’accumulent | Pas de on_stop ni auto_stop_in | Configurer le nettoyage automatique |
| Rollback échoue | Script non idempotent | Rendre le script rejoable |
| Variable non trouvée | Mauvais scope sur la variable | Vérifier le scope dans Settings |
| Déploiement prod bloqué | Protected environment | Demander approbation ou vérifier permissions |
À retenir
Section intitulée « À retenir »environment.namecrée un environnement dans GitLab avec historique des déploiements.- Environnements statiques (
production) pour les cibles permanentes, dynamiques (review/$BRANCH) pour les review apps. on_stop+auto_stop_inpour nettoyer automatiquement les environnements temporaires.- Scoped variables pour avoir des secrets différents par environnement.
- Protected environments pour contrôler qui peut déployer en production.
- Rollback disponible en un clic dans l’interface GitLab.