腾讯云推出云原生构建(CNB),面向未来,仓库云原生构建更简单

本文最后更新于 2025年3月25日 晚上

近日,腾讯云推出云原生构建(Cloud Native Build,以下简称CNB)并上线腾讯云官网,为国内开源项目提供全新的远程协作方式和算力支持。作为基于 Docker 生态的生产力工具,CNB (cnb.cool)致力通过技术创新与高效资源利用,为开源社区注入新活力。让我们来看看 CNB 有哪些的实用功能。

云原生构建

什么是云原生?一种以容器化为核心,结合微服务架构、持续集成与持续部署(CI/CD)、动态编排、服务网格、声明式API和不可变基础设施等现代软件开发和运维实践的应用程序设计、构建、部署和管理的方法方式。

秒级启动

其实,CNB 的基础功能,基本和 GitHub 类似,比如: 代码托管(Git仓库管理、Fork、Star 功能)、流水线构建等。相比 GitHub,CNB 支持云原生构建,即:仓库的开发环境基于统一镜像构建,开发者只需一键启动「云原生开发」,即可快速进入高效开发状态,无需再进行繁琐的环境安装与调试

启动云原生开发

启动非常快,一般 10 秒内即可完成,打开后是一个类似 VSCODE 的界面,这个界面的基础环境,是读取你项目的.ide/Dockerfile进行构建,可以理解为云环境:

云原生开发

如果你习惯使用 JetBrains,比如: WebStorm、IntelliJ IDEA,那么你也可以在构建内支援 JetBrains IDE:

JetBrains IDE

相信很多小伙伴都没用过 JetBrains 的 Gateway 连接远程 IDE:

JetBrains Gateway

一次启动,最长可以启动 16 小时(一天 24 小时,留足 8 小时睡眠 😄);16 小时过后,也不用担心,你工作空间内的代码是有持久化的(.gitignore 标记的内容除外)。

可连续16小时持续云原生

只要你想,你可以把本地的环境全部迁移到 CNB 上,实现真正的云原生开发。

graph TD
    %% 主节点样式
    classDef main fill:#2563eb,stroke:#1d4ed8,stroke-width:2px,color:white
    %% 功能节点样式
    classDef feature fill:#4ade80,stroke:#16a34a,stroke-width:2px,color:white
    %% 子功能节点样式
    classDef subfeature fill:#f97316,stroke:#ea580c,stroke-width:2px,color:white
    %% 补充信息节点样式
    classDef info fill:#a855f7,stroke:#9333ea,stroke-width:2px,color:white,font-style:italic

    A[CNB: Cloud Native Builder] -->|基础功能| B[代码托管]
    A -->|特色功能| D[云原生环境]
    A -->|特色功能| C[制品库]

    B --> B1[Git仓库管理]
    B --> B2[Fork功能]
    B --> B3[Star功能]

    C --> C1[Docker 镜像制品库]
    C --> C2[Helm 镜像制品库]

    D --> D1[云原生构建] 
    D --> |秒级|D3[云原生开发]
    
    D3 -..->|构建| E[云端 IDE]
    D3 -..->|单次| F[最长16小时]

    %% 应用样式
    class A main
    class B,C,D feature
    class B1,B2,B3,C1,C2,D1,D3 subfeature
    class E,F,G info

    %% 链接样式
    linkStyle default stroke:#64748b,stroke-width:2px
    linkStyle 8,9,10 stroke:#a855f7,stroke-width:2px,stroke-dasharray:5

云原生构建

为什么开发者喜欢用 GitHub 呢?一方面,GitHub 是最早一批的代码托管平台,开发者已经习惯了使用 GitHub,用户基数极大,交流氛围充足;另一方面,GitHub 提供了丰富的功能,比如:代码托管、代码审查、CI/CD 等,开发者可以很方便地使用 GitHub 进行协作开发,使用 GitHub Action 进行持久化部署。

