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
| Regla | Propósito | Configuración Recomendada |
|---|---|---|
indentation | Aplicar indentación consistente | 2 espacios, sin tabulaciones |
line-length | Prevenir líneas demasiado largas | 120 caracteres (advertencia) |
truthy | Controlar valores booleanos | Solo true/false |
comments | Formato de comentarios | Requerir espacio después de # |
document-start | Requerir --- al inicio | Desactivar (opcional) |
trailing-spaces | Sin espacios al final | Activar |
new-line-at-end-of-file | Finales de archivo consistentes | Activar |
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
- Añade yamllint al CI — Cada cambio en YAML debe pasar el linting
- Usa hooks de pre-commit — Detecta errores antes de que lleguen al repositorio
- Estandariza en indentación de 2 espacios — La convención en DevOps
- Desactiva o restringe la regla truthy — El problema de booleanos
yes/nocausa errores reales - Establece una longitud de línea razonable — 120 caracteres cubre la mayoría de los casos
- Usa validadores específicos por herramienta — Linting genérico más validación específica de K8s/Docker/Actions
- 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
- Validador de YAML — Valida la sintaxis YAML en línea al instante
- Tutorial de Sintaxis YAML — Aprende YAML desde cero
- YAML para Docker Compose — Patrones YAML específicos de Docker