RunToolz iconRunToolz
Welcome to RunToolz!
YAML配置DevOps

YAML:沒有雜亂的配置檔案

YAML 已成為 Kubernetes、Docker 和 CI/CD 配置的標準格式。了解 YAML 的基本語法規則、縮排陷阱和常見錯誤,寫出清晰可靠的配置檔案。

RunToolz Team2026年1月16日4 min read

每個 Kubernetes manifest。每個 GitHub Actions 工作流程。每個 Docker Compose 檔案。

YAML 在配置中無處不在。它可讀,它靈活,它有一些令人驚訝的怪癖。

為什麼是 YAML?

JSON 很嚴格:雙引號、無註解、無尾隨逗號。

YAML 很寬容:最小語法、允許註解、人類可讀。

# YAML 配置
database:
  host: localhost
  port: 5432
  name: myapp
{
  "database": {
    "host": "localhost",
    "port": 5432,
    "name": "myapp"
  }
}

相同的資料,YAML 中的雜訊更少。

想親自試試嗎?將 YAML 轉換為 JSON

基礎

鍵值對:

name: John
age: 30

巢狀結構(使用空格,而非 tab):

person:
  name: John
  age: 30

清單:

colors:
  - red
  - green
  - blue

內聯清單和物件:

colors: [red, green, blue]
person: {name: John, age: 30}

挪威問題

country: NO

NO 是什麼?布林值 false。YAML 將 NOYesonoff 和其他解釋為布林值。

挪威的國家代碼變成 false。你的配置以神秘的方式損壞。

修復: 引用可能被解釋為布林值的字串。

country: "NO"

多行字串問題

description: This is a long
  description that continues

這是兩行還是一行,「that continues」縮排?取決於 YAML 解析器。

明確的多行:

# 字面(保留換行)
description: |
  Line one
  Line two

# 摺疊(連接行)
description: >
  This is one long
  line when parsed

縮排很重要

兩個空格。不是 tab。不是一個空格。不是三個。

# 正確
parent:
  child: value

# 錯誤 - tab 字符
parent:
	child: value

混合 tab 和空格會靜默地破壞 YAML。配置你的編輯器使用空格。

數字解釋

version: 1.10

那是字串「1.10」還是數字 1.1?大多數解析器將其解釋為 1.1。

浮點數學再次襲擊。引用版本號。

version: "1.10"

錨點和別名

YAML 可以引用重複的內容:

defaults: &defaults
  timeout: 30
  retries: 3

production:
  <<: *defaults
  timeout: 60

對於減少重複很強大。過度使用時令人困惑。

驗證 YAML

YAML 的靈活性意味著許多看起來有效的東西並不有效。

  • 在編輯器中使用 linter
  • 盡可能針對模式驗證
  • 轉換為 JSON 以查看解析器實際解釋的內容

如果你的配置無效,檢查解析器看到的內容,而不是你寫的內容。

YAML vs JSON vs TOML

YAML: 人類可讀,許多功能,怪異的邊緣情況。

JSON: 嚴格,簡單,廣泛支援,冗長。

TOML: 明確,更少的驚喜,在配置中越來越受歡迎。

對於機器到機器的資料,JSON 更安全。對於人類編輯的配置,如果你知道陷阱,YAML 有效。


YAML 優先考慮可讀性而非嚴格性。這種權衡創造了邊緣情況。引用看起來像布林值或數字的字串,使用明確的多行語法,並在部署前驗證。