百积木文档
开发指南Bundle 生命周期插件开发

插件注册与管理

注册稳定插件身份和 Bundle 执行声明,再发布显式授权的 Bundle 绑定。

插件注册记录是服务目录。pluginId 全局唯一且不可变,Bundle 绑定只引用该身份、协议、配置及资源授权。 执行地址不进入 Bundle,平台安装用户不需要重复注册插件。

本页受管接入命令只依赖插件管理服务,适用于 Hosted Service、自建服务及其他部署载体。 采用独立 Adapter Hosted Service时, 由部署工具向 Adapter 交付引导授权;环境编号只属于部署操作,不进入插件注册或握手请求。 平台回调可以是插件提供方的 HTTPS 服务或实现完整插件协议及认证的 Runtime 网关入口。普通业务接口和普通方法调用地址不能直接代用。

按首次接入流程与验收执行: 申请一次性授权、交付配置、部署启动、握手确认、清理引导配置及验证运行。 平台支持受管凭据接入:插件在握手中登记执行地址并建立双向凭据,日常自动轮换。 所有命令先查看当前子命令的 --help。

一次性接入与自动轮换

管理员申请一次性引导授权,再通过所选部署工具交付给插件。双向长期凭据由插件与平台握手建立, 分别存入各自数据库,CLI 不参与日常轮换。以下命令使用 CLI 0.98.0 或后继兼容版本。

baijimu lifecycle-plugin register \
  --workspace-id "$WORKSPACE_ID" \
  --plugin-id "$PLUGIN_ID" \
  --name "$PLUGIN_NAME" \
  --token-output "$BOOTSTRAP_TOKEN_FILE"

输出文件必须不存在;Unix 下创建权限为 0600。CLI 只将首次握手 Token 写入该文件, 终端返回 pluginId、enrollmentId、generation、expiresAt 和接入状态。 插件管理校验工作区管理权限;注册不接受环境编号或端点名,也不读取、创建或清理 Hosted Service Secret。 CLI 不生成 Adapter 数据库加密密钥。签发结果或文件写入失败时,CLI 尝试撤销本次授权; 若撤销无法确认,按错误中的授权 ID 回查,不要反复申请。

部署所有者通过自己的 Secret 管理工具读取 Token 文件并交付给插件,避免在终端、日志、命令参数或源码中展示明文。 自建插件按自身配置约定读取凭证;采用本平台 Adapter 时,由部署流程配置以下变量:

环境变量来源与用途
BUNDLE_PLUGIN_ID不可变插件身份
BUNDLE_PLUGIN_BOOTSTRAP_TOKEN指定输出文件中的 Token,仅用于首次接入或管理员重新授权
BUNDLE_PLUGIN_ENROLLMENT_ID注册返回的 enrollmentId,区分本次授权与残留配置
BUNDLE_PLUGIN_ENROLLMENT_BASE_GENERATION注册返回的 generation,本次授权的凭据基准代次
PLUGIN_CREDENTIAL_KEY部署所有者准备并备份的数据库加密密钥,独立于调用 Token;已有数据库必须恢复原密钥

Hosted Service 的 Secret 值与进程变量绑定由其独立的配置管理命令维护,保存 Secret 不等于自动注入进程。 外部服务使用自身部署工具完成同样的交付,插件管理服务不感知这些操作。

部署或重启插件后,它通过首次握手与轮换协议 登记自己的 HTTPS 协议入口并建立长期凭据。Hosted Service Adapter 可从 RUNTIME_ENDPOINTS_JSON 读取正式端点; 其他插件使用自身受控配置。平台校验地址格式及插件凭证,不向部署系统核验地址归属。

baijimu lifecycle-plugin complete-enrollment \
  --workspace-id "$WORKSPACE_ID" \
  --plugin-id "$PLUGIN_ID" \
  --enrollment-id "$ENROLLMENT_ID"

complete-enrollment 只查询并确认授权已消费且未撤销;它不代替插件的握手确认,也不修改部署配置。 确认完成后,由部署所有者清理本地 Token 文件,以及当前插件的三个一次性引导变量和对应绑定; 保留 BUNDLE_PLUGIN_ID、数据库加密密钥及其备份。清理前核对插件身份、授权 ID 和配置版本,避免删除其他接入的配置。

正常重启从数据库加载当前凭据,插件按平台返回的期限在线轮换。 需要重新授权时,管理员申请新的 enrollmentId,部署所有者交付本次引导配置并保留原数据库加密密钥。

Bundle 执行声明

插件通过握手登记 bundleExecution,回读结果包含执行协议、正式 HTTPS 地址和资源阶段:

{
  "protocols": {
    "lifecycle": "6.0.0", "reference": "6.0.0", "credentials": "1.0.0",
    "bindingRead": "1.0.0", "inventory": "1.0.0", "propertyWrite": "1.0.0"
  },
  "executeUrl": "https://plugin.example/plugin/bundle/lifecycle",
  "supportedStages": ["BEFORE_RESOURCES", "AFTER_RESOURCES"]
}

bundleExecution.protocols 分别声明平台与插件的各项协议;准确版本与选择规则只由权威规范维护。插件实现两个资源阶段。 示例地址仅展示结构,实际地址来自插件提供方的正式服务登记。

baijimu lifecycle-plugin get "$PLUGIN_ID" --workspace-id "$WORKSPACE_ID"

需要维护回调地址时,由授权管理者把完整声明保存到 bundle-execution.json,更新后回读:

baijimu lifecycle-plugin update "$PLUGIN_ID" --workspace-id "$WORKSPACE_ID" \
  --bundle-execution @bundle-execution.json
baijimu lifecycle-plugin get "$PLUGIN_ID" --workspace-id "$WORKSPACE_ID"

核对 pluginId、bundleExecution 中的 executeUrl、protocols 与支持阶段。 更新地址前先完成或终止未完成的凭据交换;凭据轮换使用已登记的执行地址。 完成接入验收后,按Bundle 注册与绑定 声明资源授权并发布安装。

状态回查与取消

register 的终端输出只包含授权元数据;保留 pluginId、enrollmentId 和 generation 用于回查。 不要在结果不明时反复申请新授权。

baijimu lifecycle-plugin enrollment-status --workspace-id <workspaceId> \
  --plugin-id <pluginId> --enrollment-id <enrollmentId>

baijimu lifecycle-plugin cancel-enrollment --workspace-id <workspaceId> \
  --plugin-id <pluginId> --enrollment-id <enrollmentId>

取消会撤销该授权;若已完成握手,也会撤销对应的受管凭据。此命令只访问插件管理服务, 不读取或清理本地 Token 文件、部署 Secret、变量绑定或数据库密钥。 部署所有者在确认撤销后清理本次失效引导配置;重新授权时继续保留原数据库加密密钥。

管理与敏感信息

目录查询和列表提供有效注册记录;创建、更新、停用经过平台身份及所有者权限验证。 停用后的标识不能由另一个插件复用。defaultConfig 只保存非敏感业务默认配置,不能保存 Token、密码或访问密钥。 查询不进行字段脱敏;executeUrl 不得带 userinfo、query token 或临时签名。 执行凭据保留在插件服务的受控配置边界内。

管理响应使用完整 CModel envelope:

{
  "contractVersion": "1.0.0",
  "errorCode": "0",
  "data": {}
}

业务失败使用 HTTP 200 与稳定非零 errorCode,data 为 null 或标准公开错误详情。 更新插件目录不改变已发布 Bundle 的不可变绑定;变更资源授权或配置后应创建后继 Bundle 版本再升级安装。

本页内容