帮你快速理解、总结文档立即下载

部署

最近更新时间:2026-09-16 10:19:31
我的收藏
本章将介绍 makers.deployments 上的部署、等待、列出、查询和构建日志方法。一次部署表示把一份待部署内容发布到某个项目的生产环境或预览环境。

数据模型

deployments.deploydeployments.waitdeployments.get 返回部署对象,deployments.listdeployments.listAll 返回部署对象的集合。deployments.getLog 只返回构建日志地址。
字段
类型
必有
说明
deploymentId/deployment_id
string/str
部署 ID
projectId/project_id
string/str
项目 ID
env
"Production" | "Preview"
部署环境,分别对应生产环境和预览环境
status
string/str
部署状态。终态取值为 SuccessFailedTimeoutCancelledInvalid。未到达终态时先为 Pending,随后为 Process
previewUrl/preview_url
string/str
预览链接。可在浏览器中打开的地址仅由 deployments.waitSuccess 时返回
code
string/str
部署失败时的错误码
createdOn/created_on
string/str
创建时间,格式为 ISO 8601
modifiedOn/modified_on
string/str
修改时间,格式为 ISO 8601

deployments.deploy

发起一次部署,待部署内容由 artifact 指定。env"Preview" 而项目尚无生产环境部署时,在发请求前抛出 ValidationError
默认不等待部署完成,调用成功后立即返回,返回结果中不含预览链接。需要预览链接时,可以传入 waittrue,也可以在调用返回后单独调用 deployments.wait。等待过程为同步阻塞,方法在部署到达终态或等待超时之前不会返回。
参数
参数
类型
必填
说明
projectId/project_id
string/str
项目 ID
artifact
Artifact/dict
待部署内容
env
"Production" | "Preview"
部署环境。取 "Preview" 时要求项目已有生产环境部署,默认 "Production"
wait
boolean/bool
是否等待部署到达终态,默认 false
timeout
number/float
最长等待时间,单位为秒,默认 900
pollInterval/poll_interval
number/float
轮询间隔,单位为秒,默认 5
onUploadProgress/upload_progress
回调
待部署内容上传完成后触发一次
onStatusChange/status_change
回调
部署状态变更时触发,仅 waittrue 时生效
返回值
Promise<Deployment>/dict —— 未等待时只包含 deploymentIdprojectIdenv 三个字段,其余字段不存在。SDK 不会为补齐这些字段而额外发起查询。
示例
Typescript
Python
const deployment = await makers.deployments.deploy({
projectId: "your-project-id",
artifact: { files: { "index.html": "<h1>Hello</h1>" } },
});

console.log(deployment.deploymentId, deployment.env);
deployment = makers.deployments.deploy(
project_id="your-project-id",
artifact={"files": {"index.html": "<h1>Hello</h1>"}},
)

print(deployment["deployment_id"], deployment["env"])

待部署内容的形式

artifact 的三种形式互斥,每次调用只能传入其中一种。
形式
类型
说明
files
Record<string, string | Uint8Array>/dict[str, str | bytes]
以键值对形式直接给出文件内容,由 SDK 在内存或临时目录中打包为 Zip。键为相对 POSIX 路径,值支持文本与二进制内容
directory
string/str
本地目录路径,由 SDK 打包为 Zip
archive
string/str
本地 Zip 文件路径,通过安全校验后原样上传
directory 的常见取值有三类:
1. 应用源码所在的项目根目录,例如 "."
2. 静态构建产物目录,例如 "./dist"。该目录的根目录需包含 index.html 作为站点入口,否则访问站点首页时返回 404。SDK 不校验这一点,更多信息请参见 直接上传
3. 本地执行 edgeone makers build 后的产物目录 "./.edgeone"
示例
Typescript
Python
// 以下四种写法分别对应一种待部署内容,实际调用时只取其中一种
await makers.deployments.deploy({
projectId: "your-project-id",
artifact: { directory: "." },
});

// artifact: { directory: "./dist", excludePatterns: ["**/*.map"] }
// artifact: { directory: "./.edgeone" }
// artifact: { archive: "./site.zip" }
# 以下四种写法分别对应一种待部署内容,实际调用时只取其中一种
makers.deployments.deploy(
project_id="your-project-id",
artifact={"directory": "."},
)

