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

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

AturanTujuanPengaturan yang Direkomendasikan
indentationMenjaga konsistensi indentasi2 spasi, tanpa tab
line-lengthMencegah baris yang terlalu panjang120 karakter (peringatan)
truthyMengontrol nilai booleanHanya true/false
commentsFormat komentarWajib spasi setelah #
document-startMewajibkan --- di awalNonaktifkan (opsional)
trailing-spacesTidak ada spasi di akhir barisAktifkan
new-line-at-end-of-fileAkhir file yang konsistenAktifkan

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

  1. Tambahkan yamllint ke CI — Setiap perubahan YAML harus lolos linting
  2. Gunakan pre-commit hook — Tangkap error sebelum masuk ke repository
  3. Standarkan indentasi 2 spasi — Konvensi DevOps
  4. Nonaktifkan atau batasi aturan truthy — Masalah boolean yes/no menyebabkan bug nyata
  5. Tetapkan panjang baris yang wajar — 120 karakter mencakup sebagian besar kasus
  6. Gunakan validator khusus alat — Linting generik ditambah validasi khusus K8s/Docker/Actions
  7. 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

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