Some checks failed
CI/CD Pipeline - Xpeditis PreProd / Frontend - Build & Test (push) Failing after 5m31s
CI/CD Pipeline - Xpeditis PreProd / Frontend - Docker Build & Push (push) Has been skipped
CI/CD Pipeline - Xpeditis PreProd / Backend - Build & Test (push) Failing after 5m42s
CI/CD Pipeline - Xpeditis PreProd / Backend - Docker Build & Push (push) Has been skipped
CI/CD Pipeline - Xpeditis PreProd / Deploy to PreProd Server (push) Has been skipped
CI/CD Pipeline - Xpeditis PreProd / Run Smoke Tests (push) Has been skipped
290 lines
8.3 KiB
Markdown
290 lines
8.3 KiB
Markdown
# 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
|
|
|
|
1. Allez sur votre repository GitHub : `https://github.com/VOTRE_USERNAME/xpeditis`
|
|
2. Cliquez sur **Settings** (Paramètres)
|
|
3. Dans le menu latéral, cliquez sur **Secrets and variables** → **Actions**
|
|
4. 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** :
|
|
1. Connectez-vous à la console Scaleway : https://console.scaleway.com
|
|
2. Allez dans **Container Registry** (Registre de conteneurs)
|
|
3. Sélectionnez ou créez votre namespace `xpeditis`
|
|
4. Cliquez sur **API Keys** ou **Generate token**
|
|
5. Créez un nouveau token avec les permissions :
|
|
- ✅ Read (Lecture)
|
|
- ✅ Write (Écriture)
|
|
- ✅ Delete (Suppression)
|
|
6. 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** :
|
|
1. Connectez-vous à Portainer : `https://portainer.votre-domaine.com`
|
|
2. Allez dans **Stacks** → Sélectionnez la stack `xpeditis`
|
|
3. Cliquez sur le service **xpeditis-backend**
|
|
4. Cliquez sur **Webhooks** (ou **Service webhooks**)
|
|
5. Cliquez sur **Add webhook**
|
|
6. Copiez l'URL générée (format : `https://portainer.example.com/api/webhooks/xxxxx`)
|
|
|
|
**Alternative - Créer via API** :
|
|
|
|
```bash
|
|
# 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** :
|
|
1. Ouvrez Discord et allez sur votre serveur
|
|
2. Cliquez sur **Paramètres du serveur** → **Intégrations**
|
|
3. Cliquez sur **Webhooks** → **Nouveau Webhook**
|
|
4. Donnez un nom au webhook : `Xpeditis CI/CD`
|
|
5. Sélectionnez le canal où envoyer les notifications (ex: `#deployments`)
|
|
6. 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
1. Allez sur GitHub : `https://github.com/VOTRE_USERNAME/xpeditis/actions`
|
|
2. Vous devriez voir le workflow **"CI/CD Pipeline - Xpeditis PreProd"** en cours d'exécution
|
|
3. 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** :
|
|
1. Vérifiez que le secret `REGISTRY_TOKEN` est correctement configuré
|
|
2. Régénérez un nouveau token dans Scaleway
|
|
3. 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** :
|
|
1. Vérifiez que Portainer est accessible depuis GitHub Actions
|
|
2. Testez le webhook manuellement :
|
|
```bash
|
|
curl -X POST \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"test": "true"}' \
|
|
https://portainer.xpeditis.com/api/webhooks/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
|
```
|
|
3. Vérifiez que le webhook existe dans Portainer
|
|
4. 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** :
|
|
1. Vérifiez les logs du service dans Portainer
|
|
2. Vérifiez que les variables d'environnement sont correctes
|
|
3. Vérifiez que les certificats SSL sont valides
|
|
4. 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** :
|
|
1. Vérifiez les logs du job dans GitHub Actions
|
|
2. Testez le build localement :
|
|
```bash
|
|
docker build -t test -f apps/backend/Dockerfile .
|
|
docker build -t test -f apps/frontend/Dockerfile .
|
|
```
|
|
3. Vérifiez que les Dockerfiles sont corrects
|
|
4. 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 :
|
|
|
|
1. Allez dans **Organization settings**
|
|
2. Cliquez sur **Secrets and variables** → **Actions**
|
|
3. Cliquez sur **New organization secret**
|
|
4. 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 :
|
|
|
|
1. Dans **Settings** → **Environments**
|
|
2. Créez un environnement `preprod`
|
|
3. Ajoutez les secrets spécifiques à preprod
|
|
4. Ajoutez des règles de protection (ex: approbation manuelle)
|
|
|
|
Puis dans le workflow :
|
|
|
|
```yaml
|
|
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 :
|
|
- [Documentation GitHub Actions](https://docs.github.com/en/actions)
|
|
- [Documentation Portainer Webhooks](https://docs.portainer.io/api/webhooks)
|
|
- [Documentation Scaleway Container Registry](https://www.scaleway.com/en/docs/containers/container-registry/)
|