본문 바로가기
C.W.K.
Stream
Lesson 08 of 08 · published

Linting & validation — yamllint, schema, tooling

~10 min · yaml, linting, validation, yamllint

Level 0평문
0 XP0/64 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

배포 전 YAML 버그 잡는 toolchain

yamllint — 스타일 + 정확성

yamllint 가 사실상 표준 YAML linter 야. 들여쓰기가 흐트러진 곳, 줄 끝 공백, 너무 긴 줄, 문법 오류, 따옴표 스타일이 뒤섞인 곳 같은 흔한 함정을 잡아줘. 설정은 리포 루트의 .yamllint 에 두고. CI 에서 돌리면서 에러가 나면 빌드를 세워버려.

Schema validation — 같은 JSON Schema, YAML 에 적용

YAML 은 JSON 과 똑같은 데이터 모델로 파싱돼. 그래서 JSON Schema 로 YAML 을 그대로 검증할 수 있어. 고칠 것도 없어. 쓸 도구는 check-jsonschema, ajv (YAML loader 플러그인을 얹어서), Kubernetes 전용이면 kubeconform 이 있어.

도구별 validator

  • kubeval / kubeconform — Kubernetes manifest 를 공식 OpenAPI schema 에 대고 검증해.
  • actionlint — GitHub Actions workflow 파일을 봐. uses: 오타, 선언 안 한 env var, 빠뜨린 checkout 단계까지 잡아줘.
  • docker compose configcompose.yaml 을 검증하고 정규화해. anchor 도 펼쳐서 보여주고.
  • helm lint — Helm chart 의 YAML 을 훑어.
원칙: YAML 은 파싱할 땐 한없이 너그럽고 배포할 땐 가차 없어. 그러니 검증을 앞으로 당겨. 클러스터에서 터뜨리지 말고 pre-commit 에서 lint 와 schema 검사를 돌려. actionlint 를 붙이는 데 드는 30 초가, 로컬에서 잡힌 깨진 workflow 와 깨진 main 브랜치를 가르는 차이야.

Code

yamllint 빠른 시작·bash
# 한 번 설치
pip install yamllint
# 또는
brew install yamllint

# 디렉토리 트리 lint
yamllint .

# CI 친화: 에러 시 비-0 종료
yamllint --strict .

# 설정: 리포 루트의 .yamllint
cat > .yamllint <<EOF
rules:
  document-start: disable
  line-length:
    max: 120
  indentation:
    spaces: 2
EOF
JSON Schema 로 YAML 검증·bash
# check-jsonschema (pip install check-jsonschema)
check-jsonschema --schemafile config.schema.json config.yaml

# ajv with js-yaml plugin (Node)
npm install -g ajv-cli
ajv validate -s config.schema.json -d config.yaml --data-stream

# kubeconform — Kubernetes manifest
brew install kubeconform
kubeconform deployment.yaml service.yaml
actionlint — GitHub Actions linter·bash
# 설치
brew install actionlint
# 또는
go install github.com/rhysd/actionlint/cmd/actionlint@latest

# Workflow lint
actionlint

# CI 에서:
actionlint -color

# pre-commit hook (.pre-commit-config.yaml):
# - repo: https://github.com/rhysd/actionlint
#   rev: v1.6.27
#   hooks:
#     - id: actionlint

External links

Exercise

YAML 이 잔뜩 든 디렉토리를 하나 골라. .github/workflows 든 deploy/k8s/ 든 ansible/ 이든. yamllint . 을 돌리고, 거기 맞는 전용 validator 도 같이 돌려 (actionlint, kubeconform). 나오는 에러를 전부 고쳐. 그 다음 lint 명령을 pre-commit hook 이나 CI 단계에 박아둬. 나중의 내가 고마워할 거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.