CNB Artifact Migrate(COMPOSER 制品迁移)
- 支持Coding、Nexus、Jfrog、codeup(云效)平台中的 maven、npm、composer、nuget 类型制品迁移至CNB
- ⚠️开始迁移前,请确保CNB制品仓库已存在。
- ⚠️
Nexus、Jfrog 主要支持local库。
- ⚠️主要迁移自有包,不要迁移三方包
- 因Nexus的列表查询api接口查询数量有限制,Nexus超过1W版本以上的仓库迁移,请配置迁移列表.否则只能迁移1W个版本数据
- composer 制品库是社区提供的插件, 某些版本不支持通过接口获取元数据信息, 在此情况下, 迁移时可配置成 other 类型, 并显示指定需要迁移的包名
- 暂不支持插件衍生的元数据文件迁移
- codeup 截止 2025-07-16 暂不支持 composer 制品库, 故本工具暂不支持
- -v $(pwd):/app/log:/app/log 日志目录
- 日志文件包执行日志文件,迁移成功的包版本文件,迁移失败的包版本文件
- 增量迁移:挂载 迁移成功的包版本文件 并将文件路径配置到 SRC_EXCLUDE_PACKAGE 项
docker run --rm \
-u root
-e ARTIFACT_MIGRATE="parameter-mode" \
-e ARTIFACT_TYPE="composer" \
-e SRC_REGISTRY_TYPE="" \
-e SRC_INCLUDE_PACKAGE="" \
-e SRC_EXCLUDE_PACKAGE="" \
-e SRC_REGISTRY_URL="" \
-e SRC_REGISTRY_USERNAME="" \
-e SRC_REGISTRY_PASSWORD="" \
-e SRC_REGISTRY_TOKEN="" \
-e TAR_REGISTRY_URL="" \
-e TAR_REGISTRY_PASSWORD="" \
-v $(pwd):/app/log \
docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
| 参数 | 说明 |
|---|
| ARTIFACT_TYPE | composer |
| SRC_REGISTRY_TYPE | 原仓库类型(jfrog、nexus、coding、codeup、other) |
| SRC_INCLUDE_PACKAGE | 指定需要迁移的包,具体配置参考:config.yaml中includePackageVersion |
| SRC_EXCLUDE_PACKAGE | 指定迁移时需要排除的包,支持包名及包名:版本,具体配置参考:config.yaml中excludePackageVersion |
| SRC_REGISTRY_TYPE | 配置为other时必须配置SRC_INCLUDE_PACKAGE |
| SRC_REGISTRY_URL | 原仓库地址 |
| SRC_REGISTRY_USERNAME | 原仓库用户名 |
| SRC_REGISTRY_PASSWORD | 原仓库密码 |
| SRC_REGISTRY_TOKEN | 制品仓库api访问令牌(codeup专用,请参考云效文档 开发参考->API参考->获取个人访问令牌) |
| TAR_REGISTRY_URL | cnb目标仓库地址 |
| TAR_REGISTRY_PASSWORD | cnb目标仓库token |
- 挂载日志文件目录: -v $(pwd):/app/log
- 日志文件包执行日志文件,迁移成功的包版本文件,迁移失败的包版本文件
- 增量迁移:挂载 迁移成功的包版本文件 并将文件路径配置到 config.yaml 中的 excludePackageVersion 项
docker run --rm \
-u root \
-v /data/conf/config.yaml:/app/config.yaml \
# 迁移包列表文件挂载地址,需要挂载指定迁移包列表文件时使用,配置在config.yaml中includePackageVersion项
-v /data/conf/config-maven-includePackageName.txt:/app/config-maven-includePackageName.txt \
# 迁移需排除的包列表文件挂载地址,需要挂载指定迁移需排除的包列表文件时使用,配置在config.yaml中excludePackageVersion项
-v /data/conf/config-maven-excludePackageName.txt:/app/config-maven-excludePackageName.txt \
# 日志目录
-v $(pwd):/app/log \
docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
- 将config.yaml 配置放在项目根目录
- cnb流水线中项目默认路径:/workspace
main:
push:
- services:
- docker
stages:
- name: 制品迁移
script: |
echo "制品迁移开始"
docker pull docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
docker run --rm \
-u root \
-v /workspace/config.yaml:/app/config.yaml \
-v $(pwd):/app/log \
docker.cnb.cool/cnb/plugins/cnbcool/artifact-migrate:latest
echo "制品迁移完成"
artifactory:
composer:
- src:
type: coding
includePackageVersion:
excludePackageVersion:
url: https://xxxx-nuget.pkg.coding.net/xxx/xxx/v3/index.json
username: xxx
password: xxx
tempDir:
target:
url: http://nuget.cnb.cool/xxx/xxx/-/packages/v3/index.json
password: xxx
| 语法 | 具体包版本匹配 | 含义 | 示例 |
|---|
| name | 否 | 匹配任意版本的包 | 匹配 example 所有版本 |
| name:1.0.0 | 是 | 匹配精确版本 | 仅 example:1.0.0 |
| name:{1.0.0,2.0.0} | 是 | 匹配指定版本集合(1.0.0 或 2.0.0) | 仅匹配 1.0.0 和 2.0.0 |
| name:[1.0.0,5.0.0] | 否 | 匹配闭区间内的所有版本(含端点) | 匹配 1.0.0 到 5.0.0 之间版本 |
# SRC_REGISTRY_TYPE == other 时,includePackageVersion .txt文件 支持具体包版匹配规则格式
# 示例:
#单个版本号
monolog/monolog:0.37.0
#多个版本号
monolog/monolog:{0.37.0,0.38.0}
# SRC_REGISTRY_TYPE != other 时,includePackageVersion .txt文件 支持所有匹配规则格式
# 示例:
#配置 包名 迁移包下所有版本。示例:
monolog/monolog
#配置 包名:版本号 迁移具体版本,示例:
monolog/monolog:0.37.0
#配置 包名:版本号批量 迁移具体版本,示例:
monolog/monolog:{0.37.0,0.38.0}
#配置 包名:[开始版本号,结束版本好] 迁移具体版本区间 0.0.1 <= 版本 <= 2.0.0,示例:
monolog/monolog:[0.0.1,2.0.0]
# excludePackageVersion .txt文件 支持所有匹配规则格式
# 示例:
#配置 包名 迁移包下所有版本。示例:
monolog/monolog
#配置 包名:版本号 迁移具体版本,示例:
monolog/monolog:0.37.0
#配置 包名:版本号批量 迁移具体版本,示例:
monolog/monolog:{0.37.0,0.38.0}
#配置 包名:[开始版本号,结束版本好] 迁移具体版本区间 0.0.1 <= 版本 <= 2.0.0,示例:
monolog/monolog:[0.0.1,2.0.0]