私服 nexus 之间迁移 npm 仓库

本文介绍如何将一个 Nexus 特定仓库中的 npm 包内容迁移到另一个 Nexus 特定仓库。此过程适用于需要重构仓库结构或合并仓库的场景。

迁移脚本

以下是完整的迁移脚本,它会自动完成以下操作:

  1. 从源仓库获取所有 npm 包列表
  2. 下载每个包的 .tgz 文件
  3. 解压并重新发布到目标仓库
#!/bin/bash# === 配置区域 ===
NEXUS_URL="https://nexus.test.com"
USERNAME="test"
PASSWORD="123456"SOURCE_REPO="npm-a"
TARGET_REPO="npm-b"SOURCE_REGISTRY="$NEXUS_URL/repository/$SOURCE_REPO/"
TARGET_REGISTRY="$NEXUS_URL/repository/$TARGET_REPO/"TMP_DIR="/tmp/npm-migrate"
mkdir -p "$TMP_DIR"
cd "$TMP_DIR" || exit 1
# =================# ✅ 日志处理:同时输出到终端和日志文件
LOG_FILE="$TMP_DIR/npm-migrate.log"
exec > >(tee -a "$LOG_FILE") 2>&1log() {echo "[$(date '+%F %T')] $*"
}log "🚀 启动 npm 仓库迁移脚本"# 遇到错误不中断脚本
set +eTOKEN=""while true; dolog "📥 获取包列表,continuationToken=$TOKEN"RESPONSE=$(curl -s -u "$USERNAME:$PASSWORD" \"$NEXUS_URL/service/rest/v1/components?repository=$SOURCE_REPO${TOKEN:+&continuationToken=$TOKEN}")ITEM_COUNT=$(echo "$RESPONSE" | jq '.items | length')log "📦 本页包含 $ITEM_COUNT 个包"echo "$RESPONSE" | jq -c '.items[]' | while read -r item; doname=$(echo "$item" | jq -r '.assets[0].path' | cut -d/ -f1)version=$(echo "$item" | jq -r '.version')log "➡️ 处理 $name@$version"tarball_url="${SOURCE_REGISTRY}${name}/-/${name}-${version}.tgz"tarball_file="${name}-${version}.tgz"log "🌐 下载包: $tarball_url"curl -s -u "$USERNAME:$PASSWORD" -O "$tarball_url"if [[ -f "$tarball_file" ]]; thentar -xzf "$tarball_file"pkg_dir="package"# 可选:检查是否已存在(加快速度)EXISTS=$(curl -s -u "$USERNAME:$PASSWORD" "$TARGET_REGISTRY$name" | grep "\"$version\"")if [[ -n "$EXISTS" ]]; thenlog "✅ $name@$version 已存在于目标仓库,跳过发布"elselog "🚀 发布 $name@$version$TARGET_REPO"npm publish "$pkg_dir" --registry "$TARGET_REGISTRY" --forceif [[ $? -ne 0 ]]; thenlog "❌ 发布失败:$name@$version"elselog "✅ 发布成功:$name@$version"fifirm -rf "$tarball_file" "$pkg_dir"elselog "❌ 下载失败:$tarball_url"fidone# 分页处理TOKEN=$(echo "$RESPONSE" | jq -r '.continuationToken')if [[ "$TOKEN" == "null" || -z "$TOKEN" ]]; thenlog "✅ 所有包处理完成,无更多分页"breakelselog "➡️ 获取下一页 continuationToken=$TOKEN"fi
donelog "🏁 所有迁移已完成"

~/.npmrc 中配置目标仓库的 auth 认证信息,因为发布包要使用,内容如下示例:

registry=https://nexus.test.com/repository/npm-b/
//nexus.test.com/repository/npm-b/:_auth=c45h2312asmh3dsfYW3fassaawRAxMde=
//nexus.test.com/repository/npm-b/:always-auth=true

其中 _auth 后面的内容是对 “账号:密码” 进行base64之后的字符串,注意账号密码使用英文冒号分隔拼接在一起后统一 base64。

