FR-173 · 需求索引 · 本頁由 build 掃資料夾生成

FR-173 出版管線定稿

三條 CI、一個簽章金庫:在 GitLab 按 Run pipeline 就出包、出包時向自架 Vault 要簽名、190 試過再按發布;另有不掃描不上站、只給 190 的測試包。預估 2 個工作天。

狀態:詳見下方 文件 4 份 handoff 2 份

FR-173 出版管線定稿

§1

🔴 先看哪一份

文件 性質 看什麼
design.md 設計(定稿) 九項決策、目標管線圖、三 repo CI 分工表、Vault 怎麼用、6 張卡
vault-status.md 現況 172 上的 Vault 現在長什麼樣:版本、簽章鑰(公鑰、kid、三個 false)、帳號、祕密存哪類地方、還沒做的;不含祕密
vault-setup-runbook.md 操作手冊 從零架 Vault 的逐步指令(安裝、TLS、設定檔逐行註解、初始化、解封、Transit 鑰、管理者帳號、快照、網頁介面、日常維運);不含祕密
handoff/cards.py 拆卡底表 跑它驗批次;Notion 卡從這裡產
出版管線系統說明 獨立文件 整套 CI 現況:用到哪幾台、哪些服務、設定在哪、祕密放哪、Vault 角色、彼此怎麼連、流程、從零重建、出事怎麼辦
FINAL-SPEC.md 定版(未寫) 結案卡 D-1 寫,只放摘要、指向總覽
§2

結論

整套 CI 的現況(機器、服務、設定、流程、排錯)在獨立文件 出版管線系統說明;本站是 FR-173 的設計決策與過程。

  • 發版起點:GitLab BE(或 Agent)專案 → Run pipeline。正式版從受保護 tag 跑,測試包勾 internal_test 從任何 branch 跑。Mac 不用參與。
  • 出包時就蓋章:CI 打包完向自架 Vault 要簽名,登記「蓋好章的草稿」,只有 190 看得到;190 試過,回 GitLab 按「發布」,客戶才看得到。原因:客戶端一律拒收沒蓋章的清單,「先裝草稿再蓋章」走不通。
  • 更新站多認 GitLab 的 job 身分來按發布(只限 BE/Agent 專案、受保護 tag),不留長效通行碼。
  • 測試包:跳過排練、SBOM+弱掃、Harbor、R2、更新站,用 Vault 測試章簽、直接升 190;主系統約 30 分(不重編約 10 分),正式約 50 分。
  • BE、Agent、FE 各一支 CI,都跑在 188 shell runner;BE 觸發 FE;只有 Nuitka 那段 BE、Agent 串行。jedi 套件的 runner 待開。
  • 只有決策者按的 pipeline 拿得到章:Vault 角色綁 GitLab user_id(免費版受保護 tag 不能指定人)。
  • 建置期祕密進 Vault,188 上不再落檔。GitLab 免費版:用 id_tokens+script 內登入 Vault(secrets: 是付費版)。
  • Mac 根印章保留當備用。像但不做:雲端 KMS、Sigstore keyless、update-center 與 LC 進管線、客戶主機預設密碼(另案)、推 tag 自動跑。
§3

📊 總進度

