YAML 數據序列化標準

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),提高可讀性和錯誤定位效率。

這是工作流程的「執行體」,定義了每個階段具體要做什麼。

runs-on : 運行任務的執行環境 (例如:ubuntu-latest, windows-2022)。

  • 性能與兼容性: 選擇與你的應用程式和工具鏈最匹配的作業系統和硬體規格,以確保兼容性和執行速度。

steps / script : 一系列順序執行的指令或動作。

  • 不可變性 (Immutability): 確保每次執行都是從一個乾淨的環境開始,以消除「在我機器上可以跑」的問題。

dependencies : 確保 deploy 必須在 test 成功之後才能啟動。

  • 穩健性: 建立明確的任務依賴關係,保證只有在先前的階段成功後,後續階段才能執行。

caching : 快取建構依賴項(例如:npm modules, Maven artifacts)。

效率: 這是提升 CI 速度的最重要手段之一。快取可以避免每次都下載數百 MB 的依賴,大幅縮短建構時間。

這個區塊確保你的最終交付是安全可靠的,並且能處理失敗情況。

if / condition : 條件邏輯,例如:只在 main 分支上才執行正式部署。

  • 安全性: 嚴格控制哪些分支和條件可以觸發生產環境的部署。

timeout : 為每個任務設定最大的執行時間。

  • 穩健性: 防止無限期運行的任務(例如無限迴圈測試)佔用寶貴的 CI 資源。

notifications : 任務失敗時,發送通知到 Slack 或 Email。

  • 可見性: 確保團隊能立即得知部署或測試失敗,實現快速響應和修復 (Fast Feedback Loop)。

artifacts : 儲存建構產物(例如:二進位檔案、測試報告)。

  • 可追溯性: 方便人工檢查每次建構的結果,並作為部署的輸入。

發佈留言