YAML (YAML Ain’t Markup Language) 數據序列化標準
1. 專案配置 (Configuration)
用來儲存應用程式的設定或參數,
- 例如:資料庫連線字串、API 金鑰、環境變數、伺服器埠號等。
- 優勢: 比起傳統的 INI 或 XML 檔案,YAML 使用縮排來表示層級結構,語法更簡潔,看起來就像一個大綱筆記。
2. 自動化工作流程定義 (Workflow Definition)
在 CI/CD (持續整合/持續部署) 系統中(如 GitHub Actions, GitLab CI, Jenkins),YAML 檔案是用來定義「當程式碼發生某個事件時,電腦應該自動執行哪些步驟」的腳本。
優勢: 它讓整個軟體交付過程(測試、建構、部署)可以被版本控制,並且自動化執行,極大地提升了開發效率和部署的可靠性。
區塊一:觸發器與環境 (Triggers and Environment)
定義「何時啟動」和「在哪裡執行」的工作流程。
name : 工作流程的名稱 (例如:CI/CD – Backend Deployment)。
- 可讀性: 讓團隊成員一眼就知道這個檔案的作用。
on / triggers : 定義啟動工作流程的事件。
- 效率: 只在必要的事件上觸發 (例如:push 到 main 分支,或 pull_request),避免不必要的建構浪費資源。
defaults / env : 設定環境變數、預設的 Shell 等。
- 安全: 敏感資訊(如 API 金鑰)絕不能直接寫在這裡,必須使用 CI/CD 系統提供的密鑰管理 (Secrets Management) 系統。
jobs / stages : 定義工作流程中的所有獨立任務階段。
- 邏輯拆分: 將工作拆分為獨立階段(如 build, test, deploy),提高可讀性和錯誤定位效率。
區塊二:核心任務執行 (Core Job Execution)
這是工作流程的「執行體」,定義了每個階段具體要做什麼。
runs-on : 運行任務的執行環境 (例如:ubuntu-latest, windows-2022)。
- 性能與兼容性: 選擇與你的應用程式和工具鏈最匹配的作業系統和硬體規格,以確保兼容性和執行速度。
steps / script : 一系列順序執行的指令或動作。
- 不可變性 (Immutability): 確保每次執行都是從一個乾淨的環境開始,以消除「在我機器上可以跑」的問題。
dependencies : 確保 deploy 必須在 test 成功之後才能啟動。
- 穩健性: 建立明確的任務依賴關係,保證只有在先前的階段成功後,後續階段才能執行。
caching : 快取建構依賴項(例如:npm modules, Maven artifacts)。
效率: 這是提升 CI 速度的最重要手段之一。快取可以避免每次都下載數百 MB 的依賴,大幅縮短建構時間。
區塊三:部署與錯誤處理 (Deployment and Error Handling)
這個區塊確保你的最終交付是安全可靠的,並且能處理失敗情況。
if / condition : 條件邏輯,例如:只在 main 分支上才執行正式部署。
- 安全性: 嚴格控制哪些分支和條件可以觸發生產環境的部署。
timeout : 為每個任務設定最大的執行時間。
- 穩健性: 防止無限期運行的任務(例如無限迴圈測試)佔用寶貴的 CI 資源。
notifications : 任務失敗時,發送通知到 Slack 或 Email。
- 可見性: 確保團隊能立即得知部署或測試失敗,實現快速響應和修復 (Fast Feedback Loop)。
artifacts : 儲存建構產物(例如:二進位檔案、測試報告)。
- 可追溯性: 方便人工檢查每次建構的結果,並作為部署的輸入。