내부망에서 대량의 라이브러리 파일을 중복 없이 한 번에 Nexus에 업로드한 작업을 정리
인터넷에 접속할 수 있는 상황이라면 이미 잘 구축된 repo를 사용하기 때문에 큰 문제가 되지 않는다.
예를 들어, maven을 쓴다면 pom.xml만 잘 작성해줘도 대부분의 문제는 해결된다.
하지만 인터넷이 제한된 내부망에서는 이야기가 달라진다.
개발을 위해 필요한 라이브러리를 땡겨올 수 없기 때문에 사설 repo를 구축해야 한다.
라이브러리가 한 두개도 아니고,, 엄청 많아서 수동으로 업로드할 엄두도 안 난다.
그리고 직접 수동으로 업로드하면 빼먹기도하고 중복 업로드를 할 가능성도 있다.
(다행히 수동으로 중복 업로드한다고 해서 큰 문제가 생기지는 않았다. 나도 알고싶지 않았던 사실이다......)
이럴 때 bulk upload를 사용하면
1. 중복된 라이브러리도 에러없이 다음 작업으로 넘어갈 수 있고
2. 동일한 이름이지만 버전이 다른 라이브러리 파일도 버전별로 잘 구분해서 업로드 할 수 있다.
전체적인 흐름은 아래의 블로그를 참조했다.
참조
Nexus가 설치된 호스트 서버에 접속하여 미리 준비한 라이브러리 파일을 올려 놓는다.
라이브러리 파일은 기존에 사용하던 Nexus혹은 로컬 환경의 repo 등등 다양한 소스에서 가져올 수 있겠다.
다음의 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파일은 업로드하고자 하는 라이브러리 폴더와 같은 경로에 위치시켰다.
라이브러리 파일의 경로와 shell파일의 권한을 체크한다.
만약 접근, 실행 권한이 없으면 정상적으로 작동하지 않을 수 있다.
권한을 엄격하게 부여하지 않을 경우 그냥 chmod 755 [file or path]
로 설정해도 무방할 것 같다.
3번까지 준비가 다 되었으면 shell 파일을 실행시켜 bulk upload를 시작한다.
.mavenimport.sh -u [admin account] -p [password] -r http://localhost:[nexus포트]/repository/[repo이름]
이제 Nexus repo에 접속해서 라이브러리가 잘 업로드 되었나 확인한다.
끝
작업 후 궁금한 점..
Nexus에 jar, pom등을 업로드하는데 이 라이브러리들은 넥서스 호스트 서버에 jar, pom형태로 올아가는게 아니라, 변형되어서 업로드되고 이에 대한 메타정보만 갖고있는 것 같다. 서버내에서 파일명으로 jar, pom을 검색해도 찾을 수 없었다.