腾讯云推出云原生构建(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 的 Gateway 连接远程 IDE:
一次启动,最长可以启动 16 小时(一天 24 小时,留足 8 小时睡眠 😄);16 小时过后,也不用担心,你工作空间内的代码是有持久化的(.gitignore
标记的内容除外)。
只要你想,你可以把本地的环境全部迁移到 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 公众号的一篇文章非常合适:
视频教程
部分东西,还是视频比较清晰。
这里做个视频,主要内容:
- 常用的 Git 平台展示。e.g. JetBrains 的 Git 插件使用、GitLab 的流水线展示 ;
- 如何使用 CNB 进行云原生开发(云端开发)和云原生构建。
做教程视频不易(技术教程,受众小,B站根本不会推荐引流),请务必一键三连嗷~
操作Demo
CNB 对于个人开发者,提供的免费资源,可以说足够开发者“为所欲为”了:
资源类型 | 规格(括号内为公测期间资源) |
---|---|
云原生开发 | 1600核时/月(16000核时/月) |
云原生构建 | 160核时/月(1600核时/月) |
代码存储空间 | 100GiB |
对象存储空间 | 100GiB |
接下来,我们来看几个 CNB 构建的 Demo。官方的最佳实践里有了很多演示。这里我就演示一些不一样的。
云原生构建
CDN 会缓存静态资源,当静态资源更新后,CDN 节点资源不会立刻刷新,可能存在服务器资源已经更新,但是用户访问的资源还是旧的情况。为此,我们在更新了 CDN 资源后,标记资源过期或者预热资源,让 CDN 节点资源尽快刷新。
比如: 腾讯云的 EdgeOne 刷新
通过腾讯云的 API 文档我们可以知道,刷新 CDN 缓存,也是支持 API 调用的。所以我们可以编写一个代码实现:
1 |
|
完整的代码可以参考:
我们可以直接使用python3 scanSiteMap.py -s sitemap.xml
命令,扫描网站地图,获取所有静态资源,然后调用 API 刷新 CDN 缓存。
为了构建为 Docker 容器,除了编写 Dockerfile 外。我们需要创建一个 .cnb.yml
的文件,用来构建流水线:
1 |
|
解释一下: 当推送的分支为 main 分支时候,触发构建;构建完成后,将镜像推送到 CNB 的制品库内。
最后的制品库:
云原生开发
这个场景就使用于我们个人使用了。我们可以把 Hexo 博客迁移到云端,这样我们就可以使用 CNB 的云原生进行在线开发了。但是这个情况,我们需要自定义一个环境,Hexo 需要 Node.js 包,所以我们可以在一个 Node.js 镜像内进行操作:
1 |
|
同时,在 .cnb.yml
中,我们指定使用这个镜像:
1 |
|
之后,开启我们的“远橙开发”:
执行命令: hexo s
,就可以启动我们的博客了:
未来展望
CNB 的发布,无疑是给云原生开发带来了新的可能。同时,我也相信能一定程度,推动国内开源项目发展;甚至,我现在已经看到了国内开源项目,开始使用 CNB 进行构建了。一些公共资源,也出现在 CNB 上。
比如,之前看到的 DeepSeek 开源模型,CNB 上就有镜像仓库:
哈哈,我这里还有典藏版本的图:
欢迎大家使用 CNB 进行云原生开发,也欢迎大家使用 CNB 进行开源项目构建~ 一起探索云原生、云计算的边界。