使用说明

  • 确保已安装 curl, jq, npmtar 工具

  • 确保有源仓库和目标仓库的访问权限

执行脚本:

chmod +x migrate.sh
./migrate.sh

注意事项

  • 此脚本仅处理源仓库中的第一页数据(默认100条记录),如需处理更多数据,需要添加分页逻辑

  • 迁移过程中会保留原始包的版本信息

  • 使用 --force 参数强制发布,可能会覆盖目标仓库中已存在的同名包

  • 脚本执行完毕后会自动清理临时文件


(END)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/81469.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django ToDoWeb 服务

我们的任务是使用 Django 创建一个简单的 ToDo 应用程序,允许用户添加、查看和删除笔记。我们将通过设置 Django 项目、创建 Todo 模型、设计表单和视图来处理用户输入以及创建模板来显示任务来构建它。我们将逐步实现核心功能以有效地管理 todo 项。 Django ToDoWeb 服务 …

阿里云服务器遭遇DDoS攻击?低成本第三方高防解决方案全解析

阿里云服务器因高性能和稳定性备受青睐,但其DDoS高防服务的价格常让中小企业望而却步。面对动辄每月数万元的防护成本,许多用户不禁疑问:能否通过第三方高防服务保护阿里云服务器?如何实现低成本高效防御? 本文将结合技…

2025山东CCPC补题

2025山东CCPC补题 目录 2025山东CCPC补题K - UNO! (双端队列的简单应用)M - 第九届河北省大学生程序设计竞赛 (二进制枚举模拟)J - Generate 01 String 感觉这场比赛的题目挺不错的;没有说那些为了算法而算…

体绘制学习

一、基本概念 体绘制是对一个三维物体数据进行采样与拟合的过程。 在体绘制中用vtkVolume渲染数据 渲染数据类数据转换类几何渲染vtkActorvtkPolyDataMapper体渲染vtkVolumevtkVolumeRayCastMapper 体绘制常用算法如下。 光线投射法。 优点是可视化结果质量好。缺点是计算…

告别“盘丝洞”车间:4-20mA无线传输如何重构工厂神经网?

4-20ma无线传输是利用无线模块将传统的温度、压力、液位等4-20mA电流信号转换为无线信号进行传输。这一技术突破了有线传输的限制,使得信号可以在更广泛的范围内进行灵活、快速的传递,无线传输距离可达到50KM。达泰4-20ma无线传输模块在实现工业现场应用…

VB.NET与SQL连接问题解决方案

1.基本连接步骤 使用SqlConnection、SqlCommand和SqlDataReader进行基础操作: vb.net Imports System.Data.SqlClient Public Sub ConnectToDatabase() Dim connectionString As String "ServermyServerAddress;DatabasemyDataBase;Integrated Security…

ElasticSearch--DSL查询语句

ElasticSearch DSL查询文档 分类 查询类型功能描述典型应用场景示例语法查询所有匹配所有文档,无过滤条件数据预览/测试json { "query": { "match_all": {} } }全文检索查询对文本字段分词后匹配,基于倒排索引搜索框模糊匹配、多字段…

DDR4读写压力测试

1.1测试环境 1.1.1整体环境介绍 板卡: pcie-403板卡 主控芯片: Xilinx xcvu13p-fhgb2104-2 调试软件: Vivado 2018.3 代码环境: Vscode utf-8 测试工程: pcie403_user_top 1.1.2硬件介绍 UD PCIe-403…

在 Windows 上使用 WSL 安装 Ansible详细步骤

在 Windows 上使用 WSL(Windows Subsystem for Linux) 安装 Ansible 是目前最推荐的方式,因为 Ansible 本身是为 Linux 环境设计的,不支持原生 Windows 作为控制节点。 下面是一个 详细步骤指南 ,帮助你在 Windows 上…

编写第一个ros程序

