百积木文档
开发指南平台应用、模块与 Bundle 开发

版本创建、市场与交付

创建不可变 Bundle 版本内容,完成审核、市场发布、安装、升级,以及安装清单和运行态资源验证。

创建与编辑数据库定义

本页数据库流程使用 CLI 0.166.0 及以上。先读取本机版本与目标命令的分级帮助,验证当前用户的认证和工作区权限。

baijimu --version
baijimu bundle create --help
baijimu bundle definition --help
baijimu bundle version create --help
baijimu auth status --verify

baijimu bundle create --workspace-id <workspace> --name <name>
baijimu bundle definition read <bundle> --workspace-id <workspace> --json

新建返回服务分配的 Bundle 身份和数据库定义,不创建 Bundle 项目。bundle update 仅修改名称、图标、描述及状态。 完整内容通过 bundle definition update 更新;先将同一次读取的 data.definition 保存为本地 definition.json,并保留 data.revision。 资源实现仍按各自 Owner 的源码、构建和版本流程维护。

创建 Bundle 版本

先在资源 Owner 创建所有精确版本,再按Bundle 定义与资源选择更新根级 resources。 每项都使用 Owner 返回的 resourceType、resourceKey 和精确 semanticVersion;不自动发现资源,不使用分类数组或 definition 外壳。

baijimu bundle definition update <bundle> --workspace-id <workspace> \
  --expected-revision <readRevision> --definition @definition.json

baijimu bundle version create <bundle> --workspace-id <workspace> \
  --version <semanticVersion> --definition-revision <returnedRevision>

更新提交完整定义,成功后返回新的修订号。修订冲突时重新读取、审查并合并自己的修改,再以新修订提交。 不要将旧修订替换成新数字而继续提交旧内容。

发布从数据库的准确修订读取同一份 BundleDefinition 23.0.0,校验资源归属、精确版本、属性与配置引用, 并在落库前再次核对修订。记录本次定义、修订、发布请求与返回的不可变版本 ID。创建成功后内容不可变, 后续编辑当前定义不会改变历史版本,也不会自动安装、升级或提交市场。 空 resources 合法;发布前需人工核对交付范围,不能把结构正确当作交付完整。

Bundle Service 243.0.1 起,Git Bundle 作者入口已退役;Bundle 发布只使用数据库定义修订,数据库错误不会回退 Git。历史内容识别见历史格式。

版本内容不携带 environmentKey、管理器或插件数组。来源环境由分发目录保存;管理器是来源 Bundle 的独立跨版本关系。 Runtime Plan 只为所选 Bundle 生成完整资源变更,不查询外部 Bundle 的安装状态或版本范围。 资源间调用在显式绑定时按目标 Owner 的当前事实校验身份、接口与授权。

Module、Platform Application、Workflow、Timer、Agent、Skill、Event Trigger、Permission 和 Role 等资源只创建各自版本; 只有 Bundle 通过 bundle market publish 进入市场审核。版本状态 PUBLISHED 表示版本可用,不表示已上架或已安装。

管理员维护数据库版本

平台管理员使用 baijimu-back 0.44.0 或更新版本,从准确数据库修订创建私有维护版本:

baijimu-back bundle maintenance database publish \
  --workspace-id <workspaceId> --bundle-id <bundleId> \
  --definition-revision <revision> --semantic-version <semanticVersion> \
  --reason <maintenanceReason>

Bundle Service 243.0.1 保留禁用状态的管理员维护语义:Bundle 须处于 PUBLISHED 或 DISABLED,并已有属于本包且仍为 PUBLISHED 的合法默认版本。新维护版本保持私有,不改变默认版本、不重新启用 Bundle,也不继承市场或分发授权。来源工作区、Owner、资源精确版本、修订与并发校验仍然执行。 普通作者不能借维护发布绕过禁用状态。旧 Git 管理发布入口已退役,不能用它替代数据库维护命令。

交付完整性

创建版本成功只证明本次 Bundle 的不可变定义可用。发布前还应按交付完整性与验收证据 关联独立后端的精确项目版本、制品、部署、管理器协议和外部配置要求;在独立安装场景中验证核心业务。 该报告是本次发布的验收证据,不增加 Bundle 安装依赖或安装器的外部可用性探测。

审核和市场

创建版本和安装不会自动提交审核,也没有独立的工作区审核前置步骤。需要公开分发时, 把状态为 PUBLISHED 的精确 Bundle 版本直接提交公共市场审核:

