CNB Artifact Migrate(MAVEN 制品迁移)
- ⚠️开始迁移前,请确保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 项
- SRC_REGISTRY_TYPE=other时,必须配置 SRC_INCLUDE_PACKAGE
docker run --rm \
-u root
-e ARTIFACT_MIGRATE="parameter-mode" \
-e ARTIFACT_TYPE="maven" \
-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 | maven |
| 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:
maven:
- src:
type: coding
includePackageVersion:
excludePackageVersion:
url: http://xxx-maven.pkg.coding.net/repository/xxx/xxx
username: xxx
password: xxx
token:
target:
url: http://maven.cnb.cool/xxx/maven/-/packages/
password: xxx
| 语法 | 具体包版本匹配 | 含义 | 示例 |
|---|
| groupid | 否 | 匹配任意版本的该 groupId | 匹配 com.example 所有版本 |
| groupid:{1.0.0,2.0.0} | 否 | 匹配指定版本集合(1.0.0 或 2.0.0) | 仅匹配 1.0.0 和 2.0.0 |
| groupid:[1.0.0,5.0.0] | 否 | 匹配闭区间内的所有版本(含端点) | 匹配 1.0.0 到 5.0.0 之间版本 |
| groupid:artifctid | 否 | 匹配该构件所有版本 | com.example:app 的所有版本 |
| groupid:artifctid:1.0.0 | 是 | 匹配精确版本 | 仅 com.example:app:1.0.0 |
| groupid:artifctid:{1.0.0,2.0.0} | 是 | 匹配多个指定版本 | 仅匹配 1.0.0 和 2.0.0 |
| groupid:artifctid:[1.0.0,5.0.0] | 否 | 匹配版本范围内所有版本(含端点) | 匹配 1.0.0 到 5.0.0 之间版本 |
# SRC_REGISTRY_TYPE == other 时,includePackageVersion .txt文件 支持具体包版本匹配规则格式
# 示例:
#单个版本
groupid:artifctid:1.0.0
#多个版本号
groupid:artifactid:{3.0.0,3.13.6}
# SRC_REGISTRY_TYPE != other 时,includePackageVersion .txt文件 支持所有匹配规则格式
# 示例:
#全部包版本
groupid
#全部版本
groupid:artifactid
#多个版本号
groupid:{3.0.0,3.13.6}
#版本区间
groupid:[3.0.0,3.13.6]
#多个版本号
groupid:artifactid:{3.0.0,3.13.6}
#版本区间
groupid:artifactid:[3.0.0,3.13.6]
# excludePackageVersion .txt文件 支持所有匹配规则格式
# 示例:
#全部包版本
groupid
#全部版本
groupid:artifactid
#多个版本号
groupid:{3.0.0,3.13.6}
#版本区间
groupid:[3.0.0,3.13.6]
#多个版本号
groupid:artifactid:{3.0.0,3.13.6}
#版本区间
groupid:artifactid:[3.0.0,3.13.6]