---
url: /zh/workspaces/workspace-vs-build.md
---
## 本质关系

云原生开发本质上是一条**云原生构建**流水线，但声明了 [`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"
feature/**:
  # 分支创建
  branch.create:
    - services:
        # 声明 vscode service，创建云原生开发环境
        - vscode
        # 引用密钥仓库文件导入环境变量 企业微信机器人地址
      imports: https://cnb.cool/<your-repo-slug>/-/blob/main/xxx/envs.yml
      stages:
        - name: notify
          image: tencentcom/wecom-message
          settings:
            robot: $ROBOT
            content: |
              环境创建好啦～

              [$CNB_BRANCH]($CNB_VSCODE_WEB_URL)
```

更多触发方式请参考 [自定义环境创建流程](./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)。
