私服 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
繁體地址,請注明出處:http://hk.pswp.cn/web/81469.shtml
英文地址,請注明出處:http://en.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)定…