Files
iAOP/deploy/orchestration/README.md
T

67 lines
3.2 KiB
Markdown
Raw Normal View History

# 一键部署编排 + 回滚引擎(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%)。
```python
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)。
```python
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% 可用率目标)。
## 测试
```bash
python -m unittest discover -s deploy/orchestration/tests -p "test_*.py" -v
```
覆盖正常 + 边界 + 错误(30 用例):4 步计划构造、顺序约束、全成功/各类失败、
回滚检查点判定、action 异常、dry_run、空计划、快照压栈/FIFO、回滚成功/失败/
多版本/空栈/异常、健康检查契约校验、values 漂移、报告序列化。