棒 卡 做什麼 狀態
1 — 首腦:與 171/172 同週期討論、查業界做法、design 定稿 ✅ 2026-11-01
— 決策者功課 在 172 架 Vault:安裝、TLS、初始化、解封、Transit Ed25519 鑰(kid 05086455d42ca0d6)、jedi 管理者帳號、撤銷 root ✅ 2026-11-01
— 決策者功課(待補) 每日快照+異地備份、防火牆;決策者裁先開發,正式出版前補 ⬜
2 — 首腦接手:補卡(免費版限制、runner)、設計修訂(出包時蓋章、測試包、GitLab 身分發布)、帶決策者做 Vault/GitLab 設定 ✅ 2026-11-03
批 1 CM-3463 V-1 蓋章工具接 Vault、更新站收蓋好章的草稿、認 GitLab 身分發布 ✅ 合回 update-center(9c363ab)
批 1 CM-3464 C-3 FE 自己的 CI(188 runner、Nexus 帳密從 Vault 拿) ✅ 合回 FE(eb63f95c),GitLab pipeline 3022544900 通過
批 2 CM-3466 C-1、CM-3465 C-2 BE、Agent 發版 pipeline 🔄 派工中;C-2 等 CM-3480
批 2 CM-3480 C-3b FE Dockerfile 多 console-dist 打包目標(從 C-2 拆出:免費版不能跨專案下載 artifact) ⬜
批 3 CM-3467 C-4、CM-3468 D-1 jedi 套件 CI;補齊獨立文件 docs/system-design/release-pipeline/出版管線總覽.md ⬜
§4

需求討論紀錄

  • 2026-11-01 決策者:「我看一定要我主本機去簽章,我想把這個 secret 放到 gitlab secret 讓他自己去簽有機會嗎?」「release note 以及最小相容版本應該可以放在 CI 前的欄位,Azure 的 SSL 憑證就是放在 key vault。」
  • 2026-11-01 首腦:私鑰貼 GitLab 變數是反模式;GitLab 沒有簽章服務;Cloudflare 沒有 KMS(Workers KV 不是金庫);三條路①update-center Worker 簽②雲端 KMS 換 P-256③自架 Vault。查業界:共識是 KMS/Vault+OIDC,Sigstore keyless 不適合離線客戶。
  • 2026-11-01 決策者:「那就 3 吧」(自架 Vault)。「主系統/agent 的 CI 要分開」「update center 應該是分開跟 LC 狀況一樣,這先不管」。
  • 2026-11-01 決策者確認:用 HashiCorp Vault(不是 OpenBao;文件多、內部用 BSL 不受限、日後要換 OpenBao 指令與 API 相同);GitLab 是免費版,GitLab Secrets Manager(19.5 GA、底層 OpenBao)要 Premium 且不開放簽章,不用;專用 VM 192.168.50.172(Ubuntu 26.04、4 vCPU、15 GB)、apt 裝不用 docker;決策者自己登入照手冊裝,解封鑰匙與 root token 自己保管。
  • 2026-11-01 決策者在 172 照手冊架好 Vault;中途手冊兩處寫錯(第 2 段 cd 進 700 目錄失敗導致憑證寫到家目錄、第 9 段先撤 root 才登新帳號導致無 token 可用,靠 generate-root 救回),已修正。帳號名改 jedi。快照與防火牆裁先不做、先開發。
  • 2026-11-01 決策者:「那個不能放最後嗎?開發應該不影響吧」「開發跑的期間我會來執行架設,CI 應該是準備出版的最後一步了」→ 排最後,Vault 與 runner 由決策者自架。
§5

文件

以下全部由 build 掃資料夾產生,新增檔案重 build 即自動出現。標題連結指向渲染後的 HTML,md 連向源檔。

說明與手冊

文件 類型 標題 最後更新
vault-setup-runbook / md 操作手冊 Vault 架設手冊 2026-11-04

設計

文件 類型 標題 最後更新
design-v2.0 / md 設計 設計 v2.0(定稿):正式發版、直接部署、測試版發布三條路 2026-11-05
design / md 設計 設計 v1.0(定稿):三條 CI、一個簽章金庫 2026-11-04

其他文件

文件 類型 標題 最後更新
vault-status / md 文件 Vault 現況 2026-11-04

交接與收口時間軸(handoff/,2 份)

由新到舊。每份是某一棒次交接當下的完整現況快照,看某個時間點「當時知道什麼」請從這裡進。

日期 文件 標題
2026-11-05 FR-173-STATE / md FR-173 交接現況(STATE)
2026-11-05 FR-173-LOG / md FR-173 交接紀錄(LOG,append-only)