baijimu bundle market publish <bundle> --workspace-id <workspace> \
  --version-id <bundleVersionId> --request-id <uuid>

requestId 必须是非空 UUID。同一次提交重试复用原 UUID;新的审核申请使用新 UUID。 市场接纳申请后先记录 PREPARE;完成资源快照和定价准备后,再记录 SUBMIT 并进入 PENDING_REVIEW。 随后查询该工作区的公共市场待审记录和指定版本的审核历史:

baijimu bundle review list --workspace-id <workspace>
baijimu bundle review history <bundleVersionId> --workspace-id <workspace>

这两个命令查询市场审核记录,不代表另有一层工作区审批。尚未提交或请求在创建申请前失败时, 审核历史为空;只有 PREPARE 表示提交准备尚未完成。空记录不表示安装失败,也不表示已经审核通过。 “Bundle 版本已创建”“已提交市场审核”和“公共市场已发布”是不同状态。 市场审核由独立审核者完成,发布者不能自行批准或绕过审核。

参数缺失、字段类型错误、非法 UUID、JSON 格式错误等请求错误必须返回 CModel 失败响应, 包含非零 errorCode 和说明错误字段或原因的 data.message,不能返回裸 HTTP 422。 失败时保留 CLI 版本、脱敏后的命令、原 requestId 和错误信息,再核对参数或反馈平台。

直接分发与公共市场是两条独立路径,状态都属于精确 Bundle Version,而不是 Bundle 聚合:

  • OWNER_ONLY:默认值,仅所属工作区可直接安装。
  • TARGETED:只有源工作区明确授权的目标工作区可直接安装。
  • PUBLIC_DIRECT:任意工作区可直接安装,但不会自动上市场,也不代表经过市场审核。

管理精确版本的分发策略:

baijimu bundle distribution get <sourceWorkspace> <bundle> \
  --version-id <bundleVersionId>

baijimu bundle distribution set <sourceWorkspace> <bundle> \
  --version-id <bundleVersionId> --mode targeted

baijimu bundle distribution grant <sourceWorkspace> <bundle> \
  --version-id <bundleVersionId> --target-workspace-id <targetWorkspaceId>

baijimu bundle distribution revoke <sourceWorkspace> <bundle> \
  --version-id <bundleVersionId> --target-workspace-id <targetWorkspaceId>

市场上架不要求版本先设为 PUBLIC_DIRECT;任何符合市场条件的 PUBLISHED 版本都可以单独提交审核。 新版本不会继承旧版本的公开模式或定向授权,必须逐版本明确配置。

安装和升级

市场安装仍由 CLI 解析已审核的公共版本:

baijimu runtime bundle install <bundle> --workspace-id <targetWorkspace>

安装发布方授权的精确版本时,传入发布方提供的稳定 bundleId 和版本记录 ID:

baijimu runtime bundle install <bundleId> --workspace-id <targetWorkspace> \
  --version-id <bundleVersionId>

CLI 会先解析所选 Bundle 的资源计划,显示精确版本的发布工作区、分发路径、市场验证状态和本包资源。 若所选版本通过 TARGETED 或 PUBLIC_DIRECT 直接分发且未经过 市场验证,核对完整预览后必须明确确认:

baijimu runtime bundle install <bundleId> --workspace-id <targetWorkspace> \
  --version-id <bundleVersionId> --confirm-unverified

baijimu runtime bundle upgrade <bundle> --workspace-id <workspace> \
  --version-id <bundleVersionId> --confirm-unverified

按完整 Bundle 目标升级

Bundle 是最小安装、升级和卸载单元。每次升级选择一个精确 Bundle 版本,平台读取资源 Owner 的当前库存, 与目标版本的完整资源清单比较后生成新计划;不提供资源子集升级,普通和内部入口都拒绝资源选择参数。 需要调整一个资源时,先创建该资源的后继版本,再把它纳入新的完整 Bundle 版本;其余资源仍引用明确的精确版本。

安装或升级失败后,通过普通安装或升级重新提交准确目标,按 Owner 当前状态生成新计划和新 Operation。 旧操作保留审计;不能冻结旧计划继续执行,也不能以成功安装记录代替当前资源事实。

目标工作区确认不能代替源工作区授权。撤销授权后禁止新的安装和升级;已安装版本继续运行,且卸载、 恢复和资源 Owner 当前状态读取不依赖原分发授权仍然有效。

