logo
0
0
WeChat Login

CNB 多架构构建模板仓库

这是一个基于 CNB (云原生构建) 的多架构 Docker 镜像构建模板仓库。

📋 概述

本仓库提供了多架构(AMD64 和 ARM64)构建的模板配置,支持:

  • 多架构并行构建(amd64 和 arm64:v8)
  • 自动创建并推送多平台镜像 Manifest
  • CNB 云原生开发环境配置

📁 文件说明

1. amd64-aarch64-templates.yml

多架构构建主配置文件,实现了以下功能:

并行构建架构

  • AMD64 构建:使用 cnb:arch:amd64 标签的构建节点
  • ARM64 构建:使用 cnb:arch:arm64:v8 标签的构建节点

两个架构的构建过程并行执行,互不阻塞。

构建流程

每个架构的构建步骤:

  1. Docker 登录到 CNB Docker 制品库
  2. 构建 Docker 镜像
  3. 推送架构特定的镜像标签
  4. 通知该架构构建完成(使用 cnb:resolve 内置任务)

最终合并步骤:

  1. 等待所有架构构建完成(使用 cnb:await 内置任务)
  2. 创建多平台 Manifest 列表
  3. 删除中间架构标签,只保留主标签

生成的镜像标签

  • :latest - 多平台 Manifest 列表(支持 linux/amd64 和 linux/arm64)
  • :latest-linux-amd64 - AMD64 特定镜像(构建后删除)
  • :latest-linux-arm64 - ARM64 特定镜像(构建后删除)

2. Debian-13-ide-amd64.yml

AMD64 云原生开发环境配置,用于在 CNB 平台上进行远程开发。

配置内容:

  • 使用镜像:docker.cnb.cool/yamingnetwork/ide:latest
  • CPU 资源:32 核
  • 架构标签:cnb:arch:amd64
  • 服务:vscode + docker

使用方法:

# 在你的 .cnb.yml 中 include 此文件 include: - ./Debian-13-ide-amd64.yml

3. Debian-13-ide-aarch64.yml

ARM64 云原生开发环境配置,用于在 CNB 平台上进行远程开发。

配置内容:

  • 使用镜像:docker.cnb.cool/yamingnetwork/ide:latest
  • CPU 资源:16 核
  • 架构标签:cnb:arch:arm64:v8
  • 服务:vscode + docker

使用方法:

# 在你的 .cnb.yml 中 include 此文件 include: - ./Debian-13-ide-aarch64.yml

🚀 使用方法

方式一:直接使用

amd64-aarch64-templates.yml 的内容复制到你的 .cnb.yml 文件中。

确保你的项目根目录有一个 Dockerfile,CNB 会自动构建多架构镜像。

方式二:使用 Include(推荐)

在你的 .cnb.yml 文件中通过 include 引入模板:

include: - https://cnb.cool/your-namespace/your-repo/-/blob/main/amd64-aarch64-templates.yml main: push: # 你的其他构建流程...

或者在本地仓库中直接引用:

include: - ./amd64-aarch64-templates.yml

方式三:仅使用开发环境

如果你只需要远程开发环境,可以只引入对应的 IDE 配置:

include: - ./Debian-13-ide-amd64.yml # 或 ./Debian-13-ide-aarch64.yml

🔧 核心技术点

1. 使用 CNB include 语法

include 支持三种方式引入配置:

  • 字符串路径(相对路径或 URL)
  • 对象形式(可配置 ignoreError)
  • 内联 YAML 配置对象

合并规则:

  • 数组合并:追加元素
  • 对象合并:同名键覆盖,新键添加
  • 本地配置覆盖 include 引入的配置

2. 构建节点架构标签

通过 runner.tags 指定架构:

  • cnb:arch:amd64 - AMD64 架构
  • cnb:arch:arm64:v8 - ARM64 架构

3. CNB 内置任务

cnb:resolve

通知某个任务完成,设置一个 key 用于后续等待。

- name: resolve type: cnb:resolve options: key: build-amd64

cnb:await

等待指定 key 的任务完成后才继续执行。

- name: await the amd64 type: cnb:await options: key: build-amd64

artifact:remove-tag

删除制品库的标签。

- name: remove tag type: artifact:remove-tag options: name: ${CNB_REPO_NAME} tags: - latest-linux-amd64 - latest-linux-arm64 type: docker

4. 插件任务:manifest

使用 cnbcool/manifest 插件创建多平台镜像 Manifest 列表。

- name: manifest image: cnbcool/manifest settings: target: ${IMAGE_TAG} template: ${IMAGE_TAG}-OS-ARCH platforms: - linux/amd64 - linux/arm64

📚 参考文档

⚙️ 环境变量

本模板使用以下 CNB 默认环境变量:

  • CNB_DOCKER_REGISTRY - CNB Docker 制品库地址
  • CNB_REPO_SLUG_LOWERCASE - 仓库标识(小写)
  • CNB_REPO_NAME - 仓库名称
  • CNB_TOKEN - CNB 访问令牌
  • CNB_TOKEN_USER_NAME - CNB 用户名

📝 注意事项

  1. 确保 Dockerfile 存在于项目根目录
  2. 首次使用前需要在 CNB 平台配置适当的构建节点(支持 amd64 和 arm64)
  3. 中间架构标签(-linux-amd64-linux-arm64)会在构建完成后自动清理
  4. 云原生开发环境需要在 CNB 平台通过 vscode 事件触发

🤝 贡献

欢迎提交 Issue 和 Pull Request 来改进这些模板配置。

About

构建模板以及其它模板