Skip to content

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還在編輯
checkingplan check 跑中
readycheck 通過,可建 Issue
failedcheck 阻擋;改完重跑
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)
   └──> canceled

Stage

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 上的位置

物件入口
PlanProjects → <p> → Plans
IssueProjects → <p> → Issues、左側全域 sidebar My Issues
RolloutIssue 詳情頁下半部,或 Projects → <p> → Rollouts

相關

Argus — 公司內部資料庫變更審計平台