首页 > 其他分享 >如何搭建一个纯离线的nexus3

如何搭建一个纯离线的nexus3

时间:2023-09-26 17:59:04浏览次数:40  
标签:url semaphore 离线 nexus3 session import download async 搭建

Maven 篇

0. 在离线的nexus3服务器上创建所需的本地依赖仓库。(如果已经创建了依赖仓库文件夹,这个步骤可以忽略)-登录具有创建仓库权限的用户,这里使用默认用户admin示范。

创建新的仓库
创建新的仓库

选择hosted格式的maven2仓库
选择hosted格式的maven2仓库

选择允许依赖的要求,其他默认
选择允许依赖的要求,其他默认

1. 准备所需的依赖文件-主体的思想就是将项目所需的依赖jar包先下载好,然后使用脚本提交到离线的nexus仓库

1.  方式一:先将项目在自己本地构建一遍,构建成功后将使用的本地仓库打包,复制到nexus服务器上,或者能访问到nexus的主机.

2. 创建脚本

创建脚本

# 创建脚本
vim mavenimport.sh

写入脚本命令

#!/bin/bash
# copy and run this script to the root of the repository directory containing files
# this script attempts to exclude uploading itself explicitly so the script name is important
# Get command line params
while getopts ":r:u:p:" opt; do
	case $opt in
		r) REPO_URL="$OPTARG"
		;;
		u) USERNAME="$OPTARG"
		;;
		p) PASSWORD="$OPTARG"
		;;
	esac
done

find . -type f -not -path './mavenimport\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{} ;

3. 执行脚本

将上传到服务器的文件解压,进入文件夹内部
执行如下命令,记得替换[]中的内容

mavenImport.sh -u [nexus3账户] -p [nexus3密码] -r http://[IP]:[端口]/repository/[仓库名称]/

npm 篇

0. 创建npm仓库,步骤同上,展示创建配置,悬着npm类型的仓库

配置展示
配置展示

1. 现在本地打包构建,获取到package-lock.json,或者 yarn-lock.json

2. 根据获取到的文件,执行下列Python脚本,进行下载对应的npm包。

npm 执行如下脚本

import os
import re
import aiohttp
import asyncio
from urllib.parse import urlparse
from concurrent.futures import ThreadPoolExecutor

# 创建存储文件夹
download_folder = "sourcenpm"
os.makedirs(download_folder, exist_ok=True)

# 读取文件内容
with open("pack.json", "r") as file:
    content = file.read()

# 使用正则表达式匹配resolved字段的值
pattern = r'"resolved":\s+"(https:\/\/[^"]+\.tgz)"'
matches = re.findall(pattern, content)

# 异步下载函数
async def download_file(session, url):
    async with session.get(url) as response:
        if response.status == 200:
            parsed_url = urlparse(url)
            filename = os.path.basename(parsed_url.path)
            full_filename = os.path.join(download_folder, filename)
            
            content = await response.read()
            with open(full_filename, "wb") as output_file:
                output_file.write(content)
            
            print(f"文件 {filename} 下载成功")
        else:
            print(f"无法下载文件 {url}")

async def download_with_semaphore(semaphore, session, url):
    async with semaphore:
        await download_file(session, url)

async def main():
    # 创建异步HTTP会话
    async with aiohttp.ClientSession() as session:
        semaphore = asyncio.Semaphore(8)  # 限制并发数为8
        tasks = []

        for url in matches:
            tasks.append(download_with_semaphore(semaphore, session, url))

        await asyncio.gather(*tasks)

    print("下载完成")

# 运行异步下载
if __name__ == "__main__":
    asyncio.run(main())

yarn 执行如下脚本

import os
import re
import aiohttp
import asyncio
from urllib.parse import urlparse
from concurrent.futures import ThreadPoolExecutor

# 创建存储文件夹
download_folder = "sourcenpm"
os.makedirs(download_folder, exist_ok=True)

# 读取文件内容
with open("yarn.lock", "r") as file:
    content = file.read()

# 使用正则表达式匹配resolved属性中的tgz下载链接
pattern = r'resolved\s+"(https:\/\/[^"]+\.tgz)'
matches = re.findall(pattern, content)

# 异步下载函数
async def download_file(session, url):
    async with session.get(url) as response:
        if response.status == 200:
            parsed_url = urlparse(url)
            filename = os.path.basename(parsed_url.path)
            full_filename = os.path.join(download_folder, filename)
            
            content = await response.read()
            with open(full_filename, "wb") as output_file:
                output_file.write(content)
            
            print(f"文件 {filename} 下载成功")
        else:
            print(f"无法下载文件 {url}")

async def download_with_semaphore(semaphore, session, url):
    async with semaphore:
        await download_file(session, url)

async def main():
    # 创建异步HTTP会话
    async with aiohttp.ClientSession() as session:
        semaphore = asyncio.Semaphore(8)  # 限制并发数为8
        tasks = []

        for url in matches:
            tasks.append(download_with_semaphore(semaphore, session, url))

        await asyncio.gather(*tasks)

    print("下载完成")

