← 所有工作經歷

案例研究 01 · 實作內容

跨儲存庫資料庫結構相容性 CI

建立 CI 驗證流程,檢查共用模組版本、資料庫遷移完整性,以及多個儲存庫間的結構相容性。

已實作並測試 · 合併檢查範圍待補齊
GitHub ActionsPythonGo ModulesSQLGit

工程挑戰

多個應用程式儲存庫會使用共用 Go 模組中的資料庫遷移。即使建置或單元測試通過,也不一定能發現分支引用了較舊的模組版本、修改了已發布的遷移,或新增了不相容於既有應用程式版本的資料庫結構變更。

架構與設計

  • 比對目前分支與 develop 基準分支所引用的共用模組版本。
  • 在程式碼合併前,檢查遷移歷程與新增的資料庫結構變更。
  • 透過 CI 回報驗證結果,讓儲存庫負責人在合併前檢視失敗項目。
工作流程概覽
  1. 01應用程式儲存庫
  2. 02共用 Go 模組
  3. 03遷移完整性檢查
  4. 04資料庫結構相容性檢查
  5. 05CI 狀態

實作內容

  • 新增跨儲存庫檢查,確認共用 Go 模組的版本一致性。
  • 利用 Git 歷程與遷移差異,偵測既有遷移檔案遭刪除或修改的情況。
  • 加入遷移命名、重複數字版本,以及已發布檔案不可變更等檢查。
  • 加入資料庫相容性檢查,例如新增可為 NULL 的欄位,以及新增具有預設值的必填欄位。
  • 為有效變更、無效遷移,以及 SQL 註解解析邊界案例加入 Python 單元測試。
  • 僅在相關儲存庫設定私有 Go 模組的 SSH URL 改寫,避免變更全域 Git 設定。

驗證與影響

  • 檢查程式與單元測試都有成功執行的紀錄。
  • 當分支引用的共用模組版本早於 develop,且遷移有所缺漏時,檢查流程會拒絕該分支。這驗證了防護機制有效,也揭示版本比較必須先滿足版本對齊的前提。

限制與後續工作

  • 尚未確認完整的 Branch Protection、Merge Queue、所有分支觸發條件,以及私有儲存庫權限涵蓋範圍。
  • 目前的比較方式假設工作分支所使用的共用模組版本不早於選定的基準版本。