本卡屬 FR-167(母卡 CM-3241),卡 P1-7,階段 P1 升級變安全、批 5。只改 BE(主 repo,Repo 欄空著)。依賴:P1-4、P1-6。
升級失敗或升到一半斷電、docker 當掉時怎麼救:丟掉複本、改接原本那份、起保留的舊映像、健康檢查。開機時 systemd 讀進度檔,發現上次沒跑完就自動做這件事;guidantai recover 讓 IT 手動觸發同一支。
所有失敗的終點;退回本身不能失敗
extend:填 lib/upgrade_rollback.sh、lib/upgrade_boot_check.sh;recover 子命令(P1-1 已派送)呼叫同一支 rollback
repo:~/Projects/Billows/Audit-Manager/compliance-manager-be
改既有:scripts/installer/lib/upgrade_rollback.sh(P1-1 空殼)
改既有:scripts/installer/lib/upgrade_boot_check.sh(P1-1 空殼)
新開:scripts/installer/systemd/guidant-upgrade-boot-check.service
細節在 design.md §5 對應段(~/Projects/Billows/Audit-Manager/compliance-manager-be/docs/features/FR-167-2610-online-update-channel/design.md,開 design.html 看導覽);本段只列本卡要做到的點:
lib/upgrade_rollback.sh:停新版容器 → rm -rf pgdata-next → GUIDANT_PGDATA_DIR=pgdata 起進度檔 prev_images 列的舊映像 → 健康檢查 → 進度檔 rolled_back_at、result=rolled_back;--recover 模式一樣,但先 docker compose down 清殘留。lib/upgrade_boot_check.sh:讀進度檔,status=running 且步 3~6 → 呼叫 rollback;其他不動。systemd/guidant-upgrade-boot-check.service(oneshot、After=docker.service)由 P3-2c 的 systemd_units.sh 一起裝(本卡提供檔,裝的那行請 owner 卡 P3-2c 已預留)。succeeded 狀態測試要紅。本機 docker:進度檔停在任一未完成步驟時跑 boot_check → 呼叫 rollback:複本刪、原份接回、假的舊版容器起、進度檔 rolled_back_at 有值;進度檔 succeeded 時 boot_check 什麼都不做;guidantai recover 走同一支(diff 兩條路徑呼叫同一函式);shellcheck 綠
測試期(不是你做):這張卡在 190 的真實情境是「190:第 ⑦ 步 kill -9 整個流程 → 開機單元自動退回、舊版起來、筆數一致;systemctl stop docker 後 sudo guidantai recover 收尾」,由首腦在測試期操作、決策者看畫面。你只要確保上面的本機驗收全過、程式對這個情境沒有寫死假設。
對照雛形:~/Projects/Billows/Audit-Manager/compliance-manager-be/docs/features/FR-167-2610-online-update-channel/prototype/index.html(上方「跟著走」)。