# 构建
<subtitle>如何构建模板</subtitle>

## 构建并等待完成

`build` 方法构建模板并等待构建完成。它返回包括模板 ID 和构建 ID 的构建信息。

```python
build_info = Template.build(
    template,
    'my-template',
    cpu_count=2,  # CPU 核心数
    memory_mb=2048,  # 内存（MB）
    skip_cache=False,  # 配置缓存跳过（文件除外）
    on_build_logs=default_build_logger(),  # 日志回调接收 LogEntry 对象
    api_key="your-api-key",  # 覆盖 API 密钥
    domain="your-domain",  # 覆盖域名
)

# build_info 包含：BuildInfo(name, template_id, build_id)
```

## 后台构建

`build_in_background` 方法启动构建过程并立即返回，不等待完成。当您想触发构建并稍后检查其状态时，这很有用。

```python
build_info = Template.build_in_background(
    template,
    'my-template',
    cpu_count=2,
    memory_mb=2048,
)

# 立即返回：BuildInfo(name, template_id, build_id)
```

## 检查构建状态

使用 `get_build_status` 检查使用 `build_in_background` 启动的构建的状态。

```python
status = Template.get_build_status(
    build_info,
    logs_offset=0,  # 可选：获取日志的偏移量
)

# status 包含构建状态和日志
```

## 示例：带状态轮询的后台构建

```python
# 在后台启动构建
build_info = Template.build_in_background(
    template,
    'my-template',
    cpu_count=2,
    memory_mb=2048,
)

# 轮询构建状态
import time

logs_offset = 0
status = "building"

while status == "building":
    build_status = Template.get_build_status(
        build_info,
        logs_offset=logs_offset,
    )

    logs_offset += len(build_status.log_entries)
    status = build_status.status.value

    for log_entry in build_status.log_entries:
        print(log_entry)

    # 在再次检查状态之前等待一小段时间
    time.sleep(2)

if status == "ready":
    print("构建成功完成")
else:
    print("构建失败")
```
