Boas PrƔticas de Linting YAML: Detete Erros Antes de Implementar
Um espaço mal colocado num ficheiro YAML pode derrubar uma implementação em produção. Ao contrÔrio do JSON, que falha ruidosamente em erros de sintaxe, o YAML pode silenciosamente analisar indentação incorreta em estruturas de dados inesperadas. O linting deteta estes problemas antes de chegarem a produção.
PorquĆŖ Fazer Linting de YAML?
A flexibilidade do YAML Ʃ simultaneamente a sua forƧa e fraqueza:
# Isto Ʃ YAML vƔlido mas provavelmente estƔ errado
ports:
- 80
- 443
name: webserver # Esta é uma chave no SEGUNDO item da lista, não no mapeamento!
O exemplo acima cria uma lista onde o segundo item é um mapeamento {443: null, name: webserver}. Um linter detetaria este problema de indentação. Sem linting, este tipo de erro pode levar horas a diagnosticar.
yamllint: O Linter Padrão
O yamllint Ć© o linter de YAML mais amplamente utilizado. Verifica tanto a validade da sintaxe como a consistĆŖncia de estilo.
Instalação
pip install yamllint
Utilização BÔsica
# Lint de um Ćŗnico ficheiro
yamllint config.yaml
# Lint de um diretório
yamllint .
# Lint com uma configuração especĆfica
yamllint -c .yamllint.yml .
Configuração
Crie .yamllint.yml na raiz do seu projeto:
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
Regras Principais Explicadas
| Regra | Finalidade | Configuração Recomendada |
|---|---|---|
indentation | Impor indentação consistente | 2 espaços, sem tabs |
line-length | Prevenir linhas demasiado longas | 120 caracteres (aviso) |
truthy | Controlar valores booleanos | Apenas true/false |
comments | Formatação de comentÔrios | Exigir espaço após # |
document-start | Exigir --- no inĆcio | Desativar (opcional) |
trailing-spaces | Sem espaƧos finais | Ativar |
new-line-at-end-of-file | TerminaƧƵes de ficheiro consistentes | Ativar |
Erros Comuns Detetados pelo Linting
1. Caracteres de Tabulação
O YAML proĆbe tabs para indentação, mas os editores por vezes inserem-nos:
# ERRO: carÔcter de tabulação
server:
port: 8080 # Tab em vez de espaƧos!
2. Indentação Inconsistente
# ERRO: mistura de indentação de 2 e 4 espaços
database:
host: localhost
port: 5432 # Errado: 4 espaƧos em vez de 2
3. Chaves Duplicadas
# ERRO: chave duplicada (a segunda sobrepƵe silenciosamente a primeira)
server:
port: 8080
host: localhost
port: 9090 # Duplicada! Qual porta Ć© utilizada?
4. EspaƧos Finais
EspaƧos finais invisĆveis podem causar comportamento surpreendente, especialmente em strings multilinha. Um linter sinaliza-os imediatamente.
Validação rÔpida sem instalar nada: cole o seu YAML no nosso Validador YAML.
Integração 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
Agora o YAML Ć© automaticamente verificado pelo linter antes de cada commit.
GitLab CI
yaml-lint:
image: python:3.12-slim
script:
- pip install yamllint
- yamllint .
rules:
- changes:
- "**/*.yaml"
- "**/*.yml"
Integração com Editores
A maioria dos editores suporta linting de YAML em tempo real:
- VS Code: Instale a extensão "YAML" da Red Hat (utiliza yamllint)
- Vim/Neovim: Utilize ALE ou coc-yaml
- IDEs JetBrains: Suporte YAML integrado com inspeƧƵes configurƔveis
Ative a formatação automÔtica ao guardar para ficheiros YAML para corrigir automaticamente problemas de espaços em branco.
Linting EspecĆfico por Ferramenta
O linting genĆ©rico de YAML deteta erros de sintaxe, mas linters especĆficos por ferramenta validam a correção semĆ¢ntica:
Kubernetes
# kubeval - validar contra esquemas K8s
kubeval deployment.yaml
# kubeconform - alternativa mais rƔpida
kubeconform -strict deployment.yaml
Docker Compose
docker compose config --quiet
GitHub Actions
# actionlint - valida a sintaxe de workflows
actionlint .github/workflows/*.yml
Ansible
ansible-lint playbook.yml
Para uma compreensão mais profunda das regras de sintaxe YAML, consulte o nosso tutorial de sintaxe YAML.
Resumo de Boas PrƔticas
- Adicione yamllint ao CI ā Cada alteração de YAML deve passar pelo linting
- Utilize hooks de pre-commit ā Detete erros antes de chegarem ao repositório
- Padronize a indentação de 2 espaƧos ā A convenção DevOps
- Desative a regra truthy ou restrinja-a ā O problema dos booleanos
yes/nocausa erros reais - Defina um comprimento de linha razoĆ”vel ā 120 caracteres cobre a maioria dos casos
- Utilize validadores especĆficos por ferramenta ā Linting genĆ©rico mais validação especĆfica para K8s/Docker/Actions
- Configure o seu editor ā Feedback em tempo real Ć© mais rĆ”pido do que falhas de CI
FAQ
Devo utilizar YAML ou JSON para ficheiros de configuração?
O YAML é preferido para ficheiros de configuração editados por humanos devido à sua legibilidade, suporte a comentÔrios e sintaxe concisa. O JSON é melhor para dados gerados por mÔquina e comunicação por API. Para uma comparação detalhada, consulte o nosso guia YAML vs JSON.
Como devo lidar com avisos vs erros do yamllint?
Configure regras crĆticas (indentação, sintaxe) como erros que bloqueiam o CI. Defina regras de estilo (comprimento de linha, comentĆ”rios) como avisos que aparecem mas nĆ£o bloqueiam. Isto equilibra o rigor com a produtividade do programador.
Recursos Relacionados
- Validador YAML ā Valide a sintaxe YAML online instantaneamente
- Tutorial de Sintaxe YAML ā Aprenda YAML do zero
- YAML para Docker Compose ā PadrƵes YAML especĆficos do Docker