1.下载VScode 下载链接如下: Download Visual Studio Code - Mac, Linux, Windows 下载ARM64下的.deb文件 打开虚拟机,再rosnoetic下新建一个文件夹VSCODE,将windows下的文件导入该文件夹下如下图。 在该文件夹下右键选择在终端中打开 输入…

代码随想录算法训练营第60期第四十九天打卡

大家好,今天我们还是继续我们的动态规划章节,可能有的朋友已经开始厌倦了说为什么动态规划怎么这么多题目,大家可以想想我们前面其实刷过好几种类型的动态规划的经典题目比如说各式各样的背包问题当然包括0-1背包,完全背包&#x…

centos7.9离线升级内核到4.19.12详细教程

cenots7.9默认安装的内核版本是:3.10.0-1160.119.1.el7.x86_64,在安装nvidia显卡驱动的时候,提示内核版本过低,需要升级内核版本,升级完成之后,就可以顺利的安装上nvidia显卡驱动了,实测有效。 一、查看当前内核版本命令 uname -r二、下载离线内核的rpm包

Vue3 + TypeScript + el-input 实现人民币金额的输入和显示

输入人民币金额的参数要求: 输入要求: 通过键盘,只允许输入负号、小数点、数字、退格键、删除键、方向左键、方向右键、Home键、End键、Tab键;负号只能在开头;只保留第一个小数点;替换全角输入的小数点&a…

方正字库助力华为,赋能鸿蒙电脑打造全场景字体解决方案

2025年5月19日,搭载华为鸿蒙操作系统的鸿蒙电脑,面向用户推出集AI智能、互联流畅、安全保障和精致体验于一体的全新办公系统。作为鸿蒙生态核心字体服务商,方正字库为此次提供了全面的系统字体支持,涵盖中文、西文及符号三大类字库…

PHPStudy 一键式网站搭建工具的下载使用

目录 一、下载 PHPStudy二、安装步骤三、基本使用方法3.1 创建网站3.2 管理数据库3.3 软件管理3.4 自动启动3.5 配置管理 四、注意事项和进阶使用4.1 注意事项4.2 进阶使用 背景: 我们在学习和工作中,经常会遇到各种需要自己搭建环境的场景,这…

java中的线程安全的集合

1.ConcurrentHashMap。 key,value结构。 jdk1.7通过分段锁保证不同段同时操作是线程安全的,但并发不足,jdk1.8通过node节点锁和CAS保证并发安全。不同node节点可以并发读写。通过它的computer,computerIfAbsent,等可以保证原子更新value。ifAbsent表示有…

MySQL问题:MySQL中使用索引一定有效吗?如何排查索引效果

不一定有效,当查询条件中不包含索引列或查询条件复杂且不匹配索引顺序 对于一些小表,MySQL可能选择全表扫描而非使用索引,因为全表扫描的开销可能更小 最终是否用上索引是根据MySQL成本计算决定的,评估CPU和I/O成本 排查索引效…

使用vscode MSVC CMake进行C++开发和Debug

使用vscode MSVC CMake进行C开发和Debug 前言软件安装安装插件构建debuug方案一debug方案二其他 前言 一般情况下我都是使用visual studio来进行c开发的,但是由于python用的是vscode,所以二者如果统一的话能稍微提高一点效率。 软件安装 需要安装的软…

【后端高阶面经:消息队列篇】29、Kafka高性能探秘:零拷贝、顺序写与分区并发实战

一、 顺序写入:磁盘性能的极致挖掘 Kafka的高性能本质上源于对磁盘顺序访问的深度优化。 传统随机写入的磁盘操作需要磁头频繁寻道,机械硬盘的随机写性能通常仅为100IOPS左右,而Kafka通过追加日志(Append-Only Log)模式,将所有消息按顺序写入分区文件,使磁盘操作转化为…

AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月27日第90弹

从今天开始,咱们还是暂时基于旧的模型进行预测,好了,废话不多说,按照老办法,重点8-9码定位,配合三胆下1或下2,杀1-2个和尾,再杀6-8个和值,可以做到100-300注左右。 (1)定…