Bonnes Pratiques de Linting YAML : Détectez les Erreurs Avant le Déploiement
Un espace mal placé dans un fichier YAML peut faire tomber un déploiement en production. Contrairement à JSON, qui échoue bruyamment sur les erreurs de syntaxe, YAML peut silencieusement parser une indentation incorrecte en structures de données inattendues. Le linting détecte ces problÚmes avant qu'ils n'atteignent la production.
Pourquoi Linter le YAML ?
La flexibilité de YAML est à la fois sa force et sa faiblesse :
# This is valid YAML but probably wrong
ports:
- 80
- 443
name: webserver # This is a key in the SECOND list item, not the mapping!
Le code ci-dessus crĂ©e une liste oĂč le deuxiĂšme Ă©lĂ©ment est un mapping {443: null, name: webserver}. Un linter dĂ©tecterait ce problĂšme d'indentation. Sans linting, ce type de bug peut prendre des heures Ă diagnostiquer.
yamllint : Le Linter Standard
yamllint est le linter YAML le plus largement utilisé. Il vérifie à la fois la validité syntaxique et la cohérence de style.
Installation
pip install yamllint
Utilisation de Base
# Lint a single file
yamllint config.yaml
# Lint a directory
yamllint .
# Lint with a specific config
yamllint -c .yamllint.yml .
Configuration
Créez .yamllint.yml à la racine de votre projet :
extends: default
rules:
line-length:
max: 120
level: warning
indentation:
spaces: 2
indent-sequences: true
truthy:
allowed-values: ['true', 'false', 'yes', 'no']
comments:
require-starting-space: true
min-spaces-from-content: 2
document-start: disable
empty-lines:
max: 1
RÚgles Clés Expliquées
| RÚgle | Objectif | ParamÚtre Recommandé |
|---|---|---|
indentation | Appliquer une indentation cohérente | 2 espaces, pas de tabulations |
line-length | EmpĂȘcher les lignes trop longues | 120 car. (avertissement) |
truthy | ContrÎler les valeurs booléennes | true/false uniquement |
comments | Formatage des commentaires | Espace requis aprĂšs # |
document-start | Exiger --- au début | Désactiver (optionnel) |
trailing-spaces | Pas d'espaces en fin de ligne | Activer |
new-line-at-end-of-file | Fins de fichiers cohérentes | Activer |
Erreurs Courantes Détectées par le Linting
1. CaractĂšres de Tabulation
YAML interdit les tabulations pour l'indentation, mais les éditeurs en insÚrent parfois :
# ERROR: tab character
server:
port: 8080 # Tab instead of spaces!
2. Indentation Incohérente
# ERROR: mixing 2 and 4 space indentation
database:
host: localhost
port: 5432 # Wrong: 4 spaces instead of 2
3. Clés Dupliquées
# ERROR: duplicate key (second silently overrides first)
server:
port: 8080
host: localhost
port: 9090 # Duplicate! Which port is used?
4. Espaces en Fin de Ligne
Les espaces invisibles en fin de ligne peuvent causer des comportements surprenants, surtout dans les chaßnes multilignes. Un linter les signale immédiatement.
Validation rapide sans rien installer : collez votre YAML dans notre Validateur YAML.
Intégration CI/CD
GitHub Actions
name: YAML Lint
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install yamllint
run: pip install yamllint
- name: Lint YAML files
run: yamllint .
Hook Pre-commit
# .pre-commit-config.yaml
repos:
- repo: https://github.com/adrienverge/yamllint
rev: v1.33.0
hooks:
- id: yamllint
args: [-c, .yamllint.yml]
pip install pre-commit
pre-commit install
Maintenant le YAML est automatiquement linté avant chaque commit.
GitLab CI
yaml-lint:
image: python:3.12-slim
script:
- pip install yamllint
- yamllint .
rules:
- changes:
- "**/*.yaml"
- "**/*.yml"
IntĂ©gration dans l'Ăditeur
La plupart des éditeurs supportent le linting YAML en temps réel :
- VS Code : Installez l'extension "YAML" de Red Hat (utilise yamllint)
- Vim/Neovim : Utilisez ALE ou coc-yaml
- IDEs JetBrains : Support YAML intégré avec inspections configurables
Activez le formatage automatique Ă la sauvegarde pour les fichiers YAML afin de corriger automatiquement les problĂšmes d'espacement.
Linting Spécifique aux Outils
Le linting YAML générique détecte les erreurs de syntaxe, mais les linters spécifiques aux outils valident la correction sémantique :
Kubernetes
# kubeval - validate against K8s schemas
kubeval deployment.yaml
# kubeconform - faster alternative
kubeconform -strict deployment.yaml
Docker Compose
docker compose config --quiet
GitHub Actions
# actionlint - validates workflow syntax
actionlint .github/workflows/*.yml
Ansible
ansible-lint playbook.yml
Pour une compréhension plus approfondie des rÚgles de syntaxe YAML, consultez notre tutoriel de syntaxe YAML.
Résumé des Bonnes Pratiques
- Ajoutez yamllint Ă la CI â Chaque modification YAML doit passer le linting
- Utilisez des hooks pre-commit â DĂ©tectez les erreurs avant qu'elles n'atteignent le dĂ©pĂŽt
- Standardisez sur 2 espaces d'indentation â La convention DevOps
- DĂ©sactivez ou restreignez la rĂšgle truthy â Le problĂšme des boolĂ©ens
yes/nocause de vrais bugs - DĂ©finissez une longueur de ligne raisonnable â 120 caractĂšres couvre la plupart des cas
- Utilisez des validateurs spĂ©cifiques aux outils â Linting gĂ©nĂ©rique plus validation spĂ©cifique K8s/Docker/Actions
- Configurez votre Ă©diteur â Le retour en temps rĂ©el est plus rapide que les Ă©checs CI
FAQ
Dois-je utiliser YAML ou JSON pour les fichiers de configuration ?
YAML est préféré pour les fichiers de configuration édités par l'humain en raison de sa lisibilité, du support des commentaires et de sa syntaxe concise. JSON est meilleur pour les données générées par machine et la communication API. Pour une comparaison détaillée, consultez notre guide YAML vs JSON.
Comment gérer les avertissements vs erreurs de yamllint ?
Configurez les rÚgles critiques (indentation, syntaxe) comme erreurs qui bloquent la CI. Définissez les rÚgles de style (longueur de ligne, commentaires) comme avertissements qui apparaissent mais ne bloquent pas. Cela équilibre la rigueur avec la productivité des développeurs.
Ressources Connexes
- Validateur YAML â Validez la syntaxe YAML en ligne instantanĂ©ment
- Tutoriel de Syntaxe YAML â Apprenez YAML depuis zĂ©ro
- YAML pour Docker Compose â Patrons YAML spĂ©cifiques Ă Docker