top bar

글 목록

2015년 11월 11일 수요일

[MAVEN] Sonatype Nexus + Maven + Jenkins 배포환경 구성

1. 개요


 유지보수 업무를 하는 중, 여러 컴포넌트들이 공통적으로 쓰는 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.gz
wget으로 먼저 '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' 탭을 열어보면 방금 빌드한 라이브러리가 배포된 것을 볼 수 있다.

이것으로 완료 되었다!


댓글 1개:

  1. 회사원 입니다. 오래전 쓰신글이 제게 큰 도움이 됐습니다. 정말 감사 드립니다.

    답글삭제