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

Best Practice per il Linting YAML: Cattura Errori Prima del Deploy

Uno spazio fuori posto in un file YAML può mandare in crash un deploy in produzione. A differenza di JSON, che fallisce rumorosamente su errori di sintassi, YAML può analizzare silenziosamente un'indentazione errata in strutture dati inattese. Il linting cattura questi problemi prima che raggiungano la produzione.

Perché Fare il Linting del YAML?

La flessibilità di YAML è sia la sua forza che la sua debolezza:

# Questo è YAML valido ma probabilmente sbagliato
ports:
  - 80
  - 443
  name: webserver  # Questa è una chiave nel SECONDO elemento della lista, non nel mapping!

Il codice sopra crea una lista dove il secondo elemento è un mapping {443: null, name: webserver}. Un linter catturerebbe questo problema di indentazione. Senza linting, questo tipo di bug può richiedere ore per essere diagnosticato.

yamllint: Il Linter Standard

yamllint è il linter YAML più ampiamente utilizzato. Controlla sia la validità della sintassi che la coerenza dello stile.

Installazione

pip install yamllint

Uso di Base

# Lint di un singolo file
yamllint config.yaml

# Lint di una directory
yamllint .

# Lint con una configurazione specifica
yamllint -c .yamllint.yml .

Configurazione

Crea .yamllint.yml nella root del tuo progetto:

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

Regole Chiave Spiegate

RegolaScopoImpostazione Raccomandata
indentationImponi indentazione coerente2 spazi, no tab
line-lengthPrevieni righe troppo lunghe120 caratteri (warning)
truthyControlla i valori booleaniSolo true/false
commentsFormattazione commentiRichiedi spazio dopo #
document-startRichiedi --- all'inizioDisabilita (opzionale)
trailing-spacesNo spazi finaliAbilita
new-line-at-end-of-fileTerminazioni file coerentiAbilita

Errori Comuni Catturati dal Linting

1. Caratteri Tab

YAML proibisce i tab per l'indentazione, ma gli editor a volte li inseriscono:

# ERRORE: carattere tab
server:
port: 8080  # Tab invece di spazi!

2. Indentazione Incoerente

# ERRORE: mix di indentazione a 2 e 4 spazi
database:
  host: localhost
    port: 5432  # Sbagliato: 4 spazi invece di 2

3. Chiavi Duplicate

# ERRORE: chiave duplicata (la seconda sovrascrive silenziosamente la prima)
server:
  port: 8080
  host: localhost
  port: 9090  # Duplicata! Quale porta viene usata?

4. Spazi Finali

Gli spazi finali invisibili possono causare comportamenti sorprendenti, specialmente nelle stringhe multilinea. Un linter li segnala immediatamente.

Validazione rapida senza installare nulla: incolla il tuo YAML nel nostro Validatore YAML.

Integrazione 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 .

Pre-commit Hook

# .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

Ora il YAML viene automaticamente sottoposto a linting prima di ogni commit.

GitLab CI

yaml-lint:
  image: python:3.12-slim
  script:
    - pip install yamllint
    - yamllint .
  rules:
    - changes:
        - "**/*.yaml"
        - "**/*.yml"

Integrazione con l'Editor

La maggior parte degli editor supporta il linting YAML in tempo reale:

  • VS Code: Installa l'estensione "YAML" di Red Hat (usa yamllint)
  • Vim/Neovim: Usa ALE o coc-yaml
  • IDE JetBrains: Supporto YAML integrato con ispezioni configurabili

Abilita il formato-al-salvataggio per i file YAML per correggere automaticamente i problemi di spazi bianchi.

Linting Specifico per Strumento

Il linting YAML generico cattura errori di sintassi, ma i linter specifici per strumento validano la correttezza semantica:

Kubernetes

# kubeval - valida contro gli schema K8s
kubeval deployment.yaml

# kubeconform - alternativa più veloce
kubeconform -strict deployment.yaml

Docker Compose

docker compose config --quiet

GitHub Actions

# actionlint - valida la sintassi dei workflow
actionlint .github/workflows/*.yml

Ansible

ansible-lint playbook.yml

Per una comprensione più approfondita delle regole di sintassi YAML, vedi il nostro tutorial sulla sintassi YAML.

Riepilogo delle Best Practice

  1. Aggiungi yamllint alla CI — Ogni modifica YAML dovrebbe superare il linting
  2. Usa i pre-commit hook — Cattura errori prima che raggiungano il repository
  3. Standardizza su indentazione a 2 spazi — La convenzione DevOps
  4. Disabilita la regola truthy o limitala — Il problema dei booleani yes/no causa bug reali
  5. Imposta una lunghezza riga ragionevole — 120 caratteri copre la maggior parte dei casi
  6. Usa validatori specifici per strumento — Linting generico più validazione specifica per K8s/Docker/Actions
  7. Configura il tuo editor — Il feedback in tempo reale è più veloce dei fallimenti CI

FAQ

Devo usare YAML o JSON per i file di configurazione?

YAML è preferito per i file di configurazione modificati dall'uomo grazie alla sua leggibilità, supporto ai commenti e sintassi concisa. JSON è migliore per dati generati dalle macchine e comunicazione API. Per un confronto dettagliato, vedi la nostra guida YAML vs JSON.

Come gestisco i warning di yamllint rispetto agli errori?

Configura le regole critiche (indentazione, sintassi) come errori che bloccano la CI. Imposta le regole di stile (lunghezza riga, commenti) come warning che appaiono ma non bloccano. Questo bilancia rigore e produttività degli sviluppatori.

Risorse Correlate

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