# 运行异步下载
if __name__ == "__main__":
    asyncio.run(main())

3. 上传下载好的文件,执行如下脚本

创建脚本

vim npmimport.sh

写入脚本内容

find . -type f -name '*.tgz'  | sed "s|^\./||" | xargs -I '{}' \
curl -u "$USERNAME:$PASSWORD" -X 'POST' -v \
  ${REPO_URL} \
  -H 'accept: application/json' \
  -H 'Content-Type: multipart/form-data' \
  -F 'npm.asset=@{};type=application/x-compressed' ;

将上传文件解压,将脚本放入需要上传的根目录中,执行如下命令执行上传

./npmimport.sh -u [nexus3账号] -p [nexus3密码] -r http://[ip]:[端口]/service/rest/v1/components?repository=[仓库名称]

标签:url,semaphore,离线,nexus3,session,import,download,async,搭建
From: https://www.cnblogs.com/abelkeith/p/17730800.html

相关文章

  • 视频融合平台EasyCVR如何使用视频监控系统搭建森林防火与人车管理系统解决方案
    安防视频监控平台EasyCVR是一个具有强大拓展性、灵活的视频能力和轻便部署的平台。它支持多种主流标准协议,包括国标GB28181、RTSP/Onvif、RTMP等,还可以支持厂家的私有协议和SDK接入,例如海康Ehome、海大宇等设备的SDK。该平台不仅拥有传统安防视频监控的功能,还具备接入AI智能分析的......
  • 视频融合平台EasyCVR如何使用视频监控系统搭建电商货物可视化追溯解决方案
    安防视频监控平台EasyCVR是一个具有强大拓展性、灵活的视频能力和轻便部署的平台。它支持多种主流标准协议,包括国标GB28181、RTSP/Onvif、RTMP等,还可以支持厂家的私有协议和SDK接入,例如海康Ehome、海大宇等设备的SDK。该平台不仅拥有传统安防视频监控的功能,还具备接入AI智能分析的......
  • 项目搭建
    创建一个名为sasa的项目npmcreatevite@latestsaas安装路由cnpminstallvue-router@4-s选择vue+js在src下新建router/index.js import{createRouter,createWebHistory}from"vue-router"; importHomefrom"../views/Home.vue"; constroutes=[ { ......
  • Cobra眼睛蛇-强大的Golang CLI框架,快速上手的脚手架搭建项目工具,详细安装和使用
    Cobra眼睛蛇-强大的GolangCLI框架,快速上手的脚手架搭建项目工具,详细安装和使用。阅读过k8s源码的同学,应该都知道k8sScheduler、kubeadm、kubelet等核心组件的命令行交互全都是通过spf13写的Cobra库来实现。本文就来介绍下Cobra的相关概念及具体用法。关于Cobra是一个用于Go的CLI......
  • Linux CentOS 7.x离线安装PostgreSQL操作手册
    一、准备环节rpm-qa|greppostgres检查PostgreSQL是否已经安装rpm-qal|greppostgres检查PostgreSQL安装位置postgresql-12.2.tar.gz二、Pgsql数据库安装下载下载地址:http://www.postgresql.org/ftp/source/选择你你需要的版本,本次安装12.2的版......
  • vulhub靶场搭建
    配置Docker1、更新sudoapt-getupdate2、下载安装dockersudoaptinstalldocker.io中间碰到询问回复y 3、查看是否安装成功docker-v 4、安装docker-composeaptinstalldocker-compose 5、查看docker-compose安装是否成功docker-compose-v6、配置vulhub......
  • centos搭建rsync远程同步服务器
    rsync(remotesynchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用rsync同步本地硬盘中的不同目录。 rsync和scp的区别:rsync支持增量同步,不管是文件数量的新增还是文件内容的新增,scp不行注意事项:1、centos默认已经安装rsync了,输入命令rsync查......
  • 知识库搭建保姆级教程,如何从0到1完成知识库搭建
    在这个信息爆炸的时代,如何获取、整理和应用知识成为了我们个体价值和企业核心竞争力打造的重要表现,搭建一个高效的知识库可以提升我们企业的竞争力,必要时还能快速切换赛道,开展一个新的领域。 今天我们将结合HelpLook来与你一起探索如何从零开始构建个人知识库,干货满满,建议收藏! ......
  • Centos yum 下载全量依赖 rpm 包及离线安装
    简介通常生产环境由于安全原因都无法访问互联网。此时就需要进行离线安装,主要有两种方式:源码编译、rpm包安装。源码编译耗费时间长且缺乏编译环境,所以一般都选择使用离线rpm包安装。操作系统Centos7.9查看依赖包可以使用“yumdeplist”命令来查找rpm包的依赖列表。例如......
  • Hadoop环境搭建
    前言  Hadoop是一个开源的、可运行与Linux集群上的分布式计算平台,用户可借助Hadoop存有基础环境的配置(虚拟机安装、Linux安装等),Hadoop集群搭建,配置和测试。二、Linux系统安装1.环境准备Centos7镜像文件(mini)Centos7下载链接:https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.20......