사용자 도구

사이트 도구


nexus

SonaType Nexus

설정시 주의점

  • gradle이나 maven이 Nexus에 요청을 보낼때 GET이 아닌 HEAD 요청을 보내 파일의 존재 여부를 체크하는 경우가 있는데, 이때 nginx 1.2 버전에서 HEAD + gzip 설정이 돼 있을 경우 HEAD에 body 까지 담아 보내는 버그가 있어서 파일 다운로드 체크가 올바로 안되는 현상이 발생함. nginx gzip - gzip 을 꺼버려서 해결. 혹은 nginx을 1.4 이상으로 업그레이드 할 것.
  • Maven Central 리포지토리 설정에서 HTTP Request Settings 조절안하면 존재하지 않는 파일에 대한 요청을 무한히 기다리는 현상이 발견됨.
    • Request Timeout : 3 초로 조정.
    • Request Retry Attemps : 3 회로 조정.

Proxy 설정

  • Proxy 설정 후 Public Repository에 추가해줘야 public 주소 하나로 접근 가능하다.

jcenter.bintray.com 과 Github Raw Repository

  • Nexus 를 리포지토리로 사용할경우 Github 리포지토리를 Proxing 할 때 설정을 주의해야 한다.
  • Proxy로 설정한다.
  • Remote Repository Access > Download Remote Indexesfalse로 지정한다.
  • Remote Repository Access > Auto blocking activefalse로 지정하고 Refresh한다.
    • Repository StatusAttempting to Proxy and Remote Unavailable 로 변한다.

Snapshot buildNumber 안 맞는 문제

SNAPSHOT을 배포했는데, 아래처럼 buildNumber(아래에서는 2)와 실제 파일의 빌드넘버(아래에서는 1)로 안 맞는 경우가 발생했다.

<?xml version="1.0" encoding="UTF-8"?>
<metadata modelVersion="1.1.0">
  <groupId>some.group.id</groupId>
  <artifactId>some-artifact</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <versioning>
    <snapshot>
      <timestamp>20140208.121756</timestamp>
      <buildNumber>2</buildNumber> <!-- 이 부분. buildNumber = 2 -->
    </snapshot>
    <lastUpdated>20140208121803</lastUpdated>
    <snapshotVersions>
      <snapshotVersion>
        <classifier>javadoc</classifier>
        <extension>jar</extension>
        <value>0.0.1-20140208.121756-1</value> <!-- 실제로는 1 -->
        <updated>20140208121756</updated>
      </snapshotVersion>
    </snapshotVersions>
  </versioning>
</metadata>

아때 Nexus 리포지토리에서 해당 아티팩트를 선택하고 Rebuild Metadata를 했더니 정상으로 변경되었다.

Nexus v2 Rest API

# maven-metadata.xml URL을 group/artifact 에 따라 달라짐
wget -O - -o /dev/null https://repo1.maven.org/maven2/org/brutusin/wava/maven-metadata.xml | grep -Po '(?<=<version>)([0-9\.]+(-SNAPSHOT)?)' | sort --version-sort -r| head -n 1
# 혹은 curl 로
curl -s https://repo1.maven.org/maven2/org/brutusin/wava/maven-metadata.xml | grep -Po '(?<=<version>)([0-9\.]+(-SNAPSHOT)?)' | sort --version-sort -r| head -n 1
 
last_version=$(wget -O - -o /dev/null http://nexus.myrepo/content/repositories/releases/myjar/maven-metadata.xml | grep -Po '(?<=<version>)([0-9\.]+(-SNAPSHOT)?)' |
sort --version-sort -r| head -n 1)
 
# snapshot 의 최신 빌드를 확인하려면 - last_version 을 안다고 했을 때
curl -s "https://repo1.maven.org/maven2/org/brutusin/wava/${last_version}-SNAPSHOT/maven-metadata.xml" | grep -Po '(?<=<value>)([0-9\.\-]+)' | sort --version-sort -r | head -n 1
# 서버 상태
http -a admin:admin123 -v "http://[서버]/service/local/status"
 
# 최신버전. r=리포지토리ID, g=그룹명, a=아티팩트ID, e=jar|war 등. 잘 작동안함.
http -a admin:admin123 "http://[서버]/service/local/artifact/maven/content?r=repoId&g=groupName&a=art&e=jar&v=LATEST"
 
# 최신버전 curl 잘 작동안함
curl -u "admin:admin123 http://[서버]/service/local/artifact/maven/content?r=repoId&g=groupName&a=art&e=jar&v=LATEST" -o art.jar
 
# 특정 버전 명시 curl : 특정버전 명시할 때는 잘 작동함.
## r=snapshots, v=1.0.1-SNAPSHOT 형태로 스냅샷을 지정하면 스냅샷도 잘 받아짐.
curl -u "admin:admin123 http://[서버]/service/local/artifact/maven/content?r=repoId&g=groupName&a=art&e=jar&v=VERSION" -o art.jar
nexus.txt · 마지막으로 수정됨: 2019/06/12 15:35 저자 kwon37xi