veza/veza-docs/docs/infra/ci-cd/index.mdx

241 lines
5.3 KiB
Text

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