无Nexus Pro,求从Nexus仓库下载所有artifacts至另一实例的方案
无Nexus Pro时迁移仓库所有Artifacts的可行方案
前提条件
- 拥有源Nexus实例的读取权限,目标Nexus实例的写入权限
- 确保源和目标仓库类型一致(如均为Maven2 Hosted、npm Hosted等)
方法一:用curl + wget 手动遍历迁移
适合所有仓库类型,无需额外工具,纯脚本实现
1. 批量下载源仓库的Artifacts
使用wget递归下载指定类型的文件,过滤掉无关页面:
# 替换为你的源Nexus信息 SOURCE_USER="你的源用户名" SOURCE_PWD="你的源密码" SOURCE_REPO_URL="https://源nexus地址/repository/源仓库名/" # 指定需要下载的artifact类型,按需调整(如jar,pom,war,zip,npm等) ACCEPT_TYPES="jar,pom,war,ear" wget --user=$SOURCE_USER --password=$SOURCE_PWD \ --recursive --no-parent --accept=$ACCEPT_TYPES \ --no-host-directories --cut-dirs=2 \ $SOURCE_REPO_URL
参数说明:
--no-host-directories:不创建域名目录--cut-dirs=2:去掉URL中repository/源仓库名/后的层级前缀,保留原始路径结构
2. 批量上传到目标Nexus
遍历下载的文件,用curl上传到目标仓库:
# 替换为你的目标Nexus信息 TARGET_USER="你的目标用户名" TARGET_PWD="你的目标密码" TARGET_REPO_URL="https://目标nexus地址/repository/目标仓库名/" # 遍历下载的文件,按原始路径上传 find . -type f \( -name "*.jar" -o -name "*.pom" -o -name "*.war" -o -name "*.ear" \) | while read FILE_PATH; do # 构造目标URL:保留文件的相对路径 UPLOAD_URL="${TARGET_REPO_URL}${FILE_PATH#./}" # 执行上传,添加重试机制避免超时 curl -u $TARGET_USER:$TARGET_PWD -T "$FILE_PATH" "$UPLOAD_URL" \ --max-time 300 --retry 3 --silent --show-error done
方法二:使用开源Nexus CLI工具
适合批量迁移,操作更简洁,支持多仓库类型
1. 安装Nexus CLI
从官方仓库下载对应系统的二进制文件,或通过Go安装:
go install github.com/sonatype-nexus-community/nexus-cli/cmd/nexus-cli@latest
2. 配置源和目标Nexus实例
# 配置源Nexus nexus-cli config set --name source \ --url https://源nexus地址 \ --username 源用户名 \ --password 源密码 # 配置目标Nexus nexus-cli config set --name target \ --url https://目标nexus地址 \ --username 目标用户名 \ --password 目标密码
3. 执行仓库迁移
# 迁移指定仓库的所有artifact nexus-cli repository copy --from source/源仓库名 --to target/目标仓库名
如果需要迁移多个仓库,可循环执行上述命令。
常见问题排查
- 权限错误:检查用户是否拥有源仓库的
nx-repository-view-*-*-read权限,目标仓库的nx-repository-view-*-*-add权限 - 上传失败:Maven仓库需确保pom与jar文件路径对应;大文件上传添加
--max-time和--retry参数避免超时 - 路径混乱:下载时保留原始路径结构,确保上传后Nexus能正确识别artifact的元数据
内容的提问来源于stack exchange,提问作者Nuno Oliveira
相关产品推荐
相关产品推荐

