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

Mejores Prácticas de Linting YAML: Detecta Errores Antes del Despliegue

Un espacio mal colocado en un archivo YAML puede derribar un despliegue en producción. A diferencia de JSON, que falla ruidosamente ante errores de sintaxis, YAML puede analizar silenciosamente una indentación incorrecta generando estructuras de datos inesperadas. El linting detecta estos problemas antes de que lleguen a producción.

¿Por Qué Hacer Linting de YAML?

La flexibilidad de YAML es tanto su fortaleza como su debilidad:

# Esto es YAML válido pero probablemente incorrecto
ports:
  - 80
  - 443
    name: webserver  # ¡Esta es una clave en el SEGUNDO elemento de la lista, no en el mapeo!

Lo anterior crea una lista donde el segundo elemento es un mapeo {443: null, name: webserver}. Un linter detectaría este problema de indentación. Sin linting, este tipo de error puede tardar horas en diagnosticarse.

yamllint: El Linter Estándar

yamllint es el linter de YAML más utilizado. Verifica tanto la validez de la sintaxis como la consistencia del estilo.

Instalación

pip install yamllint

Uso Básico

# Analizar un solo archivo
yamllint config.yaml

# Analizar un directorio
yamllint .

# Analizar con una configuración específica
yamllint -c .yamllint.yml .

Configuración

Crea .yamllint.yml en la raíz de tu proyecto:

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

Reglas Principales Explicadas

ReglaPropósitoConfiguración Recomendada
indentationAplicar indentación consistente2 espacios, sin tabulaciones
line-lengthPrevenir líneas demasiado largas120 caracteres (advertencia)
truthyControlar valores booleanosSolo true/false
commentsFormato de comentariosRequerir espacio después de #
document-startRequerir --- al inicioDesactivar (opcional)
trailing-spacesSin espacios al finalActivar
new-line-at-end-of-fileFinales de archivo consistentesActivar

Errores Comunes Detectados por el Linting

1. Caracteres de Tabulación

YAML prohíbe las tabulaciones para la indentación, pero los editores a veces las insertan:

# ERROR: carácter de tabulación
server:
port: 8080  # ¡Tabulación en lugar de espacios!

2. Indentación Inconsistente

# ERROR: mezclando indentación de 2 y 4 espacios
database:
  host: localhost
    port: 5432  # Incorrecto: 4 espacios en lugar de 2

3. Claves Duplicadas

# ERROR: clave duplicada (la segunda sobrescribe silenciosamente la primera)
server:
  port: 8080
  host: localhost
  port: 9090  # ¡Duplicada! ¿Qué puerto se usa?

4. Espacios al Final

Los espacios invisibles al final pueden causar comportamientos sorprendentes, especialmente en cadenas multilínea. Un linter los señala inmediatamente.

Validación rápida sin instalar nada: pega tu YAML en nuestro Validador de YAML.

Integración con 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 de 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

Ahora el YAML se analiza automáticamente antes de cada commit.

GitLab CI

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

Integración con Editores

La mayoría de los editores soportan linting de YAML en tiempo real:

  • VS Code: Instala la extensión "YAML" de Red Hat (usa yamllint)
  • Vim/Neovim: Usa ALE o coc-yaml
  • IDEs de JetBrains: Soporte YAML integrado con inspecciones configurables

Activa el formateo al guardar para archivos YAML para corregir automáticamente problemas de espaciado.

Linting Específico por Herramienta

El linting genérico de YAML detecta errores de sintaxis, pero los linters específicos validan la corrección semántica:

Kubernetes

# kubeval - validar contra esquemas de K8s
kubeval deployment.yaml

# kubeconform - alternativa más rápida
kubeconform -strict deployment.yaml

Docker Compose

docker compose config --quiet

GitHub Actions

# actionlint - valida la sintaxis del workflow
actionlint .github/workflows/*.yml

Ansible

ansible-lint playbook.yml

Para una comprensión más profunda de las reglas de sintaxis YAML, consulta nuestro tutorial de sintaxis YAML.

Resumen de Mejores Prácticas

  1. Añade yamllint al CI — Cada cambio en YAML debe pasar el linting
  2. Usa hooks de pre-commit — Detecta errores antes de que lleguen al repositorio
  3. Estandariza en indentación de 2 espacios — La convención en DevOps
  4. Desactiva o restringe la regla truthy — El problema de booleanos yes/no causa errores reales
  5. Establece una longitud de línea razonable — 120 caracteres cubre la mayoría de los casos
  6. Usa validadores específicos por herramienta — Linting genérico más validación específica de K8s/Docker/Actions
  7. Configura tu editor — La retroalimentación en tiempo real es más rápida que los fallos en CI

FAQ

¿Debería usar YAML o JSON para archivos de configuración?

YAML es preferible para archivos de configuración editados por humanos debido a su legibilidad, soporte de comentarios y sintaxis concisa. JSON es mejor para datos generados por máquinas y comunicación con APIs. Para una comparación detallada, consulta nuestra guía YAML vs JSON.

¿Cómo manejo las advertencias vs errores de yamllint?

Configura las reglas críticas (indentación, sintaxis) como errores que bloqueen el CI. Establece las reglas de estilo (longitud de línea, comentarios) como advertencias que aparecen pero no bloquean. Esto equilibra la rigurosidad con la productividad del desarrollador.

Recursos Relacionados

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