--- id: ci-cd title: CI/CD Pipeline sidebar_label: CI/CD Pipeline description: Pipeline de déploiement continu avec GitHub Actions keywords: [veza, ci-cd, github-actions, deployment, automation] --- # 🚀 CI/CD Pipeline Pipeline de déploiement continu automatisé avec GitHub Actions pour Veza Platform. ## 🎯 Vue d'Ensemble Le pipeline CI/CD assure : - **Tests automatisés** à chaque commit - **Build** et validation des images Docker - **Déploiement** automatique en staging/production - **Monitoring** et alertes de déploiement - **Rollback** automatique en cas d'échec ## 🏗️ Architecture du Pipeline ```mermaid flowchart LR subgraph "Source Control" GIT[GitHub Repository] PR[Pull Request] MAIN[Main Branch] end subgraph "CI Pipeline" LINT[Lint & Format] TEST[Unit Tests] BUILD[Build Images] SECURITY[Security Scan] end subgraph "CD Pipeline" STAGING[Deploy Staging] E2E[E2E Tests] PROD[Deploy Production] MONITOR[Monitor Health] end subgraph "Infrastructure" DOCKER[Docker Registry] K8S[Kubernetes] MONITORING[Monitoring Stack] end GIT --> PR PR --> LINT LINT --> TEST TEST --> BUILD BUILD --> SECURITY SECURITY --> STAGING STAGING --> E2E E2E --> PROD PROD --> MONITOR BUILD --> DOCKER STAGING --> K8S PROD --> K8S MONITOR --> MONITORING ``` ## 🔧 Workflows GitHub Actions ### 1. Tests et Validation ```yaml name: CI Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Go uses: actions/setup-go@v4 with: go-version: '1.23' - name: Run tests run: make test - name: Run linting run: make lint ``` ### 2. Build et Push Docker ```yaml name: Build Images on: push: branches: [main] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build and push uses: docker/build-push-action@v5 with: context: . push: true tags: veza-platform:latest ``` ### 3. Déploiement Staging ```yaml name: Deploy Staging on: push: branches: [main] jobs: deploy-staging: runs-on: ubuntu-latest steps: - name: Deploy to staging run: | kubectl apply -f k8s/staging/ kubectl rollout status deployment/veza-api ``` ## 🛠️ Outils Utilisés ### CI/CD - **GitHub Actions** - Orchestration des pipelines - **Docker** - Containerisation des services - **Kubernetes** - Orchestration des conteneurs - **Helm** - Gestion des déploiements K8s ### Tests - **Go Test** - Tests unitaires Go - **Jest** - Tests unitaires TypeScript - **Cypress** - Tests E2E - **Postman** - Tests d'API ### Qualité - **ESLint** - Linting JavaScript/TypeScript - **Prettier** - Formatage du code - **Go Vet** - Analyse statique Go - **SonarQube** - Analyse de qualité ### Sécurité - **Trivy** - Scan de vulnérabilités - **Snyk** - Analyse de dépendances - **OWASP ZAP** - Tests de sécurité ## 📊 Monitoring du Pipeline ### Métriques Clés - **Temps de build** par service - **Taux de succès** des déploiements - **Temps de déploiement** staging → production - **Taux d'échec** des tests ### Alertes - **Échec de build** → Slack #dev-alerts - **Échec de déploiement** → Slack #ops-alerts - **Tests E2E échoués** → Slack #qa-alerts - **Vulnérabilités** → Slack #security-alerts ## 🔄 Stratégies de Déploiement ### Blue-Green - **Staging** : Déploiement en parallèle - **Production** : Basculement instantané - **Rollback** : Retour à la version précédente ### Canary - **5%** du trafic vers la nouvelle version - **Monitoring** des métriques critiques - **Augmentation** progressive si stable - **Rollback** automatique si problème ## 🚀 Déploiement Manuel ### Via GitHub Actions ```bash # Déclencher un déploiement manuel gh workflow run deploy-production.yml # Voir le statut gh run list --workflow=deploy-production.yml ``` ### Via CLI ```bash # Déployer en staging make deploy-staging # Déployer en production make deploy-production # Rollback make rollback ``` ## 🔧 Configuration ### Variables d'Environnement ```yaml # GitHub Secrets DOCKER_REGISTRY: ghcr.io DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} # Kubernetes KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }} KUBE_NAMESPACE: veza-platform # Monitoring SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} GRAFANA_API_KEY: ${{ secrets.GRAFANA_API_KEY }} ``` ### Fichiers de Configuration - `/.github/workflows/` - Workflows GitHub Actions - `/k8s/` - Manifests Kubernetes - `/helm/` - Charts Helm - `/docker/` - Dockerfiles et docker-compose ## 📚 Documentation ### Guides - [Guide de Monitoring](/docs/infra/observability) - [Guide de Sécurité](/docs/infra/security) ## 🤝 Contribution Pour modifier le pipeline CI/CD : 1. Testez les changements sur une branche feature 2. Créez une PR avec description détaillée 3. Attendez l'approbation de l'équipe DevOps 4. Mergez après validation des tests ## 📞 Support - **Issues CI/CD** : [GitHub Issues](https://github.com/okinrev/veza-full-stack/issues?q=label:ci-cd) - **Slack** : #devops-support - **Documentation** : Cette page et les guides associés