Nexus 소개&설치

2015. 11. 24. 17:02OS/개발환경구축

어제 급하게 필요로 해서 설치를 하면서 정리를 했다.
사내 배포도 완료되었고, 나중에 까먹으면 보려고 , 이것저것 짜집기하면서 내가 진행한 시행착오등등도 기재 했습니다.


목차
  1. Nexus 소개
  2. Nexus Repository의 용도와 목적 그리고 종류
  3. Nexus 다운로드/설치
  4. Nexus 실행/중지/재시간/로그
  5. Nexus 접속/계정
  6. Public Repositories Group
  7. Proxy Repository
  8. 3rd party Repository (Deploy/Use)
  9. Deploying Jar file to Nexus
  10. Using jar file from Nexus


1. Nexus 소개

Maven에서 사용 할 수 있는 Repository 입니다.

장점으로 외부에서 dependency를 끌어오는 수고를 덜고local nexus proxy(cache)로 사용함으로써 빠르게 라이브러리를 끌어 올 수 있고,
개발팀에서 사용하는 공용 라이브러리를 local nexus에 배포해서 팀간에 공유할 수 있습니다.

사용자 계정을 통해서 repository에 대한 접근 정책을 정의할 수 있다.


2. Nexus Repository의 용도와 목적 그리고 종류


repository는 용도와 목적에 따라 몇 가지로 나눌 수 있다.
Nexus는 다수의 central repository들을 관리할 수 있으며 Proxy 개념을 통해 개발자들에게 보다 쉬운 repository 연동 편의성을 제공한다.
 
1. snapshots (snapshot은 같은 버전으로 여러 번 배포가 가능 (개발시에 자주 바뀌므로 ..) )빌드 등 수시로 릴리즈 되는 바이너리를 배포하는 장소
2. Release (release는 같은 버전으로 한번 밖에 배포할 수 없음)(다시 배포하려면 서버에서 지우고 배포))정식 릴리즈를 통해 배포되는 바이너리를 저장하는 장소
3. 3rd Party벤더들이 배포하는 바이너리를 저장해 놓은 저장소로 특정 솔루션들을 사용할 때, 딸려오는 라이브러리 등을 여기에 놓고 사용한다. 
4. Proxy Repository 프록시 저장소는 외부에 있는 메이븐 공개 저장소에 대한 프록시 역활을 하는 저장소 이다.Central 이라는 이름으로 메이븐 중앙 저장소가 이미 추가 되어 있으며, 대략적인 개념은 우측 그림 참고원격에 원본 repository가 있는 경우, Local에 캐쉬 용도로 사용한다.
5. Virtual Repository 넥서스에 이미 설정되어 있는 저장소에 대하여 다른 URL로 접근 할 수 있도록 지원하기 위한 논리적인 저장소 이다. Repository Group은 몇 개의 repository를 하나의 repository로 묶어서 단일 접근 URL를 제공한다.

* 저장소 그룹 :  넥서스에 설정한 저장소 그룹이다.    
프로젝트가 진행되면서 의존관계에 있는 라이브러리가 증가하면서, 외부 저장소도 증가하는데, 이 저장소 그룹에다 추가되는 외부 저장소를 추가하면
 메이븐의 설정파일 변경 없이 의존 관계를 확장할 수 있다.


3. Nexus 다운로드/설치

Nexus 설치 해보자 http://www.sonatype.org/nexus/

nexus 심볼릭 링크도 만들고….

$ sudo cpnexus-2.11.4-01-bundle.tar.gz /usr/local

$ cd /usr/local

$ sudo tar xvzf nexus-2.11.4-01-bundle.tar.gz

$ sudo ln -s nexus-2.11.4-01 nexus


4. Nexus 실행/중지/재시간/로그

네티로구성된 웹 서버가 가동을 위해서는 아래에서 명령을 하세요.

실행(start)… 중지(stop), 재시작(restart)

