Praktik Terbaik Linting YAML: Tangkap Error Sebelum Deploy
Satu spasi yang salah tempat di file YAML bisa meruntuhkan deployment produksi. Berbeda dengan JSON yang langsung gagal pada error sintaksis, YAML bisa secara diam-diam mem-parse indentasi yang salah menjadi struktur data yang tidak terduga. Linting menangkap masalah-masalah ini sebelum sampai ke produksi.
Mengapa Perlu Lint YAML?
Fleksibilitas YAML adalah kekuatan sekaligus kelemahannya:
# This is valid YAML but probably wrong
ports:
- 80
- 443
name: webserver # This is a key in the SECOND list item, not the mapping!
Kode di atas membuat sebuah list di mana item kedua adalah mapping {443: null, name: webserver}. Linter akan menangkap masalah indentasi ini. Tanpa linting, jenis bug seperti ini bisa memakan waktu berjam-jam untuk didiagnosis.
yamllint: Linter Standar
yamllint adalah linter YAML yang paling banyak digunakan. Ia memeriksa validitas sintaksis dan konsistensi gaya.
Instalasi
pip install yamllint
Penggunaan Dasar
# Lint a single file
yamllint config.yaml
# Lint a directory
yamllint .
# Lint with a specific config
yamllint -c .yamllint.yml .
Konfigurasi
Buat .yamllint.yml di root proyek Anda:
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
Penjelasan Aturan Utama
| Aturan | Tujuan | Pengaturan yang Direkomendasikan |
|---|---|---|
indentation | Menjaga konsistensi indentasi | 2 spasi, tanpa tab |
line-length | Mencegah baris yang terlalu panjang | 120 karakter (peringatan) |
truthy | Mengontrol nilai boolean | Hanya true/false |
comments | Format komentar | Wajib spasi setelah # |
document-start | Mewajibkan --- di awal | Nonaktifkan (opsional) |
trailing-spaces | Tidak ada spasi di akhir baris | Aktifkan |
new-line-at-end-of-file | Akhir file yang konsisten | Aktifkan |
Error Umum yang Ditangkap Linting
1. Karakter Tab
YAML melarang tab untuk indentasi, tetapi editor terkadang menyisipkannya:
# ERROR: tab character
server:
port: 8080 # Tab instead of spaces!
2. Indentasi Tidak Konsisten
# ERROR: mixing 2 and 4 space indentation
database:
host: localhost
port: 5432 # Wrong: 4 spaces instead of 2
3. Key Duplikat
# ERROR: duplicate key (second silently overrides first)
server:
port: 8080
host: localhost
port: 9090 # Duplicate! Which port is used?
4. Spasi di Akhir Baris
Spasi tak terlihat di akhir baris dapat menyebabkan perilaku yang mengejutkan, terutama pada string multiline. Linter langsung menandai hal-hal ini.
Validasi cepat tanpa perlu menginstal apa pun: tempel YAML Anda ke YAML Validator kami.
Integrasi 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
Sekarang YAML secara otomatis di-lint sebelum setiap commit.
GitLab CI
yaml-lint:
image: python:3.12-slim
script:
- pip install yamllint
- yamllint .
rules:
- changes:
- "**/*.yaml"
- "**/*.yml"
Integrasi Editor
Sebagian besar editor mendukung linting YAML secara real-time:
- VS Code: Instal ekstensi "YAML" oleh Red Hat (menggunakan yamllint)
- Vim/Neovim: Gunakan ALE atau coc-yaml
- JetBrains IDEs: Dukungan YAML bawaan dengan inspeksi yang dapat dikonfigurasi
Aktifkan format-on-save untuk file YAML agar masalah spasi otomatis diperbaiki.
Linting Khusus Alat
Linting YAML generik menangkap error sintaksis, tetapi linter khusus alat memvalidasi kebenaran semantik:
Kubernetes
# kubeval - validate against K8s schemas
kubeval deployment.yaml
# kubeconform - faster alternative
kubeconform -strict deployment.yaml
Docker Compose
docker compose config --quiet
GitHub Actions
# actionlint - validates workflow syntax
actionlint .github/workflows/*.yml
Ansible
ansible-lint playbook.yml
Untuk pemahaman lebih mendalam tentang aturan sintaksis YAML, lihat tutorial sintaksis YAML kami.
Ringkasan Praktik Terbaik
- Tambahkan yamllint ke CI — Setiap perubahan YAML harus lolos linting
- Gunakan pre-commit hook — Tangkap error sebelum masuk ke repository
- Standarkan indentasi 2 spasi — Konvensi DevOps
- Nonaktifkan atau batasi aturan truthy — Masalah boolean
yes/nomenyebabkan bug nyata - Tetapkan panjang baris yang wajar — 120 karakter mencakup sebagian besar kasus
- Gunakan validator khusus alat — Linting generik ditambah validasi khusus K8s/Docker/Actions
- Konfigurasi editor Anda — Umpan balik real-time lebih cepat daripada kegagalan CI
FAQ
Haruskah saya menggunakan YAML atau JSON untuk file konfigurasi?
YAML lebih disukai untuk file konfigurasi yang diedit manusia karena keterbacaannya, dukungan komentar, dan sintaksis yang ringkas. JSON lebih baik untuk data yang dihasilkan mesin dan komunikasi API. Untuk perbandingan detail, lihat panduan YAML vs JSON kami.
Bagaimana cara menangani peringatan vs error yamllint?
Konfigurasi aturan kritis (indentasi, sintaksis) sebagai error yang memblokir CI. Tetapkan aturan gaya (panjang baris, komentar) sebagai peringatan yang muncul tetapi tidak memblokir. Ini menyeimbangkan ketegasan dengan produktivitas developer.
Sumber Terkait
- YAML Validator — Validasi sintaksis YAML secara online secara instan
- Tutorial Sintaksis YAML — Pelajari YAML dari awal
- YAML untuk Docker Compose — Pola YAML khusus Docker