xpeditis2.0/.github/GITHUB-SECRETS-SETUP.md
David 890bc189ee
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
fix v0.2
2025-11-12 18:00:33 +01:00

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

  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 variablesActions
  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 :

# 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 serveurIntégrations
  3. Cliquez sur WebhooksNouveau 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 SettingsSecrets and variablesActions 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

  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 :
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"test": "true"}' \
  https://portainer.xpeditis.com/api/webhooks/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  1. Vérifiez que le webhook existe dans Portainer
  2. 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 :
docker build -t test -f apps/backend/Dockerfile .
docker build -t test -f apps/frontend/Dockerfile .
  1. Vérifiez que les Dockerfiles sont corrects
  2. 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 variablesActions
  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 SettingsEnvironments
  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 :

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 :