跳到主要内容

声明式部署编排

版本提示

声明式部署编排(app.deployOrchestrator)自 v5.1.0 起提供,对应 CLI tcb deploy(≥ v3.8.0)。

DeployOrchestrator 提供一键编排部署能力:读取一份 cloudbaserc.json(v2.1)配置,按依赖顺序(database → functions → app → hosting → gateway)部署全部资源,支持 dry-run 计划预览、函数覆盖确认、本地 state 快照实现真增量跳过。

通过 app.deployOrchestrator 访问(与 CLI tcb deploy 同一套实现,能力下沉)。

无交互设计

manager-node 不内置任何交互 UI。函数覆盖确认完全外部化:传 yes: true 直接放行,或注入 confirmUpdate 回调按返回值决定。


deployPlan

1. 接口描述

接口功能:计算部署计划(dry-run),不执行任何实际部署

接口声明:app.deployOrchestrator.deployPlan(options): Promise<IDeployPlanItem[]>

2. 输入参数

字段必填类型说明
configRecord<string, any>解析后的 cloudbaserc 配置(含 envOverrides 已合并)
envIdString环境 ID
onlyResourceType[]只部署指定类型
skipResourceType[]跳过指定类型
refreshBoolean忽略本地 state skip 判定,强制云端对比(漂移检测)
cwdString项目根目录,默认 process.cwd()

ResourceTypedatabase / functions / app / hosting / gateway

3. 返回结果

IDeployPlanItem[]

字段类型说明
typeResourceType资源类型
nameString资源名称
statusStringcreate(新建)/ update(覆盖更新)/ skip(未变更)/ conflict(database 冲突,中断)/ deploy(直传覆盖)
actionString动作说明(用户可读)
changesArray变更字段明细(from → to)
fileDiffObjecthosting 文件级 diff(added/modified/deleted + totalChanged)

4. 示例代码

import CloudBase from "@cloudbase/manager-node";

const app = CloudBase.init({
secretId: "Your SecretId",
secretKey: "Your SecretKey",
envId: "Your envId",
});

const plan = await app.deployOrchestrator.deployPlan({
config: { envId: "xxx", functions: [{ name: "fn-a" }] },
envId: "xxx",
cwd: process.cwd(),
});

for (const item of plan) {
console.log(`[${item.type}] ${item.name}: ${item.action}`);
}

deploy

1. 接口描述

接口功能:执行部署(含覆盖确认)

接口声明:app.deployOrchestrator.deploy(options): Promise<IDeployResult>

2. 输入参数

字段必填类型说明
configRecord<string, any>解析后的 cloudbaserc 配置
envIdString环境 ID
dryRunBooleantrue 时只出计划不部署
yesBoolean已存在函数(update)直接放行(AI Agent / CI)
confirmUpdate(item) => Promise<boolean>每个 update 项回调,返回 true 执行 / false 跳过
only / skipResourceType[]类型过滤
refreshBoolean强制云端对比(漂移检测)
cwdString项目根目录
logObject日志回调(info/success/warn/error)

3. 返回结果

IDeployResult

字段类型说明
planIDeployPlanItem[]完整部署计划
resultsArray每项:{ type, name, ok, url?, error?, reason? }

results 判定:

  • ok: true → 成功,url 为访问地址(如有)
  • ok: false + error → 部署失败原因
  • ok: false + reason: 'no-confirm' → 无确认机制,保守跳过(不擅自覆盖线上)
  • ok: false + reason: 'skipped-by-user' → 用户取消覆盖

4. 示例代码

import CloudBase from "@cloudbase/manager-node";

const app = CloudBase.init({
secretId: "Your SecretId",
secretKey: "Your SecretKey",
envId: "Your envId",
});

// AI Agent / CI:直接放行所有覆盖
const result = await app.deployOrchestrator.deploy({
config: { envId: "xxx", functions: [{ name: "fn-a" }] },
envId: "xxx",
yes: true,
cwd: process.cwd(),
});

if (result.results.every((r) => r.ok)) {
console.log("部署完成");
} else {
for (const r of result.results.filter((r) => !r.ok)) {
console.error(`[${r.type}] ${r.name} 失败: ${r.error || r.reason}`);
}
}

说明

幂等与真增量

  • 函数:云端存在性判断(ListFunctions)→ create / update;不做本地 hash
  • hosting:本地 .cloudbase/state.json 指纹快照,一致则 skip
  • app:本地 state 配置快照,一致则 skip
  • refresh: true 强制忽略本地快照重新对比云端

database 冲突中断

database 迁移存在 conflict 时,部署中断(后续资源可能依赖新 Schema)。计划中表现为 status: 'conflict'

版本对应

manager-nodeCLI说明
≥ v5.1.0≥ v3.8.0声明式部署编排可用

参考