# artifact={"directory": "./dist", "exclude_patterns": ["**/*.map"]}
# artifact={"directory": "./.edgeone"}
# artifact={"archive": "./site.zip"}

打包规则

传入 directory 时,SDK 按以下规则打包:
默认忽略以点开头的文件与目录,.well-known.edgeone 除外。因此 .git.env.github.vscode 等目录同样不会进入压缩包。
默认还忽略任意层级的 node_modules、打包根目录下的 .edgeone,以及以 .log.tmp.temp.swp.swo 结尾的文件和 .DS_StoreThumbs.dbdesktop.ini
打包 "./.edgeone" 时忽略规则不同:只忽略 .gitnode_modules 与点开头的目录都会保留。此时按 EdgeOne CLI 的产物布局打包,其余目录则把内容置于压缩包根目录。
SDK 不读取 .gitignore,默认忽略项无法关闭,只能通过 excludePatterns/exclude_patterns 追加。该参数使用相对压缩包根目录的 POSIX glob 语义,不支持以 ! 开头的取反规则。
拒绝符号链接。
传入 archive 时,SDK 在上传前校验压缩包内容,并拒绝包含绝对路径、重复路径或符号链接条目的压缩包。校验通过后原样上传,不重新打包。

进度回调

onUploadProgress/upload_progress 在待部署内容上传完成后触发一次。onStatusChange/status_change 在首次查询部署状态时以及之后每次状态变更时触发,首次触发时 previousStatus/previous_status 为空。
状态变更回调依赖等待过程,只有传入 waittrue 时才会触发。waitfalse 时 SDK 不查询部署状态,该回调不会被调用,也不会有任何提示。此时如需接收状态变更事件,请把回调传给 deployments.wait
事件
字段
上传进度事件
uploadedBytes/uploaded_bytestotalBytes/total_bytescompletedFiles/completed_filestotalFiles/total_files
状态变更事件
deployment(当前部署对象)、previousStatus/previous_status(上一个状态,首次触发时为空)
注意:
回调抛出异常时不会中断部署。若初始化 Makers 时传入了 logger,异常由 logger 报告;未传入 logger 时该异常被忽略。
示例
Typescript
Python
const result = await makers.deployments.deploy({
projectId: "your-project-id",
artifact: { files: { "index.html": "<h1>Hello</h1>" } },
wait: true,
onUploadProgress: (event) => {
console.log(event.uploadedBytes, event.totalBytes);
},
onStatusChange: (event) => {
console.log(event.previousStatus, event.deployment.status);
},
});

if (result.status === "Success") {
console.log(result.previewUrl);
}
result = makers.deployments.deploy(
project_id="your-project-id",
artifact={"files": {"index.html": "<h1>Hello</h1>"}},
wait=True,
upload_progress=lambda event: print(
event["uploaded_bytes"], event["total_bytes"]
),
status_change=lambda event: print(
event["previous_status"], event["deployment"]["status"]
),
)

if result.get("status") == "Success":
print(result.get("preview_url"))

deployments.wait

轮询指定部署直至到达终态。终态取值为 SuccessFailedTimeoutCancelledInvalid。默认最长等待 15 分钟,每 5 秒轮询一次。
部署失败通过返回的 status 表示,不抛出异常。只有本地等待超时或请求本身出错时才抛出异常。
参数
参数
类型
必填
说明
projectId/project_id
string/str
项目 ID
deploymentId/deployment_id
string/str
部署 ID
timeout
number/float
最长等待时间,单位为秒,默认 900
pollInterval/poll_interval
number/float
轮询间隔,单位为秒,默认 5
onStatusChange/status_change
回调
部署状态变更时触发
返回值
Promise<Deployment>/dict —— status 为终态取值之一。statusSuccess 时,previewUrl/preview_url 为可访问的站点地址。
注意:
等待超时抛出 DeploymentTimeoutError。该异常只表示本地停止等待,Makers 上的部署仍在继续,SDK 不会取消它。
示例
Typescript
Python
const result = await makers.deployments.wait({
projectId: "your-project-id",
deploymentId: "your-deployment-id",
timeoutMs: 900000,
pollIntervalMs: 5000,
});


