说明
Sonatype Nexus Repository 是什么?
- Sonatype Nexus Repository 是一个用于管理和分发软件组件的开源仓库管理系统。它提供了一个集中化的平台,使开发人员能够有效地存储、共享和发布各种类型的软件包。Nexus Repository 支持多种主流技术栈,并具有强大的安全性和可扩展性。通过使用 Sonatype Nexus Repository,团队可以更好地控制其软件构建过程,并确保高质量和稳定性的交付。
by ChatCPT
Nexus3 私服文件下载至本地的用途是什么?
- 比如我们要将
Nexus3
私服中的依赖包制品,进行迁移
,因 Nexus3 基于 BlobStore 技术实现对文件的落盘存储,无法在对应节点中直接看到制品文件,此时则需要通过一些手段进行转换取出,虽然可以通过网页一个一个点击下载,但如果下载制品数量过多,则不会是个过于明智的选择。迁移的场景也有很多种,如:
- 迁移至其他实例,或离线环境
- 需要更换到其他类型的存储库如:
JFrog
文件下载至本地
下面所展示的方法,使用到了 Nexus3 的API 进行实现,具体可参考如下文档:
下述脚本,对特殊类私服未做测试如 Docker
, 目前已测试支持,且通过
的私服类型有: Maven
、NPM
、PYPI
、RAW
。
脚本如下
使用说明,更改如下变量为你实际的
- NEXUS_USER: 实例用户名
- NEXUS_PASS: 实例密码
- NEXUS_URL: 实例URL
- NEXUS_REPO: 需要下载至本地的私服地址
使用前还需确保已经安装了 jq
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#!/bin/bash
NEXUS_USER='admin'
NEXUS_PASS='xxxx'
NEXUS_URL="https://$NEXUS_USER:$NEXUS_PASS@nexus.treesir.pub"
NEXUS_REPO='static-file'
# ---
cToken=''
count=0
DOWNLOAD_PATH=${NEXUS_REPO}
NEXUS_HTTP_URL=$(echo $NEXUS_URL|sed "s|$NEXUS_USER:$NEXUS_PASS@||g")
function assetsPage(){
if [ "${count}" -eq 0 ];then
JSON=`curl -X 'GET' "${NEXUS_URL}/service/rest/v1/assets?repository=${NEXUS_REPO}" -H 'accept: application/json' 2>/dev/null`
else
JSON=`curl -X 'GET' "${NEXUS_URL}/service/rest/v1/assets?repository=${NEXUS_REPO}&continuationToken=${cToken}" -H 'accept: application/json' 2>/dev/null`
# cToken=''
fi
if [ -n "${JSON}" ];then
cToken=`echo "${JSON}"| jq .continuationToken |sed "s|\"||g"`
else
exit 1
fi
if [ -n ${cToken} ];then
echo "${JSON}"| jq .items[].downloadUrl | sed "s|\"||g"
let count++
assetsPage
elif [ "${cToken}" == 'null' ];then
echo "${JSON}"| jq .items[].downloadUrl | sed "s|\"||g"
fi
}
function downAssetsUploadAssets(){
for URL in $(assetsPage);do
UPLOAD_URL=$(echo "$URL"|sed "s|${NEXUS_HTTP_URL}/repository/${NEXUS_REPO}/||g")
if [ ! $(echo "${UPLOAD_URL}"|grep '/'|wc -l) -eq 0 ];then
mkdir -p ./${DOWNLOAD_PATH}/"${UPLOAD_URL%/*}"
wget --no-check-certificate -O "./${DOWNLOAD_PATH}/${UPLOAD_URL}" "${URL}" >> download.log 2>&1
else
mkdir -p "${SOURCE_REPO}"
wget --no-check-certificate -O "./${DOWNLOAD_PATH}/${UPLOAD_URL}" "${URL}" >> download.log 2>&1
fi
done
}
# assetsPage
downAssetsUploadAssets
|
使用效果展示
总结
通过上面这个脚本就可以轻松一键的将文件转储下载至本地了,后面我再更新一下如何将 Maven
、NPM
、PYPI
、RAW
这类私服制品文件,迁移
上传至其他实例
或平台中,比如: JForg
。