nexus3

들어가며

산출물 버전 형상 관리도 중요하지만, 현재 가장 필요한 것으로 Dependency 관련하여 필요성이 있어서 구축되었습니다.

CMS의 경우 common-module 이나, 라이센스 정책에 의해 비공개 된 JDBC 드라이버를 (예를 들면 oracle, mssql) 사용 중에 있어서 이를 관리해야 함으로 dependency proxy 목적으로 운영할 예정입니다.

대부분 Nexus2 가 범용적으로 알려져 있지만, Nexus3에는 java archive 외에도 docker image나 npm 도 지원함으로 nexus3 를 구축하였습니다.

구축 설치

Docker image로 빠르게 구축할 수 있습니다. Official Guide

docker pull sonatype/nexus3

권한 그룹이 200인 것은 nexus-data 에서 200으로 사용하기 때문.

chown -R 200:200 ~~~~/nexus-data

docker run -d -p 18081:8081 -v ~~~~~/nexus-data:/nexus-data --name my-nexus sonatype/nexus3

Type

레포지토리는 기본적으로 3개의 Type을 가집니다.

현재 구성된 repo 리스트업은 아래와 같습니다.

접근 정책

기본적으로 미인증 된 계정은 repository에 접근할 수가 없게 구성할 수 있습니다. Admin 권한이 있는 사용자에게 요청하여 계정을 생성 받아야 정상적으로 사용가능합니다.

    config(톱니모양) 아이콘 > security > anoymous > Allo anno~~~ access the server 의 체크 해제.

소스 코드 레벨에서 Repository 설정(Maven 기준)

  1. ${user_home}/.m2/settings.xml 생성.

기본적으로 maven 은 .m2/settings.xml 이 있으면, 해당 파일을 로드 합니다. 이 파일은 repository 관련 경로/계정 등의 환경 설정을 할 수 있습니다.

기본적으로 제가 사용하는 settings.xml 은 아래와 같습니다.

  1. pom.xml 에 아래를 추가

전 보통 snapshotRepository 와 repository 의 각각의 태그에 설정합니다. 이렇게 해두면, version 명이 SNAPSHOT 으로 끝나면 알아서 snapshot repository 로 push 할 수 있습니다.

좀 더 디테일하게, profile 별로 deploy 를 다르게 하고 싶다면

    <profile> .. </profile>

안에서도 선언 할 수 있습니다. 이 경우 당연히 해당 profile context에 종속이 됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<project ....>
    ...

    <distributionManagement>
        <snapshotRepository>
        <id>snap</id>
        <url>http://127.0.0.1:18081/repository/maven-snapshots/</url>
        </snapshotRepository>
        <repository>
        <id>rel</id>
        <url>http://127.0.0.1:18081/repository/maven-releases/</url>
        </repository>
    </distributionManagement>

      <repositories>
        <repository>
            <id>public</id>
            <url>http://127.0.0.1:18081/repository/maven-public/</url>
        </repository>
    </repositories>
    ...
</project>