if (result.status === "Success") {
console.log(result.previewUrl);
} else {
console.error(result.status, result.code);
}
result = makers.deployments.wait(
project_id="your-project-id",
deployment_id="your-deployment-id",
timeout=900,
poll_interval=5,
)

if result.get("status") == "Success":
print(result.get("preview_url"))
else:
print(result.get("status"), result.get("code"))

deployments.list

分页列出指定项目的部署。
参数
参数
类型
必填
说明
projectId/project_id
string/str
项目 ID
status
string[]/list[str]
按部署状态过滤
timeRange/time_range
{ start, end }/dict
按创建时间过滤,起止时间格式为 ISO 8601
repoBranch/repo_branch
string[]/list[str]
按代码分支过滤
page
number/int
页码,从 0 开始,默认 0
pageSize/page_size
number/int
每页条数,取值范围为 1 至 100,默认 20
order.field
string/str
排序字段。两种语言的取值不同,TypeScript 为 "createdOn""modifiedOn",Python 为 "created_on""modified_on"
order.direction
"asc" | "desc"
排序方向
返回值
Promise<Page<Deployment>>/dict —— 包含 itemspagepageSize/page_sizetotalhasNext/has_next 五个字段。页码从 0 开始。

示例
Typescript
Python
const page = await makers.deployments.list({
projectId: "your-project-id",
page: 0,
pageSize: 20,
order: { field: "createdOn", direction: "desc" },
});

console.log(page.total, page.hasNext);
for (const deployment of page.items) {
console.log(deployment.deploymentId, deployment.status);
}
page = makers.deployments.list(
project_id="your-project-id",
page=0,
page_size=20,
order={"field": "created_on", "direction": "desc"},
)

print(page["total"], page["has_next"])
for deployment in page["items"]:
print(deployment["deployment_id"], deployment["status"])

deployments.listAll / deployments.list_all

列出指定项目的全部部署。过滤与排序参数与 deployments.list 相同,但不接受 page
参数
参数
类型
必填
说明
projectId/project_id
string/str
项目 ID
status
string[]/list[str]
按部署状态过滤
timeRange/time_range
{ start, end }/dict
按创建时间过滤,起止时间格式为 ISO 8601
repoBranch/repo_branch
string[]/list[str]
按代码分支过滤
pageSize/page_size
number/int
每页条数,取值范围为 1 至 100,默认 20
order.field
string/str
排序字段。两种语言的取值不同,TypeScript 为 "createdOn""modifiedOn",Python 为 "created_on""modified_on"
order.direction
"asc" | "desc"
排序方向
返回值
AsyncIterable<Deployment>/Iterator[dict] —— 由 SDK 自动翻页。
示例
Typescript
Python
for await (const deployment of makers.deployments.listAll({
projectId: "your-project-id",
})) {
console.log(deployment.deploymentId, deployment.status);
}
for deployment in makers.deployments.list_all(project_id="your-project-id"):
print(deployment["deployment_id"], deployment["status"])

deployments.get

按项目 ID 和部署 ID 查询单个部署。部署不存在时抛出 NotFoundError
参数
参数
类型
必填
说明
projectId/project_id
string/str
项目 ID
deploymentId/deployment_id
string/str
部署 ID
返回值
Promise<Deployment>/dict —— 其中的 previewUrl/preview_url 未经签名,需要可访问的站点地址时请使用 deployments.wait
示例
Typescript
Python
const deployment = await makers.deployments.get({
projectId: "your-project-id",
deploymentId: "your-deployment-id",
});

console.log(deployment.status, deployment.env);
deployment = makers.deployments.get(
project_id="your-project-id",
deployment_id="your-deployment-id",
)

print(deployment["status"], deployment["env"])

deployments.getLog / deployments.get_log

查询指定部署的构建日志地址。
参数
参数
类型
必填
说明
projectId/project_id
string/str
项目 ID
deploymentId/deployment_id
string/str
部署 ID
返回值
Promise<GetLogResult>/dict —— 只包含 logUrl/log_url
示例
Typescript
Python
const { logUrl } = await makers.deployments.getLog({
projectId: "your-project-id",
deploymentId: "your-deployment-id",
});

console.log(logUrl);
result = makers.deployments.get_log(
project_id="your-project-id",
deployment_id="your-deployment-id",
)

print(result["log_url"])