logo
0
2
Login

CNB 多架构 Manifest 智能聚合插件, 手撸协议版(自用模板)

注意 / Scope

  • 这是我个人在 CNB 平台上的自用模板与业务习惯:约定 latest-amd64 / latest-arm64 两个单架构镜像,自动聚合latest 的多架构 Manifest。
  • 其他命名、更多架构、特殊工作流请 fork 后自行改造。我这边 佛系更新(可能长时间不改动、不跟进 issue)。
  • 同时构建并发操作Manifest聚合边界风险暂无测试。

TL;DR

  • 只需 4 个环境变量即可跑:CNB_DOCKER_REGISTRY / CNB_TOKEN_USER_NAME / CNB_TOKEN / CNB_REPO_SLUG_LOWERCASE
  • 默认把 latest-amd64 & latest-arm64 聚合latest(OCI Index,必要时 fallback Docker List)
  • 写入后做一致性校验(按 tag、按 digest 两视图;可选更深)
  • 幂等:任一架构完成都可触发一次,等另一个到位后会自动补齐
  • 支持 dry-run 预览(不落库)

适用场景

  • CNB / 私有制品库存在灰度:部分 tag 为 Index/List,部分为单清单甚至混用
  • 你正在产生 org/repo:latest-amd64org/repo:latest-arm64 两个镜像,希望得到 org/repo:latest 的统一入口
  • 需要自动忽略 unknown 平台、attestation、SBOM 条目
  • 需要稳定排序(按 os/arch[/variant])让 Index digest 可预期

不适用

  • 期望支持更多平台命名(如 foo-x86_64bar-aarch64 等):请 fork / 修改默认值。
  • Registry 仅支持 V1:本插件只写 V2(会优先探测、读 V1 不落库)。

特性

  • 智能模式auto(默认)、appendcover
    • auto:自动判断是单架构追加还是双架构覆盖聚合
  • 双协议:优先 OCI Index,不支持时退回 Docker Manifest List
  • 媒体类型混用:支持子清单同时使用 OCI manifestDocker v2 manifest
  • 稳定排序:Index/List 的 manifests[] 固定按 os/arch/variant 排序,digest 更稳定
  • 过滤垃圾项:忽略 unknownattestation-manifestsbom
  • 防抖:另一架构“马上到”时可等待一次(默认 5s/1 次)
  • 校验:写入后二次校验(tag / digest 两视图;可选深度校验逐平台 digest)
  • 注解:为 OCI Index 写入 io.cnbs.smart-upsert.* 注解(生成器、时间、模式、平台列表)
  • Harbor 兜底:V2 tag 列表异常时,自动走 Harbor API 聚合 tags
  • 认证:从 WWW-Authenticate 解析 realm/service,一次拿到多个 scope 的 Bearer token 并缓存
  • 忽略 SSL:适配内网 / 自签证书

快速开始

以 Docker 方式调用(推荐)

最少只需 4 个环境变量即可工作。

docker run --rm \ -e CNB_DOCKER_REGISTRY="docker.cnb.cool" \ -e CNB_TOKEN_USER_NAME="cnb" \ -e CNB_TOKEN="******" \ -e CNB_REPO_SLUG_LOWERCASE="org/repo" \ --name cnb-plugin-manifest docker.cnb.cool/wydev-open/cnb-plugin-manifest:latest

About

CNB 多架构 Manifest 智能聚合插件, 手撸协议版(自用模板)

312.00 KiB
0 forks2 stars1 branches0 TagREADMEMIT license
Language
JavaScript68.4%
gitignore24.4%
Markdown3.7%
Dockerfile2.2%
Others1.3%