$ cd /usr/local/nexus

$ ./bin/nexus console

$ Starting Nexus Repository Manager...
$ Started Nexus Repository Manager.

$ tail -f logs/wrapper.log


포트 정보 등을 변경은 /conf/nexus.properties  에서

# Jetty section

application-port=8081

application-host=0.0.0.0

nexus-webapp=${bundleBasedir}/nexus

nexus-webapp-context-path=/nexus

# Nexus section

nexus-work=${bundleBasedir}/../sonatype-work/nexus

runtime=${bundleBasedir}/nexus/WEB-INF

5. Nexus 접속/계정

  • 접속 주소 : http://localhost:38081/nexus/
  • 최초 생성시에는 ID: admin / pw : admin123 로 기본값으로 설정됨.
  • 왼쪽 메뉴상에서 Repositories 를 클릭하면 각종 저장소가 보입니다


6. Public Repositories Group

Public Repositories라는 repository 그룹에 local repository (Releases와 Snapshots, 3rd party) 와 proxy repository 등이 등록되어 있습니다.

아래도 추가해 넣어주시면 감사!


7. Proxy Repository

Proxy Repository Remote Repository의 내용들에 대한 라이브러리 목록(index)를  Local Caching 할 수 있도록 되어 있다.

이렇게 하면 nexus proxy repository에 실제 바이너리가 내려와 있지 않더라도, 목록이 미리 내려와 있기 때문에 nexus search 기능을 통해 검색이 가능하다.

"Maven Central Repository" "Central" repository를 설정해보자.

"Central repository"를 선택한 후 메뉴에서 "Download Remote indexes" 라는 옵션을 True 로 변경하고 Save 한다.

상단 테이블에서 "Central" repository를 선택한 후 오른 쪽 버튼을 눌러 "update index"를 실행하면,원격 maven repository에서 라이브러리 목록을 읽어서 업데이트 됨.

업데이트 되면 "Browse index" 메뉴에서 라이브러리 목록이 새롭게 업데이트 되어 있는 것을 확인 할 수 있다.

Maven에서 local nexus Proxy(Cache) repository로 설정

$MAVEN_HOME/.m2/setting.xml  파일에서 <mirrors> section 에 아래 내용을 추가 한다. (만약 없으면 만들면 된다)

여기서는 mirrors 만 주의 깊게 보고,  다음 장에 사내에서 생성된 jar 파일을 nexus 서버에 deploy 할때사용할 서버 설정이라는 것만 알아두자.

<settings xmlns="http://maven.apache.org/POM/4.0.0"

   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/settings-1.0.0.xsd">
   <mirrors>
      <mirror>
          <id>nexus</id>
          <mirrorOf>*</mirrorOf>

          <name>Local nexus repository.</name>

          <url>http://localhost:8081/nexus/content/groups/public/</url>

     </mirror>
   </mirrors>

<servers>       

       <server>

            <id>test-release</id>

            <username>admin</username>

            <password>1111</password>

        </server>
        <server>
                <id>test-snapshots</id>
                <username>
testuser</username>
                <password>test</password>
        </server>
</servers>

</settings>



Maven settings.xml를 반영을 해야 한다. Ci서버든지 본인의 IDE 에 설정을 맞춰 준다.
설정이 끝난 후, maven 빌드를 수행하면 maven script 가 원격지가 아닌 local 에 있는 nexus repository를 통해 다운로드 받는 것을 확인 할 수 있다.


8. 3rd party Repository (Deploy/Use)

프로젝트에서 사용하는 3rd party 라이브러리들이나 프로젝트에서 생성한 war, jar 등의 패키징된 Maven artifact들을 Nexus Repository 등록하여 사용한다.
upload하기 위한 Repository 선택하고, 3rd Party를 선택 하고, Artifact Upload를 클릭합시다.

