1793 字约 6 分钟
本文介绍 CNB 制品库的基本概念,包括支持的制品类型、管理方式、权限控制、存储计费和制品迁移。
制品类型
CNB 当前支持以下制品类型:
| 制品类型 | 域名 |
|---|---|
| Docker | docker.cnb.cool |
| Docker Model | docker-model.cnb.cool |
| Helm | helm.cnb.cool |
| Maven | maven.cnb.cool |
| npm | npm.cnb.cool |
| ohpm | ohpm.cnb.cool |
| Nuget | nuget.cnb.cool |
| Composer | composer.cnb.cool |
| PyPI | pypi.cnb.cool |
| Cargo | cargo.cnb.cool |
| Conan | conan.cnb.cool |
管理制品库
各制品类型与组织、代码仓库在 UI 中的层级关系如下:
test-org # 组织
├── maven
├── npm
├── ohpm
├── nuget
├── composer
├── pypi
├── cargo
├── conan
└── test-git-repo # 代码仓库
├── docker
├── helm
└── docker model如上所示,Composer/Maven 等制品库归属于组织,Docker/Helm/Docker Model 制品库归属于组织下的代码仓库,两者的使用方式不同。
使用 Docker/Helm/Docker Model 制品库
Docker/Helm/Docker Model 制品库归属于代码仓库,无需手动创建。登录后创建或选择一个代码仓库,进入「制品」页面即可查看。
使用 Composer/Maven 等制品库
创建制品库
点击右上角「+」创建新的制品库,或通过「头像」→「我的制品库」使用已有制品库。进入制品库后点击「使用指引」查看操作引导。
删除制品
进入制品库后,点击制品名称进入该制品,可删除整个制品或指定版本。
删除制品库
Docker/Helm/Docker Model 制品库无需手动删除。其他类型可在「制品库设置」中删除。
获取制品库地址
在「制品库设置」>「基础设置」中查看。
权限管控
角色
Docker/Helm/Docker Model 类型制品的可见性与所托管的 代码仓库 可见性一致。用户对制品的操作权限由其在代码仓库中的角色决定。
Composer/Maven 等类型制品的可见性取决于制品库的可见性,用户对制品的操作权限由其在制品库中的角色决定。
用户在代码仓库中的角色,可在「代码仓库」>「设置」>「仓库成员」中查看: 
用户在制品库中的角色,可在「制品库」>「制品库设置」>「成员管理」中查看: 
下表中列出了制品行为及所需角色的对应关系:
| 资源 | 行为 | 所需角色 |
|---|---|---|
| 公开制品库制品 | 拉取 | 任何人都可以拉取,无需登录鉴权 |
| 公开制品库制品 | 推送 | 开发者及以上 |
| 公开制品库制品 | 删除 | 管理员及以上 |
| 私有制品库制品 | 拉取 | 访客及以上,需登录鉴权 |
| 私有制品库制品 | 推送 | 开发者及以上 |
| 私有制品库制品 | 删除 | 管理员及以上 |
访问令牌
当通过命令行工具读写制品时,最终对制品的操作行为能否获得授权,将由用户的角色和请求所携带的访问令牌权限共同决定。
当访问令牌缺失时,系统将视为匿名访问,匿名访问时操作权限将受到限制。
制品库详细鉴权策略如下:
登录操作,
访问令牌有效,将会允许登录,否则拒绝。匿名操作,仅允许拉取公开制品库制品,其余操作被拒绝。
查询、拉取、推送制品操作,要求用户
角色拥有对应权限,且访问令牌的registry-package授权范围包含对应操作,则允许,否则拒绝。删除操作类似。在策略 3 允许操作的基础上,若
访问令牌指定了使用范围(如指定仓库、指定制品库、仅公开仓库/制品库),且此范围与被访问的资源匹配,则返回实际授权范围;否则需要检查被操作资源的可见性:- 如果被访问的资源为公开,拉取操作仍然会被允许,其余操作被拒绝;
- 如果被访问的资源为私有,全部操作均将被拒绝。
用户、令牌、被访问资源任何一项处于非正常状态(如被冻结),全部操作均将被拒绝。只要携带了错误的
访问令牌(令牌登录之后过期也会被视作非正常令牌),即使是拉取公开制品库的制品,也会被拒绝。
上述策略以图形化方式展示如下(其中制品行为以拉取操作作为示例,Token 指的是 CNB 的 访问令牌,Scope 指的是 访问令牌 的授权范围):
创建访问令牌
您可以点击右上角「头像」>「个人设置」>「访问令牌」> 「添加访问令牌」(在新窗口打开) 创建新的 访问令牌。

访问令牌 的权限,只需要关注「授权范围」registry 部分即可。
「常见场景」选择「制品库」时,默认只会授权 registry-package 的读写权限。
若需要通过命令行工具删除制品(例如:npm unpublish),则需要勾选 registry-package-delete 的读写权限。
另外,「使用范围」中「指定制品库」无法选中 Docker、Helm 和 Docker Model 制品库,需选择「指定仓库」,然后再配置「常见场景」为「制品库」即可。
在云原生构建和云原生开发中使用令牌
有三种使用方式:
关于方式 1 的说明: CNB 在云原生构建和云原生开发中为用户内置了访问令牌, 可直接使用 ${CNB_TOKEN_USER_NAME} 和 ${CNB_TOKEN} 环境变量,无需额外创建。
容量统计
基于托管在 CNB 的制品所占存储空间进行计费。可在「用量统计」中查看各制品的容量。
注意:Docker/Docker Model 制品的重复基础镜像会去重后计算容量。
制品迁移
如需批量将制品从其他仓库迁移至 CNB,可使用 CNB 制品迁移工具。