Exercice 03 : Configurer les environnements de déploiement
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Créer des environnements
stagingetproductiondans GitHub - ✅ Exiger une approbation manuelle avant de déployer en production
- ✅ Lier un job à un environnement avec
environment: name:eturl: - ✅ Afficher l'URL de déploiement dans la Pull Request
Durée estimée : 25 min | Difficulté : ⭐⭐⭐☆☆
📖 Contexte
Les environnements GitHub permettent de modéliser le cycle de vie d'un déploiement : staging (automatique à chaque push), production (manuel avec approbation). Chaque environnement peut avoir ses propres secrets, ses règles de protection, et ses reviewers.
Quand un job est associé à un environnement, GitHub affiche le statut du déploiement dans la PR et dans l'onglet Environments du repository.
📋 Énoncé
Vous allez créer deux environnements, configurer une protection manuelle pour la production, puis créer un workflow qui déploie automatiquement en staging et attend une approbation pour la production.
Résultat attendu :
- Staging se déploie automatiquement à chaque push sur
main - Production est bloquée en attente d'approbation
- L'URL de déploiement est visible dans la PR
🧭 Déroulement
Tâche 1 : Créer les environnements dans GitHub
Rendez-vous dans Settings → Environments. Créez deux environnements : staging (sans protection) et production (avec un reviewer obligatoire : vous-même).
Indice : Dans l'environnement
production, cochez "Required reviewers" et ajoutez votre compte GitHub. Cette configuration bloquera le job de déploiement jusqu'à ce qu'un reviewer approuve.
Vérification : Les deux environnements sont listés dans Settings → Environments. production affiche "1 required reviewer".
Tâche 2 : Créer le job de déploiement staging
Créez .github/workflows/deploy.yml avec un job deploy-staging qui utilise environment: staging. Le job simule un déploiement et retourne une URL.
Indice :
`yamldeploy-staging:
runs-on: ubuntu-latest
environment:
name: staging
url: https://staging.mon-app.example.com
steps:
- run: echo "Déploiement en staging..."
`
Vérification : Après le push, l'onglet Environments du repository affiche staging avec le dernier déploiement.
Tâche 3 : Créer le job de déploiement production avec approbation
Ajoutez un job deploy-production qui dépend de deploy-staging et utilise environment: production. Ce job sera automatiquement bloqué jusqu'à l'approbation d'un reviewer.
Indice :
`yamldeploy-production:
runs-on: ubuntu-latest
needs: deploy-staging
environment:
name: production
url: https://mon-app.example.com
steps:
- run: echo "Déploiement en production après approbation !"
`Le job s'arrête avec le statut "Waiting" jusqu'à ce qu'un reviewer approuve depuis l'interface GitHub Actions.
Vérification : Dans l'interface Actions, le job deploy-production affiche un bandeau orange "Waiting for approval".
Tâche 4 : Afficher l'URL dans la Pull Request
Configurez l'URL de déploiement staging pour qu'elle utilise une valeur dynamique basée sur le numéro de PR (github.event.number).
Indice :
`yamlenvironment:
name: staging
url: https://pr-${{ github.event.number }}.staging.example.com
`Quand le workflow est déclenché par une PR, GitHub affiche automatiquement cette URL dans le fil de commentaires de la PR comme lien "View deployment".
Vérification : En ouvrant une PR, un lien "View deployment" apparaît sous les checks CI avec l'URL configurée.
Tâche 5 : Approuver et observer le déploiement production
Dans l'interface GitHub Actions, cliquez sur le job deploy-production en attente, puis approuvez le déploiement. Observez le job reprendre son exécution.
Indice : Le bouton "Review deployments" apparaît dans le résumé du run quand un job attend une approbation. Vous pouvez également approuver depuis l'onglet Environments du repository.
Vérification : Après approbation, le job deploy-production passe au vert et les logs affichent le message de déploiement.
🗂️ Mini-Projet : Pipeline de déploiement complet
# Checkpoints à valider :
# [ ] L'environnement staging est créé sans protection
# [ ] L'environnement production requiert 1 reviewer
# [ ] deploy-staging utilise environment: name: staging
# [ ] deploy-production utilise environment: name: production
# [ ] deploy-production est bloqué "Waiting for approval"
# [ ] L'URL de déploiement est visible dans la PR
# [ ] Bonus : ajoutez un secret spécifique à chaque environnement