安装或升级后读取 Bundle 安装清单;验证实际生效资源时,另外按资源类型查询 Runtime Owner:

baijimu runtime bundle installation resources <bundleId> --environment-key <sourceEnvironmentKey> --workspace-id <workspace>

验证至少包括:

  1. 本次操作的完整目标版本审计准确;不能用安装记录替代 Owner 当前状态。
  2. 目标资源在 Owner 的精确版本符合目标;目标清单未包含的当前资源按完整计划处理。
  3. 每个物化资源都有明确成功或失败状态。
  4. 目标 Owner 中存在所选模块定义;显式绑定生效后,方法可调用。
  5. 平台应用入口可见;完成资源绑定与平台网页授权后,验证真实调用。
  6. 如果使用 Bundle 管理器,外部资源已经创建且输出配置正确写入目标资源。
  7. 升级不会改变安装标识、重复创建外部租户或错误复用其他 Runtime 的外部资源。
  8. 外部提供方缺失不阻塞定义安装;绑定或启用时目标缺失、合同不符或权限不足会明确失败。
  9. 直接分发时,Operation 记录了目标工作区管理员对未验证版本的明确确认。
  10. 源工作区撤销授权后,新安装和升级失败,但已安装版本仍能读取、运行和卸载。

卸载属于破坏性操作。执行前读取 Owner 当前资源,核对受影响的运行时引用与凭据撤销,以及 Bundle 管理器声明的 外部资源停用、保留和补偿语义。

查询 Runtime 的实际资源

以下查询语义适用于 CLI 0.152.0 及以上:安装清单与运行态资源分别查询。使用旧版 CLI 的脚本,应先按对应版本的 --help 核对参数和输出结构。

bundle resources 查询单 Bundle 安装记录关联的精确版本清单,由平台安装管理接口提供,不访问资源运行时。 返回安装状态、已安装语义版本和 resources;尚无已提交的安装版本时,版本与 resources 均为 null,不会拿本次操作目标版本代替安装版本。 安装清单不证明资源当前存在、启用或可执行。

runtime resources list 查询资源 Owner 的实际库存,必须提供 --resource-type,只访问该类型的 Owner。 安装记录缺失、失败或版本为空不代表实际资源不存在。实际资源的当前精确版本由 Runtime Owner 返回。

baijimu runtime bundle installation resources <bundleId> --environment-key <sourceEnvironmentKey> --workspace-id <workspaceId> --application-runtime-id <runtimeId> --json
baijimu runtime bundle resource list --workspace-id <workspaceId> --application-runtime-id <runtimeId> --resource-type DEVICE_EVENT_TRIGGER --page-size 50 --json
baijimu runtime bundle resource get '<environmentKey>/<bundleId>/<resourceType>/<resourceKey>' --workspace-id <workspaceId> --application-runtime-id <runtimeId> --json

environmentKey 是资源来源环境键;不是目标环境或工作区名称。bundleId 必须是准确、 大小写敏感的稳定 ID,不接受安装 ID 或安装显示名。省略 applicationRuntimeId 时, 使用工作区登记的默认 Runtime。runtime resources list 可省略 Bundle 范围;限定时 --environment-key 与 --bundle-id 必须同时提供。

runtime resources list 的 JSON data 是分页对象,包含 contractVersion、workspaceId、 applicationRuntimeId、items、resourceMetadata、nextCursor 和 hasMore。 每个 items 项为准确的 resourceLocator 和 semanticVersion。 它不包含安装 ID、Bundle 安装版本或由操作账推测的资源状态。资源存在也不代表已启用; 启用配置和运行授权仍通过对应能力查询。

运行态查询默认只读取指定类型的一页。后续请求保持相同范围并传入 --cursor <nextCursor>; items 为空但 hasMore 为真时仍需继续。使用 --all 可读取所有页,不能同时指定 --cursor。任一 Owner 失败、响应身份错误或游标循环都会明确失败,不返回伪完整列表。 游标失效时从第一页重新查询,不用旧安装记录补齐。

旧脚本需要把名称或 installId 改成来源键与 bundleId,将 data 数组读取改成 data.items,并明确选择分页或 --all。升级、卸载、认领和审计命令继续使用其原有 安装管理流程;资源查询不代替这些操作的授权和并发保护。

本页内容