유지보수 업무를 하는 중, 여러 컴포넌트들이 공통적으로 쓰는 core 클래스들을 라이브러리로 묶어, 사내 maven repository에 등록하여 사용할 필요성을 느꼈다. 하지만 사내 repository에 jar를 등록하는 방법은 아이디를 발급받아야 하는 등 절차가 어려웠다.. 기보다는 귀찮았다. 그래서 직접 'sonatype nexus' 를 활용하여 maven repository를 구축해보기로 하였다.
Let the working begin~
2. Sonatype Nexus 설치
이 작업은 소름돋을 정도로 쉽다. 예전엔 Nexus webapp을 다운받아, 따로 톰캣에 올려야했는데 요즘엔 jetty 기반의 WAS가 built-in 되어있는 컴포넌트로 릴리즈 되는것 같다.
아래 공식 웹사이트를 참고하자
http://www.sonatype.org/nexus/
참고로 nexus는 oss 와 pro 버전이 있는데, pro는 비용을 지불해야 하는 상용 버전이다. (pro도 기능에 따라 종류가 세분화 되는 듯 하다) 하지만 구지 pro 를 사용할 필요없이 oss 버전도 기본적인 repository management를 제공하기때문에 여기서는 oss 버전으로 진행한다.
1) download
$ wget --no-check-certificate https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.11.1-01-bundle.tar.gzwget으로 먼저 'tar' 파일을 다운받는다. 'https' 프로토콜 이기 때문에 '--no-check-certificate' 옵션을 잊지 말자
2) 압축해제
$ tar -xvzf nexus-2.11.1-01-bundle.tar.gz
3) 구동
bin]$ ./nexus start Starting Nexus OSS... Started Nexus OSS.
4) 접속
기본포트는 '8081'이며, /conf/nexus.properties 파일에서 변경할 수 있다
아래처럼 http://[server ip]:8081/nexus 로 접속한다
5) 둘러보기
우측 상단에 'Log In' 버튼을 눌러 로그인할 수 있는데, 기본적으로 관리자 계정으로 'admin' (비번 admin123) 을 제공한다.
왼쪽 메뉴의 'Repositories' 를 클릭하면 각종 저장소가 보인다.
저장소에는 3가지 유형이 있는데, 각각 아래와 같다.
- 프록시 저장소 (proxy) : 프록시 저장소는 외부에 있는 메이븐 공개 저장소에 대한 프록시 역할을 하는 저장소이다. 위 사진에서는 'Central' 이라는 이름으로 메이븐 중앙 저장소가 이미 추가가 되어있으며, 대략적인 개념은 아래와 같다. 말그대로 '대리자'인 셈이다.
- 호스티드 저장소(hosted) : 필자가 이 삽질을 하고 있는 이유다. 말그대로 사내에서 사용하는 라이브러리 관리 또는 3rd Party 라이브러리를 관리하기 위한 용도이다. 보면 알겠지만 기본적으로 'Release' , 'Snapshots' , '3rd party' 라는 저장소가 이미 추가되어있다.
- 버추얼 저장소(virtual) : 넥서스에 이미 설정되어 있는 저장소에 대하여 다른 URL로 접근 할 수 있도록 지원하기 위한 논리적인 저장소이다.
- 저장소 그룹(group) : 넥서스에 설정한 저장소의 그룹이다. 프로젝트가 진행되면서 의존 관계에 있는 라이브러리가 증가하면서 외부 저장소도 증가하는데, 이 저장소 그룹에다 추가되는 외부 저장소를 추가하면 메이븐 설정파일 변경 없이 의존 관계를 확장할 수 있다.
3. Maven 설정
이 작업 또한 매우 간단하다
1) .m2/settings.xml 파일 변경
아래처럼 <servers> 설정에 nexus 사용자 아이디와 비번을 설정한다.
. . . <server> <id>releases</id> <username>admin</username> <password>admin123</password> </server> </servers>
2) project pom.xml 파일 설정 추가
<distributionManagement> <repository> <id>releases</id> <url>http://[server ip]:8081/nexus/content/repositories/releases</url> </repository> </distributionManagement>
이때 주의해야 할점은 settings.xml 파일에 설정한 <server><id> 와 pom.xml 에 설정한 <repository><id> 값이 일치해야 한다는 점이다.
4. Jenkins 설정 및 Nexus로 배포하기
1) Jenkins 설정
Jenkins에서 해당 프로젝트를 빌드할때 maven goal을 'deploy'로 설정한다. 아래와 같다.
'profile' 매개변수는 빌드 환경에따라 다른 저장소로 (release/alpha) 배포하기 위해 설정한다. 'deploy' 를 입력하면 deploy phase에 메이븐에 기본적으로 내장된 'maven-deploy-plugin' 이 수행되면서 <distributionManagement> 에 설정된 저장소로 배포하게 된다.
이때 profile 마다 <distributionManagement> 설정을 바꿔 다른 저장소로 배포하게 하면 개발 환경에 따라 저장소를 달리해서 구분하여 관리할 수 있다.
2) 배포 하기
Jenkins Build를 수행한다. output console 로그를 보면 아래와 같이 해당 Nexus로 Uploaded 되었다는 내용이 출력 될 것이다.
3) Nexus에서 확인
해당 repository의 'Browse Index' 탭을 열어보면 방금 빌드한 라이브러리가 배포된 것을 볼 수 있다.
이것으로 완료 되었다!
회사원 입니다. 오래전 쓰신글이 제게 큰 도움이 됐습니다. 정말 감사 드립니다.
답글삭제