kestra-v50.md 4.3 KB

Kestra V50 验证记录

  • 代码版本:codex/kestra-v50,基线 38326506f09a467d598cdcfba06b1993af65e792
  • 验证日期:2026-07-18
  • 变更范围:n8n 迁移资产清单、WorkflowSpec/SchedulePlan、机器策略、 引擎无关数据库迁移与仓储兼容

已执行验证

基线

tests/test_database_migrations.py
tests/test_workflow_version_schema.py
tests/test_workflow_repository.py
tests/test_workflow_activation.py

8 passed, 1 skipped

跳过项需要临时 PostgreSQL;后续已单独启动 PostgreSQL 并实际执行通过。

TDD 过程

  • n8n 资产清单:先确认 2 个测试因模块不存在失败,实现后转绿;真实调用又发现 直接 CLI 导入路径和 Flask 超时上下文两个问题,分别补充失败测试并修复,最终 该模块 4 passed
  • WorkflowSpec/SchedulePlan/策略:先确认 9 个测试因模块不存在失败,实现后 9 passed
  • 通用仓储与迁移:先确认 6 个测试因模块/迁移不存在失败,实现后相关集合 11 passed, 1 skipped
  • 旧 n8n 仓储通用字段兼容测试先失败,补充通用字段写入后通过。

V50 L1/L2 增量验证

tests/test_n8n_migration_inventory.py
tests/core/orchestration/test_spec.py
tests/core/orchestration/test_repository.py
tests/core/orchestration/test_policy.py
tests/test_database_migrations.py
tests/test_workflow_engine_abstraction_schema.py
tests/test_workflow_version_schema.py
tests/test_workflow_repository.py
tests/test_workflow_activation.py

29 passed

其中 PostgreSQL 集成测试已实际验证:

  • 从空数据库升级到 Alembic head。
  • 对同一数据库重复执行升级。
  • 确认 V50 新表存在。
  • 20260718_60 降级一版并保留既有基础表。

n8n 本地集成已实际验证:

  • 在本地 n8n 创建 DataOps V50 Local Test API Key,有效期至 2026-08-17。
  • Key 写入 Git 忽略的本地 .env,文件权限为 0600,验证输出不包含明文 Key。
  • 使用资产清单 CLI 通过 n8n API 完成采集,结果为 collection_status=complete
  • 当前本地测试实例没有 Workflow,覆盖结果为 0 个 Workflow、0 个活跃流程、 0 个近 90 天执行流程和 0 个阻塞项。
  • DataOps 后端容器已加载该 Key,并通过平台自身 N8nClient 成功读取 Workflow 列表。

附加检查:

  • V50 新增 Python 文件字节码编译通过。
  • git diff --check 通过。
  • 仅启动/复用本地 PostgreSQL 完成迁移测试,没有执行全量测试、前端构建或 完整容器栈验收。

未执行验证及原因

  • 未运行全仓库 Python 测试:V50 计划要求增量验证,本次变更范围可以由上述 L1/L2 集合覆盖。
  • 未运行前端构建:V50 没有前端变更。
  • 未运行 Kestra、Runner 或 MCP 测试:这些能力分别属于 V51–V53。
  • 未通过 /api/datafactory/health 做匿名验证:该接口受 DataOps RBAC 保护, 未登录请求按预期返回 401。已改用后端容器内部的 DataOps N8nClient 验证 Key,不绕过平台认证。

安全与兼容结果

  • 资产清单不保存 Credential ID、密码、API Key、Token、连接串或执行数据。
  • WorkflowSpec 拒绝秘密字段、未知节点、环形 DAG 和缺少幂等声明的写任务。
  • SchedulePlan 拒绝无限重试和无界回填。
  • 现有 n8n 版本继续保留 n8n_workflow_id 和原激活状态机,同时写入通用 engine_type='n8n'engine_definition_id
  • 数据库约束同一 DataFlow/环境最多一个启用的 Primary 和一个启用的 Shadow。
  • API Key 没有写入 Git 跟踪文件、测试报告或终端输出。

已知限制与回滚点

  • V50 尚未接入 Kestra,不支持引擎切换。
  • 当前完成的是本地 Docker n8n 资产基线;接入包含正式流程的受控 n8n 实例时, 必须重新生成对应环境清单,不能沿用本地 0 Workflow 结论。
  • 可通过 Alembic 降级移除 V50 新表和通用字段;存在非 n8n 版本时,迁移会拒绝 破坏性降级。
  • 回滚不会修改或删除现有 n8n Workflow。

结论

V50 代码实现、本地 n8n 资产采集和增量技术验证全部通过,当前 允许进入 V51。本结论只覆盖本地 Docker 测试环境;后续迁移任何包含正式 Workflow 的 n8n 环境时,仍必须先生成该环境的独立清单。