티스토리 뷰

DevOps/System&Tools

nexus

Jacob_baek 2019. 11. 12. 10:09

Nexus를 통한 maven/npm dependency install 혹은 deploy 에 artifact 배포하는 방법에 대하여 알아보자.

실제 환경은 Local VM으로 Nexus를 구성하였고 Nexus3 를 사용하였다.

maven

우선 기본 구성은 다음과 같은 Repository를 가지고 있다.

우리가 구성할 환경은 Remote Repository 환경으로 type은 proxy와 hosted 두가지 방식을 모두 사용할 예정이다.

proxy는 dependency install에서 사용되고 hosted의 경우는 snapshot deploy에 사용될 예정이다.

 

remote repository의 경우 다음 두가지 파일의 설정을 통해 remote repository에 대한 설정을 진행할 수 있다.

  • maven project 의 pom.xml
  • ~/.m2/settings.xml

실제로 앞에서 언급한것과 같이 다음과 같은 목적들로 사용이 될 것이며 각각 추가해야 하는 내용이 다르다.

  • Dependency install
  • Deploy

Dependency 

dependency의 경우 mirrors 를 settings.xml에 추가해야 한다.

아래는 예제 settings.xml 이다.

<settings>
  <mirrors>
    <mirror>
      <id>maven-public</id>
      <mirrorOf>*</mirrorOf>
      <url>http://192.168.56.2:8081/repository/maven-public/</url>
    </mirror>
  </mirrors>
  <servers>
    <server>
      <id>maven-public</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
  </servers>
</settings>

 

실제 mvn clean install 명령을 통해 dependency에 대한 업데이트를 수행해보면 다음과 같이 지정한 repository로 부터 downloading을 수행함을 확인할 수 있으며

이와 함께 nexus에서 browsing해보면 관련 파일들이 확인되어 진다.

Deploy

deployment의 경우 server 를 settings.xml에 추가하고 distributionManagement를 pom.xml에 추가해야 한다.

    <distributionManagement>
        <repository>
            <id>maven-release</id>
            <url>http://192.168.56.2:8081/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>maven-snapshot</id>
            <url>http://192.168.56.2:8081/repository/maven-snapshots/</url>
        </snapshotRepository>
    </distributionManagement>
<settings>
  <servers>
    <server>
      <id>maven-snapshot</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
    <server>
      <id>maven-release</id>
      <username>admin</username>
      <password>admin123</password>
    </server>
  </servers>
</settings>

여기서 settings.xml ID값과 pom.xml ID가 동일해야 인증이 정상적으로 이루어진다.

 

npm

npm의 경우 아래와 같은 repository를 생성한다. maven과 달리 기본으로 생성되어 있지 않으니 아래 정보를 참고하여 생성한다.

 

proxy의 경우 URL을 https://registry.npmjs.org/ 로 사용한다.

이후 registry 정보와 인증정보를 아래와 같이 추가한다.

package.json

  ...
  },
  "publishConfig": {
    "registry": "http://192.168.56.2:8081/repository/npm-hosted/"
  }
}

.npmrc

registry=http://192.168.56.2:8081/repository/npm-group/
_auth=YWRtaW46YWRtaW4xMjM=

 

검색해보면 알겠지만 일반적으로 base64 결과를 _auth에서는 사용된다.

하여 echo -n "admin:admin123" | openssl base64 와 같은 명령을 통해 base64로 인코딩된 값을 확인하여 추가한다.

 

마지막으로 npm install 을 수행해보면 관련된 package를 받아오는 것을 확인할 수 있고 그에 맞는 package list가 아래와 같이 확인된다.

만약 npm E401이 지속적으로 발생될 경우 

1차로 npm cache clean 후 다시 시도해보고 그래도 동일한 증상이 발생된다면 아래와 같이 Realms 항목에 npm Bearer Token Realm에 대한 확인을 해보고 Active로 안되어 있는 경우 추가한다.

 

Docker

 

docker registry용으로 사용할 경우 아래 링크를 참고한다.

https://blog.sonatype.com/using-nexus-3-as-your-repository-part-3-docker-images

 

참고로 nexus의 docker registry가 정상동작하는지 확인하기위해서는 다음과 같은 명령을 수행해보면 확인이 가능하다.

curl -X GET http://192.168.100.100:5001/v2/_ping

 

참고사이트

https://blog.sonatype.com/using-nexus-3-as-your-repository-part-1-maven-artifacts

https://blog.sonatype.com/using-nexus-3-as-your-repository-part-2-npm-packages

https://javacan.tistory.com/entry/%EA%B8%B0%EC%96%B5%EC%9A%A9-Maven-%EC%A4%91%EC%95%99-%EB%A6%AC%ED%8F%AC%EC%A7%80%ED%86%A0%EB%A6%AC-%EB%A7%8C%EB%93%A4%EA%B3%A0-Maven-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

'DevOps > System&Tools' 카테고리의 다른 글

variables in Jenkinsfile  (0) 2019.11.22
Jenkinsfile validator  (0) 2019.11.20
k3s integrated with GitLab  (0) 2019.10.03
dynamic inventory  (0) 2018.07.24
ansible cisco  (0) 2017.09.28
댓글
댓글쓰기 폼