版本创建、市场与交付
创建不可变 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>验证至少包括:
- 本次操作的完整目标版本审计准确;不能用安装记录替代 Owner 当前状态。
- 目标资源在 Owner 的精确版本符合目标;目标清单未包含的当前资源按完整计划处理。
- 每个物化资源都有明确成功或失败状态。
- 目标 Owner 中存在所选模块定义;显式绑定生效后,方法可调用。
- 平台应用入口可见;完成资源绑定与平台网页授权后,验证真实调用。
- 如果使用 Bundle 管理器,外部资源已经创建且输出配置正确写入目标资源。
- 升级不会改变安装标识、重复创建外部租户或错误复用其他 Runtime 的外部资源。
- 外部提供方缺失不阻塞定义安装;绑定或启用时目标缺失、合同不符或权限不足会明确失败。
- 直接分发时,Operation 记录了目标工作区管理员对未验证版本的明确确认。
- 源工作区撤销授权后,新安装和升级失败,但已安装版本仍能读取、运行和卸载。
卸载属于破坏性操作。执行前读取 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> --jsonenvironmentKey 是资源来源环境键;不是目标环境或工作区名称。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。升级、卸载、认领和审计命令继续使用其原有
安装管理流程;资源查询不代替这些操作的授权和并发保护。