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