flowchart LR
    A([代码推送]) --> B([触发流水线])
    B --> C([容器准备])
    C --> D([构建打包])
    D --> E([测试部署])
    
    subgraph 容器环境
    direction TB
    C1[拉取基础镜像] --> C2[配置环境]
    end
    
    C -.-> 容器环境
    
    style A fill:#90caf9,stroke:#1976d2,stroke-width:2px
    style B fill:#90caf9,stroke:#1976d2,stroke-width:2px
    style C fill:#ffcc80,stroke:#f57c00,stroke-width:2px
    style D fill:#a5d6a7,stroke:#388e3c,stroke-width:2px
    style E fill:#a5d6a7,stroke:#388e3c,stroke-width:2px
    style C1 fill:#fff3e0,stroke:#f57c00,stroke-width:2px
    style C2 fill:#fff3e0,stroke:#f57c00,stroke-width:2px

反观国内,目前还没有一个像 GitHub Action 这样成熟、易用的 CI/CD 服务,开发者只能使用 Jenkins、GitLab CI 等工具进行 CI/CD,门槛有点高,成本也不低

但是,现在我们有了 CNB ,情况有所不同。CNB 基于云原生技术,开发者可以很方便地使用 CNB 进行 CI/CD,比如:在代码提交后,自动触发构建、测试、部署等流程。同时,还支持一些特性:

  • 秒级克隆:引入 Copy-on-Write (CoW) 机制,即使是百G级别的大型代码仓库,也能在数秒内完成代码准备,大幅缩短创建开发环境的时间。
  • 构建加速:每个任务独立使用 CoW 文件系统副本,确保缓存隔离与一致性,从而实现高效、稳定的并发构建。
  • 资源池化:屏蔽基础设施复杂性,通过分支即环境的设计,简化环境管理,让开发者可以专注于核心代码编写。

云原生流水线构建后,还有强大的制品库,比如:Docker 镜像制品库、Helm 镜像制品库等:
制品库

用 CNB 公众号的一篇文章非常合适:

CNB底层原理

视频教程

部分东西,还是视频比较清晰。

这里做个视频,主要内容:

  • 常用的 Git 平台展示。e.g. JetBrains 的 Git 插件使用、GitLab 的流水线展示 ;
  • 如何使用 CNB 进行云原生开发(云端开发)和云原生构建。

做教程视频不易(技术教程,受众小,B站根本不会推荐引流),请务必一键三连嗷~

操作Demo

CNB 对于个人开发者,提供的免费资源,可以说足够开发者“为所欲为”了:

资源类型 规格(括号内为公测期间资源)
云原生开发 1600核时/月(16000核时/月)
云原生构建 160核时/月(1600核时/月)
代码存储空间 100GiB
对象存储空间 100GiB

接下来,我们来看几个 CNB 构建的 Demo。官方的最佳实践里有了很多演示。这里我就演示一些不一样的。

云原生构建

CDN 会缓存静态资源,当静态资源更新后,CDN 节点资源不会立刻刷新,可能存在服务器资源已经更新,但是用户访问的资源还是旧的情况。为此,我们在更新了 CDN 资源后,标记资源过期或者预热资源,让 CDN 节点资源尽快刷新。

比如: 腾讯云的 EdgeOne 刷新

云原生构建: EO缓存刷新

通过腾讯云的 API 文档我们可以知道,刷新 CDN 缓存,也是支持 API 调用的。所以我们可以编写一个代码实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from tencentcloud.teo.v20220901 import teo_client, models
def make_cache_invalidate_task(target_url: list) -> str:
"""
创建缓存失效任务
:param target_url: 目标 URL 列表
:return: 响应的 JSON 字符串
"""
try:
req = models.CreatePurgeTaskRequest()
params = {
"Type": "purge_url",
"Method": "invalidate",
"ZoneId": ZONE_ID,
"Targets": target_url
}
req.from_json_string(json.dumps(params))
# 返回的 resp 是一个 CreatePurgeTask 的实例,与请求对象对应
resp = __initialize_client().CreatePurgeTask(req)
return resp.to_json_string()
except TencentCloudSDKException as err:
return f"Error: {err}"

