Jenkins Nexus 연동 설정
Jenkins 빌드에서
Could not find artifact에러가 발생한다면, Maven Central에 없는 사내 라이브러리를 참조하고 있을 가능성이 높습니다.
사내 공통 라이브러리나 비공개 의존성을 사용하는 프로젝트는 Nexus(사설 리포지토리) 에서 라이브러리를 다운로드해야 합니다. Nexus 연동 없이는 Maven Central에 없는 라이브러리를 찾지 못해 빌드가 실패합니다.
왜 Nexus 연동이 필요한가
Nexus 연동 설정은 크게 두 부분으로 나뉩니다.
- 계정 설정 (
settings.xml) - Nexus 접근에 필요한 인증 정보- ** 리포지토리 설정** (
pom.xml) - 라이브러리를 다운로드할 Nexus URL 정보
설정 구조 이해
settings.xml (인증 정보) pom.xml (리포지토리 URL)
┌─────────────────────┐ ┌─────────────────────────┐
│ <server> │ │ <repository> │
│ <id>my-nexus</id> │ ←일치→ │ <id>my-nexus</id> │
│ <username>...</> │ │ <url>http://nexus...</>│
│ <password>...</> │ │ </repository> │
│ </server> │ └─────────────────────────┘
└─────────────────────┘
** 핵심:**
settings.xml의<server><id>와pom.xml의<repository><id>가 ** 반드시 일치 **해야 합니다. Maven은 이id값을 기준으로 어떤 인증 정보를 어떤 리포지토리에 적용할지 매칭합니다.
1. 계정 설정 (settings.xml)
Maven이 Nexus에 접근할 때 사용할 인증 정보를 settings.xml에 추가합니다.
** 파일 위치:** $MAVEN_HOME/conf/settings.xml
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>nexus-releases</id>
<username>배포계정ID</username>
<password>배포계정PW</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>배포계정ID</username>
<password>배포계정PW</password>
</server>
</servers>
</settings>
** 보안 팁:** 비밀번호를 평문으로 저장하는 것이 우려된다면, Maven의
mvn --encrypt-password기능을 사용하여 암호화된 비밀번호를 저장할 수 있습니다.
2. 리포지토리 설정 (pom.xml)
빌드 시 의존성을 다운로드할 Nexus 리포지토리 URL을 프로젝트의 pom.xml에 추가합니다.
<repositories>
<repository>
<id>nexus-releases</id>
<name>Nexus Release Repository</name>
<url>http://nexus.example.com/repository/maven-releases/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>nexus-snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://nexus.example.com/repository/maven-snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
설정 값 매칭 요약
| 항목 | settings.xml | pom.xml | 일치 필요 여부 |
|---|---|---|---|
| ID | <server><id> | <repository><id> | ** 필수 일치** |
| URL | - | <repository><url> | pom.xml에만 설정 |
| 인증 정보 | <username>, <password> | - | settings.xml에만 설정 |
** 참고:** 인증이 필요 없는 공개 리포지토리는
settings.xml의<server>설정을 생략하고,pom.xml의<repository>에 URL만 지정하면 됩니다.
트러블슈팅
| 증상 | 원인 | 해결 방법 |
|---|---|---|
401 Unauthorized | 인증 실패 | settings.xml의 username/password 확인 |
Could not find artifact | 리포지토리 URL 오류 또는 id 불일치 | pom.xml의 URL과 settings.xml의 id 매칭 확인 |
| SNAPSHOT 버전이 갱신되지 않음 | 캐시된 구버전 참조 | mvn clean install -U 옵션으로 강제 갱신 |
정리
| 항목 | 설명 |
|---|---|
| 인증 설정 | settings.xml의 <server> 블록 |
| 저장소 URL | pom.xml의 <repository> 블록 |
| id 매칭 | settings.xml과 pom.xml의 id가 반드시 일치 |
| 비밀번호 보안 | mvn --encrypt-password로 암호화 가능 |
| SNAPSHOT 갱신 | -U 옵션 또는 updatePolicy: always |
댓글 로딩 중...