logo
0
0
Login
更新 readme

CNB Artifact Migrate(NPM制品迁移)

功能介绍

  1. 支持Coding、Nexus、Jfrog、codeup(云效)平台中的 maven、npm、composer、nuget 类型制品迁移至CNB

获取仓库地址

在Docker上使用

注意事项

  1. ⚠️开始迁移前,请确保CNB制品仓库已存在。
  2. ⚠️Nexus、Jfrog 主要支持local库。
  3. ⚠️主要迁移自有包,不要迁移三方包
Nexus 注意事项
  1. 因Nexus的列表查询api接口查询数量有限制,Nexus超过1W版本以上的仓库迁移,请配置迁移列表.否则只能迁移1W个版本数据
  2. composer 制品库是社区提供的插件, 某些版本不支持通过接口获取元数据信息, 在此情况下, 迁移时可配置成 other 类型, 并显示指定需要迁移的包名
codeup迁移注意事项
  1. 暂不支持插件衍生的元数据文件迁移
  2. codeup 截止 2025-07-16 暂不支持 composer 制品库, 故本工具暂不支持

指定参数迁移

  1. -v $(pwd):/app/log:/app/log 日志目录
  2. 日志文件包执行日志文件,迁移成功的包版本文件,迁移失败的包版本文件
  3. 增量迁移:挂载 迁移成功的包版本文件 并将文件路径配置到 SRC_EXCLUDE_PACKAGE 项
  4. ARTIFACT_TYPE默认不会覆盖目标仓库,如需覆盖通过参数 -e REGISTRY_OVERWRITE_POLICY=true
docker run --rm \ -u root -e ARTIFACT_MIGRATE="parameter-mode" \ -e ARTIFACT_TYPE="npm" \ -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_TYPEnpm
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_URLcnb目标仓库地址
TAR_REGISTRY_PASSWORDcnb目标仓库token

指定配置文件迁移

  1. 挂载日志文件目录: -v $(pwd):/app/log
  2. 日志文件包执行日志文件,迁移成功的包版本文件,迁移失败的包版本文件
  3. 增量迁移:挂载 迁移成功的包版本文件 并将文件路径配置到 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

在CNB流水线上使用

注意事项

  1. 将config.yaml 配置放在项目根目录
  2. 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 "制品迁移完成"

config.yaml 参数介绍

artifactory: # 仓库类型 npm: - src: # 源仓库类型,可选: jfrog, nexus, coding, codeup, other # 源仓库类型 other 时,需要配置includePackageVersion type: coding # 指定迁移包名配置,支持批量配置 # type == other时, 支持配置,单规则配置,如:(匹配规则),多规则按"(|)"分隔,,如:(匹配规则1|匹配规则2) # 支持配置正则表达式,按包名迁移规则(正则表达式,如:^org 以org开头的包名) # 支持配置文件地址,如:/app/config-npm-includePackageName.txt,具体参考 txt 包名列表格式 includePackageVersion: # 排除迁移包名配置,支持配置批量 # 支持配置,单规则配置,如:(匹配规则),多规则按"(|)"分隔,,如:(匹配规则1|匹配规则2) # 支持配置正则表达式,按包名迁移规则((正则表达式,如:^org 以org开头的包名) # 支持配置文件地址,如:/app/config-npm-excludePackageName.txt,具体参考 txt 包名列表格式 excludePackageVersion: # 源仓库地址 url: https://xxx-npm.pkg.coding.net/xxx/xxx # 源仓库用户名 username: xxx # 源仓库密码或者token password: xxx # 制品仓库api访问令牌(codeup专用,请参考云效文档 开发参考->API参考->获取个人访问令牌) token: target: # 目标仓库地址 url: http://npm.cnb.cool/xxx/npm/-/packages/ # 目标仓库密码 password: xxx # 非必填,默认不覆盖。 false:不覆盖 true: 覆盖 overwritePolicy:

配置规则详解

语法含义示例
name匹配任意版本的包匹配 @opentelemetry/redis-common 所有版本
name:1.0.0匹配精确版本仅 @opentelemetry/redis-common: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 之间版本

txt 包名列表

# excludePackageVersion 与 excludePackageVersion .txt文件 支持所有匹配规则格式 # 示例: #配置 包名 迁移包下所有版本。示例: @opentelemetry/redis-common #配置 包名:版本号 迁移具体版本,示例: @opentelemetry/redis-common:0.37.0 #配置 包名:[开始版本号,结束版本好] 迁移具体版本区间 0.0.1 <= 版本 <= 2.0.0,示例: @opentelemetry/redis-common:[0.0.1,2.0.0]