Conventions et bonnes pratiques CI/CD pour GitHub Actions, GitLab CI et autres plateformes...
Ce guide définit les conventions pour créer des pipelines CI/CD robustes et sécurisés. Utilise iac_guardrails_scan pour valider les fichiers de configuration.
dependency_guard, secret_scan)actions/checkout@v4, pas @main)┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ Lint & │──▶│ Tests │──▶│ Security │──▶│ Build │
│ Format │ │ Unit │ │ Scan │ │ │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
│
▼
┌──────────┐ ┌──────────┐
│ Deploy │◀──│ Tests │
│ Prod │ │ E2E │
└──────────┘ └──────────┘
secret_scan, dependency_guard, SASTPour les détails par plateforme :
Avant de merger un pipeline, valide-le :
# Appeler iac_guardrails_scan avec le fichier de pipeline
iac_guardrails_scan({
files: [{path: ".github/workflows/ci.yml", content: "..."}],
policy_profile: "strict"
})
Tester sur plusieurs versions de runtime (Node 18/20/22, Python 3.10/3.11/3.12). Utilise la stratégie matrix de la plateforme.
hashFiles('**/package-lock.json'))paths: dans GitHub Actions)| Anti-pattern | Problème | Solution |
|---|---|---|
@latest ou @main sur les actions |
Non reproductible | Pinner avec @v4 ou SHA |
Secrets en echo dans les logs |
Fuite de secrets | Utiliser les secrets natifs, masquer les outputs |
| Job unique géant | Lent, pas de parallélisme | Séparer en jobs indépendants |
| Pas de timeout | Jobs bloqués indéfiniment | Ajouter timeout-minutes |
Skip tests sur main |
Régressions en prod | Toujours tester avant deploy |
allow_failure: true partout |
Problèmes ignorés | Limiter aux tests flaky avec suivi |
| Docker build sans cache | Builds lents | Multi-stage + cache layers |