Appearance
Plan、Issue、Rollout
這三個是 Argus 最常被搞混的名詞。一句話講清楚:
| 名詞 | 是什麼 | 比喻 |
|---|---|---|
| Plan | 變更的內容 | 設計圖 |
| Issue | 變更的處理過程 | 工單 |
| Rollout | 變更的執行 | 施工 |
一個 Plan 可被 0 或多個 Issue 引用;一個 Issue 對應 1 個 Rollout。
Plan
是什麼
「我想做這個變更」的純技術宣告。包含:
- 目標:哪些 DB、哪個 schema
- 內容:SQL(或 schema 比對結果)
- 類型:
Schema migration/Data change/ … - 自動產出:
PlanCheckRun結果
生命週期
text
draft ──> checking ──> ready ──> issued ──> done
│
└──> failed (check error)| 狀態 | 含意 |
|---|---|
draft | 還在編輯 |
checking | plan check 跑中 |
ready | check 通過,可建 Issue |
failed | check 阻擋;改完重跑 |
issued | 已被 Issue 引用,SQL 不可改 |
done | 對應 Issue 全部 done |
不變式
- 一旦
issued,SQL 不可改。要改 → 開新 Plan。 - Plan 與 Project 綁定,不可跨 Project 引用。
Issue
是什麼
「處理一個變更」的單據。承接 Plan 並驅動:
- 審批流程(依 environment policy / approval rule)
- 協作(comment、@提及)
- 通知(IM、email)
- 進入 Rollout 的閘門
生命週期
text
open ──> approved ──> done
│ │
│ └──> canceled
└──> canceled重要欄位
| 欄位 | 說明 |
|---|---|
plan | 引用的 Plan |
approvers | 審批者清單;可由 policy 自動指派或手動加 |
approval_steps | 多步審批(Lead → DBA → Security…) |
assignee | 負責執行的人(通常是 DBA) |
comments | 協作對話 |
不變式
- 同一個 Plan 可被多個 Issue 引用(補票 / 重做場景),但同時只能有一個 Issue 處於非終態
- 自核(self-approval)由 workspace setting
disallow_self_approval_default控制;新 workspace 預設禁止(Argus P0-1 零信任)
Rollout
是什麼
Issue 通過審批後,真的把 Plan 施加到資料庫的執行容器。Rollout 把 Plan 的 target 拆成多個 Task,依 stage 順序執行。
生命週期
text
pending ──> running ──> done
│ │
│ ├──> canceled
│ └──> paused ──> running (resume)
└──> canceledStage
Rollout 內部可分 Stage(階段),常見模式:
text
Stage 1: Dev environment
└── Task A: dev.users
└── Task B: dev.orders
Stage 2: Staging environment
└── Task C: staging.users
└── Task D: staging.orders
Stage 3: Production environment
└── Task E: prod.users
└── Task F: prod.orders執行可以:
- 一鍵全跑(適合低風險)
- 逐 stage 跑(推薦,可中間驗證)
- 排程(適合凌晨變更)
與 Issue 的關係
- 一個 Issue 恰好 一個 Rollout(一對一)
- Issue approved 時自動建立 Rollout(
pending) - DBA 觸發執行 → Rollout 進
running
為什麼要分三個?
歷史上有不少系統把這三者混成一個東西。Argus 拆開的理由:
| 拆開的好處 | 場景 |
|---|---|
| 同個變更內容可被多次處理 | 第一次發布失敗、第二次補票 |
| 技術內容與協作流程解耦 | DBA / 開發者可獨立改各自關注的部分 |
| 審批流程可動態調整 | 不必為了改 reviewer 就改變更內容 |
| 執行可獨立失敗 / 重試 | TaskRun 在 Rollout 下重試,不影響 Plan / Issue |
在 UI 上的位置
| 物件 | 入口 |
|---|---|
| Plan | Projects → <p> → Plans |
| Issue | Projects → <p> → Issues、左側全域 sidebar My Issues |
| Rollout | Issue 詳情頁下半部,或 Projects → <p> → Rollouts |