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

YAML Linting Best Practices: Fehler vor dem Deployment erkennen

Ein falsch platziertes Leerzeichen in einer YAML-Datei kann ein Produktions-Deployment zum Scheitern bringen. Im Gegensatz zu JSON, das bei Syntaxfehlern laut fehlschlĂ€gt, kann YAML falsche EinrĂŒckungen stillschweigend in unerwartete Datenstrukturen parsen. Linting erkennt diese Probleme, bevor sie die Produktion erreichen.

Warum YAML linten?

YAMLs FlexibilitÀt ist sowohl StÀrke als auch SchwÀche:

# Dies ist gĂŒltiges YAML, aber wahrscheinlich falsch
ports:
  - 80
  - 443
  name: webserver  # Dies ist ein SchlĂŒssel im ZWEITEN Listenelement, nicht im Mapping!

Das obige erstellt eine Liste, in der das zweite Element ein Mapping {443: null, name: webserver} ist. Ein Linter wĂŒrde dieses EinrĂŒckungsproblem erkennen. Ohne Linting kann diese Art von Fehler Stunden zum Diagnostizieren brauchen.

yamllint: Der Standard-Linter

yamllint ist der am weitesten verbreitete YAML-Linter. Er prĂŒft sowohl SyntaxgĂŒltigkeit als auch Stilkonsistenz.

Installation

pip install yamllint

Grundlegende Verwendung

# Eine einzelne Datei linten
yamllint config.yaml

# Ein Verzeichnis linten
yamllint .

# Mit einer bestimmten Konfiguration linten
yamllint -c .yamllint.yml .

Konfiguration

Erstellen Sie .yamllint.yml in Ihrem Projektstamm:

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

Wichtige Regeln erklÀrt

RegelZweckEmpfohlene Einstellung
indentationKonsistente EinrĂŒckung erzwingen2 Leerzeichen, keine Tabs
line-lengthÜberlange Zeilen verhindern120 Zeichen (Warnung)
truthyBoolesche Werte kontrollierenNur true/false
commentsKommentarformatierungLeerzeichen nach # erforderlich
document-start--- am Anfang verlangenDeaktiviert (optional)
trailing-spacesKeine nachgestellten LeerzeichenAktiviert
new-line-at-end-of-fileKonsistente DateiendenAktiviert

HĂ€ufige Fehler, die Linting erkennt

1. Tab-Zeichen

YAML verbietet Tabs fĂŒr EinrĂŒckung, aber Editoren fĂŒgen sie manchmal ein:

# FEHLER: Tab-Zeichen
server:
port: 8080  # Tab statt Leerzeichen!

2. Inkonsistente EinrĂŒckung

# FEHLER: Mischung von 2 und 4 Leerzeichen
database:
  host: localhost
    port: 5432  # Falsch: 4 Leerzeichen statt 2

3. Doppelte SchlĂŒssel

# FEHLER: Doppelter SchlĂŒssel (zweiter ĂŒberschreibt ersten stillschweigend)
server:
  port: 8080
  host: localhost
  port: 9090  # Duplikat! Welcher Port wird verwendet?

4. Nachgestellte Leerzeichen

Unsichtbare nachgestellte Leerzeichen können ĂŒberraschendes Verhalten verursachen, besonders in mehrzeiligen Zeichenketten. Ein Linter markiert diese sofort.

Schnelle Validierung ohne Installation: FĂŒgen Sie Ihr YAML in unseren YAML Validator ein.

CI/CD-Integration

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

Jetzt wird YAML automatisch vor jedem Commit gelinted.

GitLab CI

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

Editor-Integration

Die meisten Editoren unterstĂŒtzen Echtzeit-YAML-Linting:

  • VS Code: Installieren Sie die „YAML"-Erweiterung von Red Hat (verwendet yamllint)
  • Vim/Neovim: Verwenden Sie ALE oder coc-yaml
  • JetBrains IDEs: Eingebaute YAML-UnterstĂŒtzung mit konfigurierbaren Inspektionen

Aktivieren Sie Formatierung beim Speichern fĂŒr YAML-Dateien, um Leerzeichenprobleme automatisch zu beheben.

Werkzeugspezifisches Linting

Generisches YAML-Linting erkennt Syntaxfehler, aber werkzeugspezifische Linter validieren semantische Korrektheit:

Kubernetes

# kubeval - gegen K8s-Schemas validieren
kubeval deployment.yaml

# kubeconform - schnellere Alternative
kubeconform -strict deployment.yaml

Docker Compose

docker compose config --quiet

GitHub Actions

# actionlint - validiert Workflow-Syntax
actionlint .github/workflows/*.yml

Ansible

ansible-lint playbook.yml

FĂŒr ein tieferes VerstĂ€ndnis der YAML-Syntaxregeln siehe unser YAML-Syntax-Tutorial.

Zusammenfassung der Best Practices

  1. yamllint zur CI hinzufĂŒgen — Jede YAML-Änderung sollte das Linting bestehen
  2. Pre-commit Hooks verwenden — Fehler erkennen, bevor sie das Repository erreichen
  3. Auf 2-Leerzeichen-EinrĂŒckung standardisieren — Die DevOps-Konvention
  4. Truthy-Regel deaktivieren oder einschrĂ€nken — Das yes/no-Boolean-Problem verursacht echte Fehler
  5. Angemessene ZeilenlĂ€nge setzen — 120 Zeichen decken die meisten FĂ€lle ab
  6. Werkzeugspezifische Validatoren verwenden — Generisches Linting plus K8s-/Docker-/Actions-spezifische Validierung
  7. Editor konfigurieren — Echtzeit-Feedback ist schneller als CI-Fehler

FAQ

Sollte ich YAML oder JSON fĂŒr Konfigurationsdateien verwenden?

YAML wird fĂŒr menschlich bearbeitete Konfigurationsdateien bevorzugt aufgrund seiner Lesbarkeit, KommentarunterstĂŒtzung und kompakten Syntax. JSON eignet sich besser fĂŒr maschinengenerierte Daten und API-Kommunikation. FĂŒr einen detaillierten Vergleich siehe unseren YAML vs JSON Leitfaden.

Wie gehe ich mit yamllint-Warnungen vs. Fehlern um?

Konfigurieren Sie kritische Regeln (EinrĂŒckung, Syntax) als Fehler, die CI blockieren. Setzen Sie Stilregeln (ZeilenlĂ€nge, Kommentare) als Warnungen, die erscheinen, aber nicht blockieren. Dies balanciert Strenge mit EntwicklerproduktivitĂ€t.

Verwandte Ressourcen

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