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