迁移Nexus中hosted类型仓库数据至CodeArts Artifact
Nexus中hosted类型仓库迁移至CodeArts Artifact本地仓库,使用迁移工具仓库进行迁移。
该迁移工具的原理为:通过将Nexus上的包读取到输入流中,然后调用CodeArts Artifact的接口完成上传,完成对Nexus中hostsed类型仓库的迁移。
准备工作
- 运行环境为jdk8。
- 若迁移Nexus/JFrog,迁移工具必须运行在一台同Nexus/JFrog和CodeArts服务网络连通,该主机必须安装jdk8。
步骤一:确定需要迁移的原仓库
确认需要迁移的原仓库类型和语言类型后如果是hosted类型,使用后续步骤进行迁移。
步骤二:在CodeArts Artifact创建私有依赖库(本地仓库)
根据迁移仓库类型和仓库语言类型确认所确认的仓库类型,创建目标仓库,此处以创建Maven类型私有依赖库(本地仓库)为例。
- 登录软件开发生产线首页,单击项目卡片进入项目,根据仓库使用场景选择项目。
- 单击菜单栏
。
- 选择“新建制品仓库”。
- 仓库类型选择“本地仓库”,制品类型选择Maven,关联项目可以选择此公共项目,单击“确定”。新建成功的Maven私有依赖库将显示在仓库视图中。
- 创建完成后应为此页面,再新建其他仓库,可以选择右上角的“新建制品仓库”。
步骤三:获取创建的私有依赖库(本地仓库)的地址与配置
- 获取私有依赖库地址。
- 进入步骤二:在CodeArts Artifact创建私有依赖库(本地仓库)创建的私有依赖库,选择“仓库视图”。
- 单击仓库名称,右侧页面中仓库的“概览”页签中详细信息显示“仓库地址”。单击
即可复制仓库地址。
图1 获取私有依赖库地址
- 获取私有依赖库配置。
- 单击页面右上方“操作指导”。
- 在“操作指导”对话框中单击“下载配置文件”,下载配置文件settings.xml至本地。
图2 下载配置文件
- 在本地打开配置文件settings.xml文件,在其中搜索并找到如下红框中的用户名与密码。
步骤四:配置私有依赖库(本地仓库)的迁移工具
- 进入私有依赖库,在左侧边栏中选择目标Maven私有依赖库。
- 单击仓库名称,在页面右上方
,单击“下载迁移工具”将迁移工具压缩包(迁移工具名称relocation-jfrog-20250221.1.jar、配置文件application-nexus.yaml)下载到本地。
- 配置application-nexus.yaml文件中样例如下该样例仅包含最小配置参数,可直接再文件中搜索此参数名称,这些参数统一在relocation下。
表1 application.yaml 关键配置说明 参数名称
配置说明
样例
name
迁移任务的名称,仅作为展示
nexus-to-artifact
package_type
迁移仓库的语言类型maven npm pypi go
须知:maven的私有依赖库分为release和snapshot两种包格式,如果原仓库混合在一起,需要对原仓库两次迁移,分别迁移release和snapshot到不同格式的maven仓库中
maven
migrate_type
迁移类型,nexus3/nexus2,根据不同的neuxs版本填写
nexus3
save_temp_dir
迁移缓存路径, 迁移maven时必填, "/"结尾, 此路径用户缓存maven的快照版本名称最后上传
D:/tmp/xxx/
domain
原仓库的域名
原仓库的域名,最后的路径需没有'/'
http://{ip}:{port}
repo
原仓库名称,Nexus上的仓库名,通过Nexus页面上确认要迁移的仓库的NAME字段获取
test_maven
user_name
原仓库的用户名
username
password
原仓库的密码
password
target_domain
目标仓库的域名
通过私有库页面上仓库地址获取步骤三:获取创建的私有依赖库(本地仓库)的地址与配置,如仓库地址为:
https://{domain}/artgalaxy/cn-north-xxx_xxxxxxxx_maven_1_388/
则此处填写:https://{domain}/artgalaxy
如仓库地址为:
https://{domain}/artgalaxy/api/npm/cn-north-xx_xxxxxxx_npm_6944/
则此处填写:https://{domain}/artgalaxy/api/npm
https://{domain}/artgalaxy
https://{domain}/artgalaxy/api/npm
target_repo
目标仓库名称
通过仓库地址获取,步骤三:获取创建的私有依赖库(本地仓库)的地址与配置,如仓库地址为:
https://{domain}/artgalaxy/cn-north-xxx_xxxxxxxx_maven_1_388/
则此处填写:cn-north-xxx_xxxxxxxx_maven_1_388
如仓库地址为:
https://{domain}/artgalaxy/api/npm/cn-north-xx_xxxxxxx_npm_6944/
则此处填写:cn-north-xx_xxxxxxx_npm_6944
cn-north-xxx_xxxxxxxx_maven_1_388
cn-north-xx_xxxxxxx_npm_6944
target_user_name
目标仓库用户名,可以通过步骤三:获取创建的私有依赖库(本地仓库)的地址与配置 获取
username
target_password
目标仓库密码,可以通过步骤三:获取创建的私有依赖库(本地仓库)的地址与配置 获取
password
最简易application-nexus.yaml
relocation: # 迁移任务的名称,仅作为展示 name: nexus-to-artifact # 迁移仓库的语言类型maven npm pypi go等 package_type: maven # 迁移类型,支持governance jfrog nexus3/nexus2 migrate_type: "nexus3" # 迁移缓存路径, 迁移maven时必填, "/"结尾, 此路径用户缓存maven的快照版本名称最后上传 save_temp_dir: "D:/tmp/xxx/" # 原仓库参数, 仅jfrog nexus场景需要配置 # 原仓库的地址,最后的路径需没有'/' domain: 'http://{domain}/artifactory' # 原仓库的仓库名称 repo: 'test-maven' # 原仓库的用户名 user_name: "username" # 原仓库的密码 password: "password" # 目标仓库参数 # 目标仓库地址,最后的路径需没有'/',从页面上获取 target_domain: 'https://{domain}/artgalaxy/xxxx/xxxx' # 目标仓库的名称 target_repo: xxxxx # 目标仓库用户名 target_user_name: 'username' # 目标仓库密码 target_password: 'password'
- 全量配置参数application.yaml 参数参考
relocation: # 迁移程序通用配置 # 迁移程序核心线程数量 corePoolSize: 20 # 迁移程序最大线程池数量 maxPoolSize: 40 # 迁移程序线程池队列大小 queueCapacity: 99999999 # 迁移程序的最大迁移速度 单位 MB/s,默认值为20 speed_limit: 20 # jfrog 迁移场景参数,此参数表示迁移包修改时间从modifiedFrom 到 modifiedTo 时间之间的包(时间戳) modifiedFrom: modifiedTo: # 迁移任务的名称,仅作为展示 name: jfrog-to-artifact # 迁移仓库的语言类型 package_type: pypi # 迁移类型,支持governance jfrog nexus migrate_type: "jfrog" # 迁移缓存路径, 迁移maven时必填,"/"结尾 save_temp_dir: "/xxxx/" # 原仓库参数, 仅jfrog nexus场景需要配置 # 原仓库的地址,最后的路径需没有'/' domain: 'http://{domain}/artifactory' # 原仓库的仓库名称 repo: 'test-pypi-source' # 原仓库的类型,默认为artifactory repo_type: artifactory # 原仓库的用户名 user_name: "username" # 原仓库的密码 password: "password" # 如果是jfrog场景,此处可填写原仓库的子路径,支持子路径迁移 source_sub_path: # 目标仓库参数 # 目标仓库地址,最后的路径需没有'/',从页面上获取 target_domain: 'https://{domain}/artgalaxy/xxxx/xxxx' # 目标仓库的名称 target_repo: xxxxx # 目标仓库的类型,默认为artifactory target_repo_type: artifactory # 目标仓库用户名 target_user_name: 'username' # 目标仓库密码 target_password: 'password' # governance迁移参数 迁移python无需关注 # governance迁移场景的domain_id domain_id: test009 # governance场景下是否需要调用governance服务,如果是true将不调用governance call_governance_use_local: true # governance 迁移仓库的语言仓类型 governance_type: npm # governance实体包的存放路径 migrate_local_path: "" # governance元数据文件,表示需要迁移的元数据文件 migrate_metadata_path: "" # 回调governance的路径,此路径需要单独设置一个空路径 governance_save_path: "" # 回调governance的url governance_url: "" # 用户的ak,用于回调governance接口 access_key_id: "" # 用户的sk,用于回调governance接口 secret_access_key: "" # 是否仅通过governance_save_path中的缓存信息回调governance only_update_governance: false # 迁移governance最大的文件数量,此数量为migrate_metadata_path中的元数据数目 migrate_max_num: -1
步骤五:执行迁移
- 执行迁移脚本java -jar relocation-jfrog-20250221.1.jar --spring.config.location=application-nexus.yaml > /log/relocation-jfrog.log 2>&1 &
- 进入对应的私有依赖库(本地仓库),查看hosted类型仓库的组件包是否上传成功。