CNB (Cloud Native Build) 是一个由腾讯公司推出的云原生开发者平台,它围绕“一切皆代码”的核心理念,旨在帮助开发者以一种更简洁、更强大的方式构建软件。平台通过一个声明式的YAML配置文件来定义和管理从开发、构建到测试的全过程。这种方式将复杂的构建流程代码化,使其可以和项目源代码一同被版本控制系统管理。CNB深度整合了Docker生态,利用容器技术确保开发、测试和生产环境的一致性,从根本上解决了环境差异带来的问题。此外,平台还提供了基于“读秒克隆”技术的远程开发解决方案,可以在数秒内启动一个配置完善的云端开发环境,极大地提升了开发效率。
功能列表
- 流水线即代码: 使用简单、易于理解的YAML配置文件来定义整个构建流水线,并将其纳入Git进行版本管理。
- 声明式构建环境: 在配置文件中明确声明构建所需的Docker镜像,确保每次构建都在一个纯净、一致的环境中执行。
- 声明式构建缓存: 支持写时复制(copy-on-write)模式的缓存声明,在并发构建场景下,有效避免缓存的读写冲突,提升构建效率。
- Docker作为执行环境: 所有构建任务都在指定的Docker容器中运行,利用Docker的沙箱机制保证了任务执行的隔离性与可靠性。
- 基于Docker的插件生态: 将通用能力抽象为Docker插件,通过Docker镜像仓库进行分发,开发者可以方便地共享和复用各种构建能力。
- 按需获取计算资源: 允许开发者在配置文件中声明所需的CPU资源,平台会根据声明动态分配,最高可达64核。
- 远程工作空间: 提供基于云端的开发环境解决方案,点击按钮即可在数秒内准备好一个远程工作空间,支持远程接入进行编码。
- 读秒克隆技术: 基于OverlayFS实现,即使是超过100GB的大型代码仓库,也能在几秒内完成克隆,让开发者快速进入编码状态。
使用帮助
CNB平台的核心是其“一切皆代码”的设计哲学。用户几乎所有的操作都是通过编辑一个YAML格式的配置文件来完成的。这个文件通常放在代码仓库的根目录,用来描述“做什么”以及“在什么环境下做”。
核心理念:配置文件
一个最基础的配置文件结构如下,它定义了一个在Node.js 20
环境下运行的简单流水线,包含了打印版本、安装依赖和运行测试三个步骤。
main:
push:
- docker:
image: node:20
stages:
- node -v
- npm install
- npm test
将此文件提交到你的Git仓库后,CNB就会自动执行这个流水线。
主要功能配置详解
1. 声明式构建环境
你可以为不同的任务指定不同的Docker环境。CNB会在执行到该步骤时,自动拉取对应的Docker镜像并创建一个容器来运行你的命令。这保证了每次构建的环境都是纯净且一致的。
例如,你可以在同一个流水线中测试项目在不同Node.js版本下的兼容性:
main:
push:
- stages:
- name: "在Node 20环境下运行"
image: node:20
script:
- node -v
- name: "在Node 21环境下运行"
image: node:21
script:
- node -v
name
: 为步骤设定一个可读的名称。image
: 指定运行此步骤所需的Docker镜像。script
: 包含要执行的命令列表。
2. 声明式构建缓存
为了加速构建过程,特别是像npm install
这样耗时的依赖安装步骤,配置缓存至关重要。CNB的缓存是声明式的,并且支持copy-on-write
模式,非常适合并发场景,可以有效避免缓存读写冲突。
main:
push:
- docker:
image: node:20
volumes:
- node_modules:copy-on-write
stages:
- node -v
- npm install
- npm test
volumes
: 在这里声明需要缓存的目录或文件。node_modules:copy-on-write
: 表示对node_modules
目录启用写时复制缓存。当缓存不存在时,它会正常写入;当缓存已存在时,它会创建一个指向缓存的链接,只有当文件被修改时才会发生实际的复制操作。
3. 按需分配高性能资源
如果你的构建或测试任务需要很高的计算性能(例如编译、代码分析等),你可以按需申请更多的CPU资源。
main:
push:
- runner:
cpus: 64
docker:
image: node:20
stages:
- node -v
- npm install
- npm test
runner.cpus
: 在这里声明你希望分配的CPU核心数,最高可达64核。平台会根据资源情况动态满足你的请求。
4. 配置远程开发工作空间
这是CNB的特色功能。你可以在配置文件中定义一个远程开发环境。当你需要时,CNB会利用“读秒克隆”技术在几秒钟内为你启动一个包含完整代码和依赖的云端开发环境。
$:
vscode:
- runner:
cpus: 64
services:
- vscode
docker:
image: node:20
volumes:
- node_modules:copy-on-write
stages:
- npm install
$
符号是远程工作空间的特定标识。- 配置完成后,在CNB平台上点击对应仓库的云原生开发按钮即可启动。平台会预先执行
stages
中的命令(如npm install
),当你远程接入时,所有依赖都已准备就绪,可以直接开始编码。
应用场景
- 自动化CI/CD流水线
为项目配置自动化构建、测试和部署流程。开发者只需将代码推送到Git仓库,CNB就会自动完成后续所有流程,确保代码质量并实现快速交付。 - 统一团队开发环境
通过远程工作空间功能,确保团队所有成员使用完全一致的开发环境,避免“在我的电脑上可以运行”的典型问题,降低新成员加入项目的环境配置成本。 - 大型代码仓库的快速开发与审查
对于拥有庞大代码库的项目,传统的git clone
可能需要数十分钟甚至更久。利用CNB的读秒克隆技术,开发者和审查者可以在几秒内获取代码并启动一个完整的环境,极大地提升了代码审查和分支开发的效率。 - 需要高性能计算的构建任务
对于需要大量计算资源的项目,如C++编译、大规模数据处理或复杂的端到端测试,可以通过CNB按需申请高性能计算节点,按需使用,节约成本。
QA
- CNB是一个什么样的平台?
CNB (Cloud Native Build) 是腾讯云推出的一个面向开发者的云原生构建平台。它通过“一切皆代码”的方式,帮助开发者自动化软件开发的全过程,并提供高效的远程开发环境。 - “一切皆代码”有什么好处?
它让构建和部署的流程变得透明、可追溯且易于管理。整个流程像代码一样被版本控制系统(如Git)管理,任何修改都有记录,团队成员可以协作审查和修改,并且可以轻松地复用和迁移。 - CNB的远程工作空间是如何做到秒级启动的?
它依赖于一项名为git-clone-yyds
的读秒克隆技术,该技术基于OverlayFS文件系统。它无需完整地下载整个代码仓库,而是创建了一个指向远程仓库的视图,实现了按需读取,因此即使是百GB级别的仓库也能在数秒内“克隆”完毕并准备好工作区。 - CNB和传统的CI/CD工具有什么不同?
CNB除了提供CI/CD能力外,更强调环境的声明式管理和一致性,并深度整合了云原生开发环境。它将开发环境和构建流水线统一用一套声明式语法进行定义,打通了从开发到构建的完整链路。