---
url: /zh/workspaces/workspace-vs-build.md
description: |
  介绍云原生开发与云原生构建的本质关系和核心区别， 说明两者底层运行机制相同但用途、节点分配和计费方式不同。
---
## 本质关系

云原生开发本质上是一条声明了 [`service.vscode`](../build/grammar.md#service.vscode)
的**云原生构建**流水线。

两者底层运行机制相同——均通过 `.cnb.yml` 配置，由云原生构建引擎调度执行，
并支持 `stages`、`docker`、`imports` 等配置项。

## 核心区别

| 区别项   | 云原生构建                             | 云原生开发                              |
| ------- | ------------------------------------ | ------------------------------------- |
| **用途** | 自动化构建、测试、部署                  | 远程开发、代码编写                      |
| **声明方式** | `.cnb.yml` 中定义任意触发事件      | 在流水线中声明 `service.vscode`         |
| **默认镜像** | `cnbcool/default-build-env` | `cnbcool/default-dev-env` |
| **分配节点** | 构建节点                            | 开发节点                               |
| **计费**  | 云原生构建用量                         | 云原生开发用量                          |

详细的环境说明请参考[构建环境](../build/build-env.md)，
节点说明请参考[构建节点](../build/build-node.md)，
计费说明请参考[定价](../pricing.md)。

## 云原生开发按钮

为方便使用，仓库分支页面提供了「云原生开发」按钮。
点击后会触发 **云原生开发事件（`vscode`）**，
系统自动创建一条带有 `service.vscode` 的流水线，并启动云原生开发环境。

## 在非 vscode 事件中启动开发环境

不仅 `vscode` 事件可以创建开发环境，在任何流水线中声明 `service.vscode`，
都可以启动云原生开发环境。

例如，在分支创建时自动创建云原生开发环境并推送通知：

```yaml title=".cnb.yml"
(**):
  branch.create:
    - services:
        - vscode
      stages:
        - name: 环境已创建
          script: echo "$CNB_BRANCH 开发环境已就绪"
```

更多触发方式请参考 [自定义环境创建流程](./custom-dev-pipeline.md#自定义启动事件)。

## 自动回收与超时

云原生构建流水线最长运行 `20h`，超时自动销毁。云原生开发最长保持 `18h`，
此外还有以下回收机制：

* **心跳检测**：环境创建后，若 `10 分钟` 内未进入 VSCode 页面，
  或关闭页面后 `10 分钟` 内无操作，则自动回收。
* **不过夜机制**：使用时间超过 `8 小时`，且处于凌晨 4-6 点期间，则强制回收。

详细说明请参考 [工作区回收机制](./workspace-recycling.md)。

## 代码备份与文件漫游

云原生开发环境采用按需使用、闲置自动销毁策略。为避免代码丢失，提供了以下机制：

* **代码备份**：环境销毁时自动备份未提交代码
  （包括 stash、未 push 的 commit 和工作区修改），
  重建环境时自动恢复。
* **文件漫游**：IDE 配置、`.gitconfig` 等非工作区文件会跨环境漫游，无需重复配置。

详细说明请参考 [代码备份和文件漫游](./file-keeper.md)。

## 业务端口预览

云原生开发环境支持预览运行中的业务端口，
可通过 WebIDE 的 `PORTS` 面板或 VSCode/Cursor 客户端的端口转发功能访问。

详细说明请参考 [业务端口预览](./business-preview.md)。
