Nexus repository bulk upload

zuckerfrei·2022년 12월 22일
0

요약

내부망에서 대량의 라이브러리 파일을 중복 없이 한 번에 Nexus에 업로드한 작업을 정리


언제 필요할까?

인터넷에 접속할 수 있는 상황이라면 이미 잘 구축된 repo를 사용하기 때문에 큰 문제가 되지 않는다.
예를 들어, maven을 쓴다면 pom.xml만 잘 작성해줘도 대부분의 문제는 해결된다.

하지만 인터넷이 제한된 내부망에서는 이야기가 달라진다.
개발을 위해 필요한 라이브러리를 땡겨올 수 없기 때문에 사설 repo를 구축해야 한다.

라이브러리가 한 두개도 아니고,, 엄청 많아서 수동으로 업로드할 엄두도 안 난다.
그리고 직접 수동으로 업로드하면 빼먹기도하고 중복 업로드를 할 가능성도 있다.
(다행히 수동으로 중복 업로드한다고 해서 큰 문제가 생기지는 않았다. 나도 알고싶지 않았던 사실이다......)

이럴 때 bulk upload를 사용하면
1. 중복된 라이브러리도 에러없이 다음 작업으로 넘어갈 수 있고
2. 동일한 이름이지만 버전이 다른 라이브러리 파일도 버전별로 잘 구분해서 업로드 할 수 있다.

어떻게?

전체적인 흐름은 아래의 블로그를 참조했다.
참조

1) 라이브러리 파일 준비

Nexus가 설치된 호스트 서버에 접속하여 미리 준비한 라이브러리 파일을 올려 놓는다.
라이브러리 파일은 기존에 사용하던 Nexus혹은 로컬 환경의 repo 등등 다양한 소스에서 가져올 수 있겠다.

2) shell 파일 작성

다음의 github repo를 참조하여 실행시킬 shell 파일을 작성한다. 참조
참고로 github repo의 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}/{} ;

shell파일은 업로드하고자 하는 라이브러리 폴더와 같은 경로에 위치시켰다.

3) 권한 체크

라이브러리 파일의 경로와 shell파일의 권한을 체크한다.
만약 접근, 실행 권한이 없으면 정상적으로 작동하지 않을 수 있다.

권한을 엄격하게 부여하지 않을 경우 그냥 chmod 755 [file or path] 로 설정해도 무방할 것 같다.

4) shell 파일 실행

3번까지 준비가 다 되었으면 shell 파일을 실행시켜 bulk upload를 시작한다.

.mavenimport.sh -u [admin account] -p [password] -r http://localhost:[nexus포트]/repository/[repo이름]

5) 확인

이제 Nexus repo에 접속해서 라이브러리가 잘 업로드 되었나 확인한다.


작업 후 궁금한 점..
Nexus에 jar, pom등을 업로드하는데 이 라이브러리들은 넥서스 호스트 서버에 jar, pom형태로 올아가는게 아니라, 변형되어서 업로드되고 이에 대한 메타정보만 갖고있는 것 같다. 서버내에서 파일명으로 jar, pom을 검색해도 찾을 수 없었다.

profile
무설탕 음료를 좋아합니다

0개의 댓글