开发指南生命周期插件开发
验证与发布生命周期插件
验证插件契约、Hook 重试、Runtime 隔离、属性输出和注册记录,再完成发布联调。
插件发布分为两个独立结果:插件后端已按它自己的服务所有权发布,以及平台插件注册记录已指向 该版本的稳定 Endpoint。只完成其中一项不代表插件可用。
发布前契约验证
- 用每个
supportedHooks的完整 v1 请求调用 Endpoint。 - 验证响应同时包含
errorCode、value、systemCurrentTime和成功时的data。 - 验证
data.status为字符串,data.properties为对象。 - 验证空输出返回空
properties,而不是null。 - 验证未支持 Hook、非对象
pluginConfig和缺少必需身份时明确失败。 - 验证错误信息不包含凭据、上游响应原文或完整敏感配置。
可重试与资源隔离
| 场景 | 必须证明的结果 |
|---|---|
相同 BEFORE_DEPLOY 连续调用 | 只存在一个外部实例,后续调用返回同一引用 |
| 第一次调用超时后重试 | 插件先查询已发生的外部效果,不重复创建 |
| 两个 Runtime 安装同一服务 | 实例引用、凭据和可变状态相互隔离 |
BEFORE_DETACH 后再绑定 | 只解除指定 Runtime 绑定,共享外部实例未被误删 |
BEFORE_DELETE 重试 | 已删除状态被视为已收敛,不因资源不存在创建新资源 |
ON_CONFIG_UPDATE 重试 | 外部配置与当前输入一致,无重复副作用 |
属性输出
- 每个返回属性都存在于当前
propertyDefinitions。 - 输出值符合模块属性的类型表示。
- 插件只写回明确由它管理的属性。
- 重试返回相同的外部引用,不用随机值或时间戳改变资源身份。
- 错误响应不携带部分成功属性,避免调用方无法判断是否应用。
注册记录验证
pluginId稳定且不包含环境或工作区事实。executeUrl指向已发布的完整 Endpoint,不携带凭据。protocolVersion为v1,supportedHooks只包含已实现并完成回归的 Hook。defaultConfig是非敏感 JSON 对象,不包含 token、密码、API Key 或数据库凭据。- 单条查询和列表查询中的定义与预期一致。
- 使用实际模块兼容绑定触发至少一次完整 Hook,并同时验证平台属性和外部状态。
发布边界
插件后端按其真实所有权发布,不因为被生命周期管理服务调用就改变发布模式。插件注册只更新服务目录, 不代替后端的构建、部署、健康验证和回滚。不得在模块定义或 Bundle 版本中写入真实 Endpoint、访问 token 或数据库凭据。
发布完成后保留:
- 插件后端的精确版本和健康验证结果。
- 平台注册记录的查询结果。
- 各 Hook 契约测试、重试测试和 Runtime 隔离测试结果。
- 实际 Runtime 触发的属性写回和外部状态证据。
- 失败时该后端自有发布链的回滚或恢复结果。