본문 바로가기
Nexus

Nexus bluk upload 방법 및 400, 405 에러 해결

by codeok 2024. 12. 25.
반응형

Nexus repository에 라이브러리를 올릴 때 미러링 방식이 아닌 수기로 N개를 올려야 한다면 시간이 많이 소요가 됩니다.

sonatype-nexus-community Github에는 bluk upload를 가능하게 하는 mavenimport.sh 쉘을 제공하고 있습니다.

mavenimport.sh 쉘을 통해서 Nexus bluk upload 하는 방법을 정리했습니다.

 

nexus-repository-import-scripts/mavenimport.sh at master · sonatype-nexus-community/nexus-repository-import-scripts

A few scripts for importing artifacts into Nexus Repository - sonatype-nexus-community/nexus-repository-import-scripts

github.com

 

해당 게시물에서는 Nexus에 대한 설치 방법은 다루지 않습니다.

Nexus 설치를 해야 한다면 하단 게시물을 참고해 주시면 감사하겠습니다.

 

윈도우 Docker 환경 nexus 설치

Nexus란 Sonatype라는 회사에서 만들었으며 내부망에서 사설 레지스트리로 구성해서 사용할 수 있는 저장소입니다. Nexus를 사용하는 이유는 자체적으로 개발한 라이브러리나 소프트웨어를 저장하

co-deok.tistory.com

 

mavenimport.sh 쉘 내용 및 사용 방법 

mavenimport.sh 쉘은 존재하는 위치에서 find 명령어로 현재 위치 폴더 및 파일을 전부 읽어서 mavenimport.sh과 일부 xml들을 제외하고 repository에 curl 명령어로 bluk upload를 가능하게 제공하는 쉘입니다.

 

사용 방법은 간단합니다.

파라미터로 USERNAME, PASSWORD, REPO_URL을 넘기면 됩니다.

쉘 실행이 정상적으로 되지 않으면 실행 권한(-x)을 부여해 주면 됩니다.

./mavenimport.sh -u USERNAME -p PASSWORD -r REPO_URL

 

실제 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}/{} ;

 

 

bluk upload 라이브러리 준비

mavenimport.sh 쉘과 bluk upload 할 라이브러리들을 준비해 주면 됩니다.

저는 spring-core, spring-jdbc, spring-web을 maven repository에서 다운 받아서 준비를 했습니다.

pom 및 sources.jar는 준비하지 않고 일반 jar만 준비했습니다. 

 

mavenimport.sh 쉘 실행 및 결과

mavenimport.sh은 하단 방법으로 USERNAME, PASSWORD, REPO_URL을 지정해주고 실행하면 됩니다.

sh mavenimport.sh -u admin -p helloworld -r http://localhost:8081/repository/maven-releases

 

mavenimport.sh을 실행하면 HTTP PUT 방식으로 curl 요청이 날아가는 것을 볼 수 있습니다.

정상적으로 등록이 되면 HTTP/1.1 202 Created 응답이 나오게 됩니다.

 

 

nexus 사이트에 들어가서 확인해 보면 N개의 라이브러리들이 정상적으로 등록되는 것을 볼 수 있습니다.

 

에러 해결 - 400 Invalid path for a Maven 2 repository

maven bluk upload를 진행하다가 400가 에러가 발생한다면 라이브러리 업로드 경로를 확인해 주시면 됩니다.

실제로 제가 업로드를 진행할 때도 spring의 경우는 버전 경로가 없으면 정상적으로 업로드가 되지 않고 400 에러가 발생했습니다.

  • 실패 : org/springframework/spring-core/spring-core-6.2.1.jar
  • 성공 : org/springframework/spring-core/6.2.1/spring-core-6.2.1.jar

 

 

에러 해결 - 405 PUT

maven bluk upload를 하다가 405 에러가 나오는 이유는 upload 할 REPO_URL을 group으로 설정을 했기 때문입니다. nexus Type group은 직접 PUT 요청(업로드)을 허용하지 않습니다.

nexus Type hosted로 되어있는 저장소 URL로 잘 설정했는지 확인해주셔야 합니다.

  • 실패 : sh mavenimport.sh -u admin -p helloworld -r http://localhost:8081/repository/maven-public
  • 성공 : sh mavenimport.sh -u admin -p helloworld -r http://localhost:8081/repository/maven-releases

 

감사합니다.

반응형

'Nexus' 카테고리의 다른 글

윈도우 Docker 환경 nexus 설치  (0) 2024.01.07