完整的代码可以参考:

我们可以直接使用python3 scanSiteMap.py -s sitemap.xml命令,扫描网站地图,获取所有静态资源,然后调用 API 刷新 CDN 缓存。

为了构建为 Docker 容器,除了编写 Dockerfile 外。我们需要创建一个 .cnb.yml 的文件,用来构建流水线:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
main:
push:
- docker:
image: alpine:latest
services:
# 流水线中启用 docker 服务
- docker
stages:
- name: docker login
script:
- docker login -u ${CNB_TOKEN_USER_NAME} -p "${CNB_TOKEN}" ${CNB_DOCKER_REGISTRY}
- name: docker build
script:
- docker build -t ${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}:${CNB_COMMIT} -t ${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}:latest .
- name: docker push
script:
- docker push ${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}:${CNB_COMMIT}
- docker push ${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}:latest

解释一下: 当推送的分支为 main 分支时候,触发构建;构建完成后,将镜像推送到 CNB 的制品库内。

云原生构建: EO缓存刷新

最后的制品库:

云原生开发

这个场景就使用于我们个人使用了。我们可以把 Hexo 博客迁移到云端,这样我们就可以使用 CNB 的云原生进行在线开发了。但是这个情况,我们需要自定义一个环境,Hexo 需要 Node.js 包,所以我们可以在一个 Node.js 镜像内进行操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 帮助文档地址: https://docs.cnb.cool/zh/vscode/quick-start.html
FROM node:18

# 设置软件源
RUN npm config set registry https://mirrors.cloud.tencent.com/npm/

# 以及按需安装其他软件
# RUN apt-get update && apt-get install -y git

# 安装 code-server 和 vscode 常用插件
RUN curl -fsSL https://code-server.dev/install.sh | sh \
&& code-server --install-extension redhat.vscode-yaml \
&& code-server --install-extension eamodio.gitlens \
&& code-server --install-extension tencent-cloud.coding-copilot \
&& code-server --install-extension vscjava.vscode-java-pack \
&& echo done

# 安装 ssh 服务,用于支持 VSCode 客户端通过 Remote-SSH 访问开发环境
RUN apt-get update && apt-get install -y wget unzip openssh-server

# 指定字符集支持命令行输入中文(根据需要选择字符集)
ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8

# 安装环境依赖
RUN npm install -g hexo-server
RUN npm install -g hexo-cli

自定义容器的镜像

同时,在 .cnb.yml 中,我们指定使用这个镜像:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$:
vscode:
- runner:
cpus: 4
docker:
build: .ide/Dockerfile
volumes:
- node_modules:copy-on-write
services:
- vscode
- docker
stages:
# 环境启动后需要执行的命令
- name: 安装 yarn 相关依赖
script: yarn

之后,开启我们的“远橙开发”:

“远橙开发”启动

执行命令: hexo s,就可以启动我们的博客了:

云原生开发: Hexo博客服务模式

未来展望

CNB 的发布,无疑是给云原生开发带来了新的可能。同时,我也相信能一定程度,推动国内开源项目发展;甚至,我现在已经看到了国内开源项目,开始使用 CNB 进行构建了。一些公共资源,也出现在 CNB 上。

比如,之前看到的 DeepSeek 开源模型,CNB 上就有镜像仓库:

哈哈,我这里还有典藏版本的图:
671B DeepSeek模型

欢迎大家使用 CNB 进行云原生开发,也欢迎大家使用 CNB 进行开源项目构建~ 一起探索云原生、云计算的边界。



腾讯云推出云原生构建(CNB),面向未来,仓库云原生构建更简单
https://www.mintimate.cn/2025/03/15/first2Cnb/
作者
Mintimate
发布于
2025年3月15日
许可协议