GitLab CI Parallelization Strategy

🚀 Pipeline Architecture

Notre pipeline GitLab CI est optimisée pour un maximum de parallélisme et d'efficacité.

📊 Stages et Parallélisme

Pipeline Stages:
  1. analysis    (5 jobs en parallèle)
  2. test        (6 jobs en parallèle)
  3. security    (5 jobs en parallèle)
  4. build       (2 jobs en parallèle, manual)
  5. deploy      (séquentiel, manual)

Total: 18 jobs parallèles + 3 jobs manuels

🔍 Stage 1: Analysis (Parallel Static Analysis)

Runners nécessaires: 5 simultanés

Job Outil Durée estimée Parallélisme
phpstan PHPStan 2-3 min
larastan Larastan (Laravel-specific) 2-3 min
psalm Psalm 3-4 min
phpmd PHP Mess Detector 1-2 min
pint Laravel Pint (Style) 30s

Optimisations: - Cache Composer partagé entre jobs - Artifacts JUnit pour rapports GitLab - Memory limit 1G pour les outils d'analyse - allow_failure: true sauf pour Pint (bloquant)

🧪 Stage 2: Test (Parallel Testing)

Runners nécessaires: 6 simultanés

Job Type Tests ciblés Durée estimée Parallélisme
unit_tests Unit Toutes les classes 3-5 min
feature_tests Feature API/Web endpoints 2-3 min
pki_integration_tests Integration @group pki-integration 4-6 min
pki_core_tests Core @group pki-core 2-3 min
crypto_tests Crypto @group crypto 3-4 min
licensing_tests License @group licensing 1-2 min

Optimisations: - Base de données SQLite en mémoire - Migration rapide par job - Coverage uniquement sur unit_tests - Artifacts JUnit pour tous les jobs - Tests groupés par domaine fonctionnel

🔒 Stage 3: Security (Parallel Security Analysis)

Runners nécessaires: 5 simultanés

Job Outil Focus Durée estimée Parallélisme
dependency_check Composer Audit Vulnérabilités deps 30s
semgrep_scan Semgrep SAST Laravel/Security 2-3 min
secret_detection ripgrep Secrets hardcodés 30s
security_headers grep Config sécurité 30s
pki_security_audit grep PKI security patterns 1 min

Spécialisations: - Semgrep: 3 rulesets (auto, laravel, security-audit) - PKI Audit: Vérifications spécifiques crypto/PKI - Secret Detection: Patterns PKI (clés privées, certificats) - Tous en allow_failure: true (non-bloquants)

🏗️ Stage 4: Build (Manual Parallel)

Runners nécessaires: 2 simultanés (si activé)

Job Type Trigger Durée estimée
build_docker Development Manual 3-5 min
build_production Production Manual 3-5 min

Configuration: - Mode manual pendant rush-dev - Registry GitLab intégré - Tags par commit SHA - Dépendances: tests passés

📦 Stage 5: Deploy (Sequential Manual)

Jobs séquentiels manuels pour staging/production.

⚡ Optimisations de Performance

🔄 Cache Strategy

Composer Cache:
  key: ${CI_COMMIT_REF_SLUG}-composer
  paths: [vendor/]

Partage entre jobs du même stage:
  - Tous les jobs PHP partagent le cache Composer
  - Réduction de 2-3 min par job après le premier

🚀 Resource Allocation

Recommandations GitLab Runner:

# Configuration optimale pour rush-dev
concurrent = 12  # Max jobs simultanés

[[runners]]
  name = "analysis-runner"
  limit = 5      # Stage analysis

[[runners]]
  name = "test-runner"
  limit = 6      # Stage test

[[runners]]
  name = "security-runner"
  limit = 5      # Stage security

📈 Performance Metrics

Durées parallèles vs séquentiel:

Mode Durée totale Économie
Séquentiel ~25-35 min Baseline
Parallèle ~8-12 min 65-70%

Détail par stage: - Analysis: 3-4 min (vs 10-12 min séquentiel) - Tests: 4-6 min (vs 15-20 min séquentiel) - Security: 2-3 min (vs 5-7 min séquentiel)

🎯 Optimizations Avancées

🔧 Matrix Builds (Future)

# Exemple pour multi-version PHP
unit_tests:
  parallel:
    matrix:
      - PHP_VERSION: ["8.2", "8.3"]
      - TEST_SUITE: ["Unit", "Feature"]

📊 Dynamic Parallelism

# Auto-scaling basé sur la charge
pki_tests:
  parallel:
    matrix:
      - PKI_MODULE: ["crypto", "ca", "acme", "openvpn", "windows802x"]

🔍 Fail-Fast Strategy

# Arrêt rapide si erreurs critiques
needs:
  - pint  # Style check (bloquant)
  - unit_tests  # Core functionality

📋 Monitoring et Métriques

🎯 KPIs à surveiller

  • Pipeline Duration: Objectif < 12 min
  • Parallel Efficiency: Ratio jobs/runners
  • Cache Hit Rate: > 80% pour Composer
  • Test Success Rate: > 95%
  • Security Issues: 0 critical

📊 GitLab Analytics

  • Analytics > CI/CD: Pipeline performance
  • Analytics > Repository: Job duration trends
  • Environments: Deployment frequency

🛠️ Runner Configuration

Ressources recommandées par type:

Analysis Runners (5x): - CPU: 2 cores - RAM: 4GB - Disk: 20GB SSD

Test Runners (6x): - CPU: 2 cores - RAM: 4GB - Disk: 20GB SSD

Security Runners (5x): - CPU: 1 core - RAM: 2GB - Disk: 10GB SSD

Build Runners (2x): - CPU: 4 cores - RAM: 8GB - Disk: 50GB SSD

Infrastructure totale recommandée:

  • 16 runners pour parallélisme complet
  • 40 CPU cores total
  • 72GB RAM total
  • 360GB disk total

🚨 Troubleshooting

Problèmes courants:

Runner Shortage:

# Vérifier runners disponibles
gitlab-runner list
gitlab-runner status

Cache Issues:

# Nettoyer cache corrompu
gitlab-runner exec docker --cache-dir=/tmp/cache unit_tests

Memory Limits:

# Augmenter limites pour analysis
variables:
  COMPOSER_MEMORY_LIMIT: -1
  PHP_MEMORY_LIMIT: 2G

Status: Configuration optimisée pour rush-dev avec parallélisme maximum Next: Monitoring des performances et ajustements dynamiques

Vous n'avez pas envie de la manager ?

Découvrir notre offre PKI As A Service