Files
bot_dev1 97fbbfa7b2 feat(#60): 一键部署编排与回滚引擎
纯标准库实现,对齐 PRD 5.6「⑥ 部署底座」(不真执行 k8s/helm,模拟编排):

- deploy_plan.py:DeployStep(4 类:pre_check/deploy/health_check/post_check)
  + DeployPlan(顺序约束自动校验,default_helm_release 默认 4 步计划)+
  DeployOrchestrator(按序执行,必需步骤失败即中止并标记 needs_rollback,
  deploy/health_check 为回滚检查点,pre_check 失败无需回滚)+
  HealthCheckContract(对齐 deploy/k8s/healthz 99.8% 目标)。
- rollback.py:RollbackPoint(部署前快照,values_hash SHA1 检测漂移)+
  RollbackManager(快照栈 + rollback_to_latest/rollback(n),失败压回栈顶
  保持一致性,FIFO 淘汰,支持回滚后健康检查)+ RollbackResult(4 状态)。
- tests:30 用例覆盖计划构造/顺序约束、全成功/各类失败、回滚检查点判定、
  action 异常、dry_run、空计划、快照压栈/FIFO、回滚成功/失败/多版本/空栈/
  异常、健康检查契约、values 漂移、报告序列化。
- _sanity_check.py:冒烟验证快照→部署成功→部署失败→回滚全流程。
2026-08-05 05:32:27 +08:00
..

一键部署编排 + 回滚引擎(Issue #60 / PRD 5.6)

父 Issue「⑥ 一键部署脚本与回滚机制 · 0.5d」

把一键部署与回滚落为可测试的纯标准库编排引擎——不真执行 k8s/helm,但模拟 完整编排序列(pre_check → deploy → health_check → post_check)+ 部署前快照 + 失败回滚。对齐 deploy/k8s/helm/iaop(Chart)与 deploy/k8s/healthz(探针)。

1. 部署编排(deploy_plan.py)

  • DeployStep —— 声明式步骤:kind(pre_check/deploy/health_check/post_check)
    • name + action 回调(返回 (ok, detail),默认模拟成功)。
  • DeployPlan —— 步骤序列 + 发布元信息(release/namespace/chart/version); default_helm_release() 生成默认 4 步 Helm 发布计划;步骤顺序约束 (pre_check < deploy < health_check < post_check)自动校验。
  • DeployOrchestrator —— 按序执行,任何必需步骤失败即中止并标记回滚 (DeployOutcome.needs_rollback),产出 DeployReport(逐步结果 + 日志 + 可解释 reason)。deploy/health_check 是回滚检查点;pre_check 失败无需回滚。
  • HealthCheckContract —— 健康检查契约(端点/超时/重试/可用率目标,对齐 deploy/k8s/healthz 的 99.8%)。
from deploy_plan import DeployPlan, DeployOrchestrator

plan = DeployPlan.default_helm_release(release="iaop", backend="gpu")
report = DeployOrchestrator(plan).execute()
if not report.succeeded and report.outcome.needs_rollback:
    print("需回滚:", report.outcome.reason)

2. 回滚引擎(rollback.py)

  • RollbackPoint —— 部署前快照(release/namespace/version/chart/values_hash/ created_at,不可变)。values_hash(SHA1)检测配置漂移。
  • RollbackManager —— 快照栈 + 回滚执行:snapshot(plan) 部署前压栈; rollback_to_latest() / rollback(n) 失败时回滚到稳定版本。回滚失败把目标压回 栈顶(保持栈一致性);支持回滚后健康检查。FIFO 淘汰防内存膨胀。
  • RollbackResult —— 回滚结果(SUCCESS/FAILED/NO_TARGET/SKIPPED + 可解释 reason)。
from deploy_plan import DeployPlan, DeployOrchestrator
from rollback import RollbackManager

mgr = RollbackManager()
mgr.snapshot(plan)              # 部署前快照
report = DeployOrchestrator(plan).execute()
if not report.succeeded:
    result = mgr.rollback_to_latest(reason=report.outcome.reason)
    print(result.status.value, result.detail)

与现有部署资产的关系

  • 真实环境把 action / restore_action 注入为 helm upgrade / helm rollback 等真回调即可;本引擎只做编排与状态管理,不耦合 k8s 客户端。
  • 健康检查契约对齐 deploy/k8s/healthz/probe_availability.py(99.8% 可用率目标)。

测试

python -m unittest discover -s deploy/orchestration/tests -p "test_*.py" -v

覆盖正常 + 边界 + 错误(30 用例):4 步计划构造、顺序约束、全成功/各类失败、 回滚检查点判定、action 异常、dry_run、空计划、快照压栈/FIFO、回滚成功/失败/ 多版本/空栈/异常、健康检查契约校验、values 漂移、报告序列化。