Sécurité
| Pratique | Comment |
|---|
| Ne jamais écrire de secret en clair | Toujours utiliser credentials('id') ou withCredentials |
| Approuver les scripts | Tout script Groovy non-approuvé est bloqué par le sandbox — approuver via Manage Jenkins → In-process Script Approval |
| Limiter les permissions | Plugin Role Strategy : restreindre qui peut déclencher, configurer, voir les logs |
| Masquer les paramètres sensibles | Utiliser password(name: ...) dans parameters plutôt que string |
| Auditer les plugins | Ne pas installer de plugin dont la source est inconnue |
// ✅ Correct
withCredentials([string(credentialsId: 'api-token', variable: 'TOKEN')]) {
sh 'curl -H "Authorization: Bearer ${TOKEN}" https://api.example.com'
}
// ❌ Jamais
sh 'curl -H "Authorization: Bearer mon-secret-en-clair" ...'
| Pratique | Comment |
|---|
Toujours cleanWs() | Libérer l’espace disque sur l’agent après le build |
| Limiter les builds conservés | buildDiscarder(logRotator(numToKeepStr: '15')) |
| Désactiver les executors du Controller | Le Controller ne doit pas exécuter de builds |
| Paralléliser les tests | parallel { stage('Unit') {...} stage('Integration') {...} } |
| Cacher les dépendances | Monter /root/.m2 ou ~/.npm avec -v sur Docker agents |
stash plutôt qu’artefacts | Pour partager des fichiers entre stages sur des agents différents |
Organisation du code
| Pratique | Comment |
|---|
| Un Jenkinsfile par projet | Versionné dans le dépôt du projet, à la racine |
| Multibranch Pipeline | Pipeline automatique pour chaque branche — pas de configuration manuelle par branche |
| Shared Libraries | Extraire la logique commune (deploy, notify, docker) dans une lib versionnée |
| Nommer les stages clairement | 'Build Docker Image' plutôt que 'Step 3' — lisible dans Blue Ocean |
failFast true | Sur les stages parallèles pour arrêter rapidement si l’un échoue |
Fiabilité du pipeline
| Pratique | Comment |
|---|
timeout global et par step | Éviter les builds bloqués indéfiniment |
retry sur les steps instables | retry(3) { sh '...' } pour les appels réseau fragiles |
when { beforeAgent true } | Évaluer la condition AVANT de réserver un agent (économise des resources) |
| Idempotence des scripts de déploiement | Un script peut être relancé sans effet de bord |
input avec submitter | Limiter qui peut valider un déploiement manuel |
Pipeline type CI/CD complet
Checkout → Compile → Tests Unit. ─┐
├─ (parallèle) → SonarQube → Package → Build Image
Lint ─┘
↓
Push Registry
↓
Deploy Dev (auto)
↓
[input gate] Deploy Prod
↓
Smoke Tests → Notify
Outils complémentaires recommandés
| Outil | Rôle |
|---|
| Blue Ocean | Interface pipeline moderne et visuelle |
| JenkinsPipelineUnit | Tests unitaires des Shared Libraries (offline) |
| Pipeline Linter | Valider la syntaxe d’un Jenkinsfile via l’API REST : curl -X POST -F "jenkinsfile=..." http://jenkins/pipeline-model-converter/validate |
| Replay | Relancer un build en modifiant le Jenkinsfile sans commit (bouton “Replay” dans l’UI) |
En relation avec