8.3 KiB
Configuration des Secrets GitHub pour CI/CD
Ce guide explique comment configurer les secrets GitHub nécessaires pour le pipeline CI/CD de Xpeditis.
Secrets Requis
Vous devez configurer les secrets suivants dans votre repository GitHub.
Accès Repository GitHub
- Allez sur votre repository GitHub :
https://github.com/VOTRE_USERNAME/xpeditis - Cliquez sur Settings (Paramètres)
- Dans le menu latéral, cliquez sur Secrets and variables → Actions
- Cliquez sur New repository secret
Liste des Secrets à Configurer
1. REGISTRY_TOKEN (Obligatoire)
Description : Token d'authentification pour le registre Docker Scaleway
Comment l'obtenir :
- Connectez-vous à la console Scaleway : https://console.scaleway.com
- Allez dans Container Registry (Registre de conteneurs)
- Sélectionnez ou créez votre namespace
xpeditis - Cliquez sur API Keys ou Generate token
- Créez un nouveau token avec les permissions :
- ✅ Read (Lecture)
- ✅ Write (Écriture)
- ✅ Delete (Suppression)
- Copiez le token généré
Configuration GitHub :
- Name :
REGISTRY_TOKEN - Value :
scw_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2. PORTAINER_WEBHOOK_BACKEND (Obligatoire)
Description : URL du webhook Portainer pour redéployer le service backend
Comment l'obtenir :
- Connectez-vous à Portainer :
https://portainer.votre-domaine.com - Allez dans Stacks → Sélectionnez la stack
xpeditis - Cliquez sur le service xpeditis-backend
- Cliquez sur Webhooks (ou Service webhooks)
- Cliquez sur Add webhook
- Copiez l'URL générée (format :
https://portainer.example.com/api/webhooks/xxxxx)
Alternative - Créer via API :
# Obtenir l'ID de la stack
curl -X GET "https://portainer.example.com/api/stacks" \
-H "X-API-Key: YOUR_PORTAINER_API_KEY"
# Créer le webhook pour le backend
curl -X POST "https://portainer.example.com/api/webhooks" \
-H "X-API-Key: YOUR_PORTAINER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"ResourceID": "xpeditis_xpeditis-backend",
"EndpointID": 1,
"WebhookType": 1
}'
Configuration GitHub :
- Name :
PORTAINER_WEBHOOK_BACKEND - Value :
https://portainer.xpeditis.com/api/webhooks/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
3. PORTAINER_WEBHOOK_FRONTEND (Obligatoire)
Description : URL du webhook Portainer pour redéployer le service frontend
Comment l'obtenir : Même procédure que pour PORTAINER_WEBHOOK_BACKEND mais pour le service xpeditis-frontend
Configuration GitHub :
- Name :
PORTAINER_WEBHOOK_FRONTEND - Value :
https://portainer.xpeditis.com/api/webhooks/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
4. DISCORD_WEBHOOK_URL (Optionnel)
Description : URL du webhook Discord pour recevoir les notifications de déploiement
Comment l'obtenir :
- Ouvrez Discord et allez sur votre serveur
- Cliquez sur Paramètres du serveur → Intégrations
- Cliquez sur Webhooks → Nouveau Webhook
- Donnez un nom au webhook :
Xpeditis CI/CD - Sélectionnez le canal où envoyer les notifications (ex:
#deployments) - Cliquez sur Copier l'URL du Webhook
Configuration GitHub :
- Name :
DISCORD_WEBHOOK_URL - Value :
https://discord.com/api/webhooks/123456789012345678/abcdefghijklmnopqrstuvwxyz1234567890
Vérification des Secrets
Une fois tous les secrets configurés, vous devriez avoir :
✅ REGISTRY_TOKEN (Scaleway Container Registry)
✅ PORTAINER_WEBHOOK_BACKEND (Webhook Portainer Backend)
✅ PORTAINER_WEBHOOK_FRONTEND (Webhook Portainer Frontend)
⚠️ DISCORD_WEBHOOK_URL (Optionnel - Notifications Discord)
Pour vérifier, allez dans Settings → Secrets and variables → Actions de votre repository.
Test du Pipeline CI/CD
1. Créer la branche preprod
# Sur votre machine locale
cd /chemin/vers/xpeditis2.0
# Créer et pousser la branche preprod
git checkout -b preprod
git push origin preprod
2. Effectuer un commit de test
# Faire un petit changement
echo "# Test CI/CD" >> README.md
# Commit et push
git add .
git commit -m "test: trigger CI/CD pipeline"
git push origin preprod
3. Vérifier l'exécution du pipeline
- Allez sur GitHub :
https://github.com/VOTRE_USERNAME/xpeditis/actions - Vous devriez voir le workflow "CI/CD Pipeline - Xpeditis PreProd" en cours d'exécution
- Cliquez dessus pour voir les détails de chaque job
4. Ordre d'exécution des jobs
1. backend-build-test │ Compile et teste le backend
2. frontend-build-test │ Compile et teste le frontend
↓ │
3. backend-docker │ Build image Docker backend
4. frontend-docker │ Build image Docker frontend
↓ │
5. deploy-preprod │ Déploie sur le serveur preprod
↓ │
6. smoke-tests │ Tests de santé post-déploiement
Dépannage
Erreur : "Invalid login credentials"
Problème : Le token Scaleway est invalide ou expiré
Solution :
- Vérifiez que le secret
REGISTRY_TOKENest correctement configuré - Régénérez un nouveau token dans Scaleway
- Mettez à jour le secret dans GitHub
Erreur : "Failed to trigger webhook"
Problème : L'URL du webhook Portainer est invalide ou le service n'est pas accessible
Solution :
- Vérifiez que Portainer est accessible depuis GitHub Actions
- Testez le webhook manuellement :
curl -X POST \
-H "Content-Type: application/json" \
-d '{"test": "true"}' \
https://portainer.xpeditis.com/api/webhooks/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
- Vérifiez que le webhook existe dans Portainer
- Recréez le webhook si nécessaire
Erreur : "Health check failed"
Problème : Le service déployé ne répond pas après le déploiement
Solution :
- Vérifiez les logs du service dans Portainer
- Vérifiez que les variables d'environnement sont correctes
- Vérifiez que les certificats SSL sont valides
- Vérifiez que les DNS pointent vers le bon serveur
Erreur : "Docker build failed"
Problème : Échec de la construction de l'image Docker
Solution :
- Vérifiez les logs du job dans GitHub Actions
- Testez le build localement :
docker build -t test -f apps/backend/Dockerfile .
docker build -t test -f apps/frontend/Dockerfile .
- Vérifiez que les Dockerfiles sont corrects
- Vérifiez que toutes les dépendances sont disponibles
Notifications Discord (Optionnel)
Si vous avez configuré le webhook Discord, vous recevrez des notifications avec :
- ✅ Statut du déploiement (Success / Failed)
- 📝 Message du commit
- 👤 Auteur du commit
- 🔗 Liens vers Backend et Frontend
- ⏰ Horodatage du déploiement
Exemple de notification :
✅ Deployment PreProd - SUCCESS
Branch: preprod
Commit: abc1234
Author: David
Message: feat: add CSV booking workflow
Backend: https://api-preprod.xpeditis.com
Frontend: https://app-preprod.xpeditis.com
Timestamp: 2025-01-15T10:30:00Z
Configuration Avancée
Ajouter des Secrets au Niveau de l'Organisation
Si vous avez plusieurs repositories, vous pouvez définir les secrets au niveau de l'organisation GitHub :
- Allez dans Organization settings
- Cliquez sur Secrets and variables → Actions
- Cliquez sur New organization secret
- Sélectionnez les repositories qui peuvent accéder au secret
Utiliser des Environnements GitHub
Pour séparer preprod et production avec des secrets différents :
- Dans Settings → Environments
- Créez un environnement
preprod - Ajoutez les secrets spécifiques à preprod
- Ajoutez des règles de protection (ex: approbation manuelle)
Puis dans le workflow :
jobs:
deploy-preprod:
environment: preprod # Utilise les secrets de l'environnement preprod
runs-on: ubuntu-latest
steps:
- name: Deploy
run: echo "Deploying to preprod..."
Support
Pour toute question ou problème, consultez :