à 여기에서는 3rd party Repository 상에   XPayClient.jar  요걸 등록 해 봅니다.
Depency와 더불어 아래 repositories 상에 repository를 등록 해주면, 깔끔하게 해당 jar 파일을 가져오시게 된다.

<dependency>

    <groupId>net.lgdacom.xpayclient</groupId>

    <artifactId>xpayclient</artifactId>

    <version>1.0</version>

</dependency>

<repositories>

    <repository>

        <id>nexus-3rdparty</id>
        <name>3rdparty</name>

        <url>http://localhost:8081/nexus/content/repositories/thirdparty/</url>

    </repository>

</repositories>


9. Deploying Jar file to Nexus

이번에는 생성한 jar 파일을 nexus에 올려 보는 것을 진행 해봅시다

 - settings.xml에 배포 서버 정보(계정 정보를 입력해야 한다.)

  • 여기에서 serverid,  .m2/settings.xml 에 있는 정보를 가져오는 것이지요 .(앞에서 설명한)
  • 이때 주의해야 할 점은 settings.xml 파일에 설정한 <server><id> pom.xml 에 설정한 <repository><id> 값이 일치해야 한다는 점이다.


<servers>

        <server>

            <id>test-release</id>

            <username>admin</username>

            <password>11111</password>

        </server>

        <server>

                <id>test-snapshots</id>

                <username>testuser</username>

                <password>test</password>

        </server>

</servers>

 snapshot release repository를 설정 해야 하며 id는 각 repository 생성시 적었던 id를 입력 한다.

  그리고 username/password는 앞에서 등록한 사용자 계정을 입력한다. ( repository 권한을 가지고 있는 계정 )


9. Deploying Jar file to Nexus

pom.xml snapshot, release 서버 정보를 입력해야 한다.

<modelVersion>4.0.0</modelVersion>

<groupId>com.eeee.aaaa</groupId>

<artifactId>eeee.aaaa </artifactId>

<version>1.0.0-SNAPSHOT</version>

    <distributionManagement>

        <repository>

            <id>releases</id>

            <url>http://localhost:8081/nexus/content/repositories/releases/</url>

        </repository>

        <snapshotRepository>

            <id>snapshots</id>
            <url>http://localhost:38081/nexus/content/repositories/snapshots/</url>

        </snapshotRepository>

    </distributionManagement>

" <version>1.0.0-SNAPSHOT</version>"

버전에 SNAPSHOT 이라고 하면 snapshot repository로 배포가 되고, 이걸 빼면 release 에 배포가 됩니다.

snapshot은 같은 버전으로 여러번배포가 가능하며(개발 시에 자주 바뀌므로 ..)

release는 같은 버전으로 한번 밖에 배포할 수 없다.(다시 배포하려면 서버에서 지우고 배포)


다음에 maven goal에는 deploy 로 진행을 한다.

'deploy' 를 입력하면 deploy phase 메이븐에 기본적으로 내장된 'maven-deploy-plugin' 이 수행되면서

<distributionManagement> 에 설정된 저장소로 배포하게 된다.

이때 profile 마다 <distributionManagement> 설정을 바꿔 다른 저장소로 배포하게 하면 개발 환경에 따라 저장소를 달리해서 구분하여 관리할 수 있다.



10.Using jar file from Nexus

pom.xml maven repository 정보를 입력하고 잘 사용하시면 되겠습니다.


<dependency> 
    <groupId>com.eeee.aaaa</groupId>
    <artifactId>eeee.aaaa </artifactId>
    <version>1.0.0-SNAPSHOT</version>

</dependency>

<repositories>

    <repository>

        <id>nexus-snapshot </id>
        <name>snapshot</name>
        <url>http://localhost:8081/nexus/content/repositories/ snapshot/</url>

    </repository>

</repositories>


참고 : 

https://books.sonatype.com/nexus-book/reference/staging-deployment.html
http://bcho.tistory.com/790
http://lahuman.jabsiri.co.kr/m/post/81

끝!!!!!