alltools.one
YAML‱
2025-06-28
‱
7 min
‱
alltools.one Team
YAMLLintingCI/CDDevOpsConfiguration

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ÚgleObjectifParamÚtre Recommandé
indentationAppliquer une indentation cohérente2 espaces, pas de tabulations
line-lengthEmpĂȘcher les lignes trop longues120 car. (avertissement)
truthyContrÎler les valeurs booléennestrue/false uniquement
commentsFormatage des commentairesEspace requis aprĂšs #
document-startExiger --- au débutDésactiver (optionnel)
trailing-spacesPas d'espaces en fin de ligneActiver
new-line-at-end-of-fileFins de fichiers cohérentesActiver

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

  1. Ajoutez yamllint à la CI — Chaque modification YAML doit passer le linting
  2. Utilisez des hooks pre-commit — DĂ©tectez les erreurs avant qu'elles n'atteignent le dĂ©pĂŽt
  3. Standardisez sur 2 espaces d'indentation — La convention DevOps
  4. DĂ©sactivez ou restreignez la rĂšgle truthy — Le problĂšme des boolĂ©ens yes/no cause de vrais bugs
  5. DĂ©finissez une longueur de ligne raisonnable — 120 caractĂšres couvre la plupart des cas
  6. Utilisez des validateurs spĂ©cifiques aux outils — Linting gĂ©nĂ©rique plus validation spĂ©cifique K8s/Docker/Actions
  7. 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

Published on 2025-06-28
YAML Linting Best Practices: Catch Errors Before Deploy | alltools.one