Maven 가상 레지스트리
이 기능의 사용 가능 여부는 기능 플래그에 의해 제어됩니다. Maven 가상 레지스트리는 GitLab에서 여러 외부 레지스트리의 패키지를 관리하고 배포하기 위한 단일하고 잘 알려진 URL을 사용합니다. Maven 가상 레지스트리를 사용하여 다음을 수행할 수 있습니다:
히스토리
- Introduced in GitLab 18.0 with a flag named
virtual_registry_maven. Disabled by default. - Feature flag renamed to
maven_virtual_registryin GitLab 18.1. - Changed from experiment to beta in GitLab 18.1.
- Enabled on GitLab.com, GitLab Self-Managed, and GitLab Dedicated in GitLab 18.2.
이 기능의 사용 가능 여부는 기능 플래그에 의해 제어됩니다. 자세한 내용은 히스토리를 참조하세요. 이 기능은 베타로 제공됩니다. 이 기능을 사용하기 전에 설명서를 주의 깊게 검토하세요.
Maven 가상 레지스트리는 GitLab에서 여러 외부 레지스트리의 패키지를 관리하고 배포하기 위한 단일하고 잘 알려진 URL을 사용합니다.
Maven 가상 레지스트리를 사용하여 다음을 수행할 수 있습니다:
- 가상 레지스트리 생성
- 가상 레지스트리를 공개 및 비공개 업스트림 레지스트리에 연결
- 구성된 업스트림에서 패키지를 가져오도록 Maven 클라이언트 구성
- 사용 가능한 업스트림에 대한 캐시 항목 관리
이 접근 방식은 시간이 지남에 따라 더 나은 패키지 성능을 제공하고, Maven 패키지를 더 쉽게 관리할 수 있게 합니다.
가상 레지스트리 및 업스트림 레지스트리 관리에 대한 일반 정보는 가상 레지스트리를 참조하세요.
사전 요구 사항#
Maven 가상 레지스트리를 사용하기 전에:
- 가상 레지스트리를 사용하기 위한 사전 요구 사항을 검토하세요.
- 가상 레지스트리에 대한 인증을 구성하세요. 자세한 내용은 가상 레지스트리 인증을 참조하세요.
- GitLab Self-Managed 사용 시: 로컬 네트워크에 대한 아웃바운드 요청을 허용합니다. 자세한 내용은 로컬 네트워크에 요청 허용을 참조하세요.
Maven 가상 레지스트리를 사용할 때는 다음 제한 사항에 주의하세요:
- 최상위 그룹당 최대
20개의 Maven 가상 레지스트리를 생성할 수 있습니다. - 특정 Maven 가상 레지스트리에 최대
20개의 업스트림만 설정할 수 있습니다. - 기술적인 이유로 인해, 오브젝트 스토리지 구성에서 설정된 값에 관계없이
proxy_download설정이 강제로 활성화됩니다. - Geo 지원이 구현되지 않았습니다. 이슈 473033에서 개발 현황을 추적할 수 있습니다.
가상 레지스트리 관리#
히스토리
- Introduced in GitLab 18.5 with a flag named
ui_for_virtual_registries. Enabled by default. - Changed in GitLab 18.6 to a flag named
maven_virtual_registry. Enabled by default. Feature flagui_for_virtual_registriesremoved.
그룹에 대한 Maven 가상 레지스트리를 관리합니다.
API를 사용할 수도 있습니다.
Maven 가상 레지스트리 생성#
Maven 가상 레지스트리를 생성하려면:
- 상단 표시줄에서 검색 또는 이동을 선택하고 그룹을 찾습니다. 이 그룹은 최상위 수준이어야 합니다.
- 배포 > 가상 레지스트리를 선택합니다.
- 다음 경우에 따라:
- 기존 레지스트리가 있는 경우, 레지스트리 생성을 선택합니다. 드롭다운 목록에서 Maven을 선택합니다.
- 기존 레지스트리가 없는 경우, 드롭다운 목록에서 Maven을 선택합니다. 그런 다음 레지스트리 생성을 선택합니다.
- 이름과 선택적 설명을 입력합니다.
- 레지스트리 생성을 선택합니다.
업스트림 레지스트리 관리#
가상 레지스트리의 업스트림 Maven 레지스트리를 관리합니다.
Maven 업스트림 레지스트리 생성#
가상 레지스트리에 연결할 Maven 업스트림 레지스트리를 생성합니다.
사전 요구 사항:
- Maven 가상 레지스트리가 있어야 합니다. 자세한 내용은 가상 레지스트리 생성을 참조하세요.
Maven 업스트림 레지스트리를 생성하려면:
-
상단 표시줄에서 검색 또는 이동을 선택하고 그룹을 찾습니다. 이 그룹은 최상위 수준이어야 합니다.
-
배포 > 가상 레지스트리를 선택합니다.
-
레지스트리 유형에서 레지스트리 보기를 선택합니다.
-
레지스트리 탭에서 레지스트리를 선택합니다.
-
업스트림 추가를 선택합니다. 가상 레지스트리에 기존 업스트림이 있는 경우, 드롭다운 목록에서 다음 중 하나를 선택합니다:
- 새 업스트림 생성하여 업스트림을 구성합니다.
- 기존 업스트림 연결 > 기존 업스트림 선택.
- 드롭다운 목록에서 업스트림을 선택합니다.
- 선택 사항. 생성하기 전에 업스트림 연결을 테스트하려면 업스트림 테스트를 선택합니다.
- 업스트림 추가를 선택합니다.
-
필드를 작성합니다.
-
사용자 이름과 비밀번호를 모두 포함하거나 둘 다 포함하지 않아야 합니다. 설정하지 않으면 공개(익명) 요청이 업스트림 접근에 사용됩니다.
-
업스트림을 Maven Central에 연결하려면, 업스트림 URL로 다음을 사용합니다:
https://repo1.maven.org/maven2 -
아티팩트 캐싱 기간과 메타데이터 캐싱 기간은 기본적으로 24시간입니다. 캐시 항목 확인을 비활성화하거나 Maven Central을 사용하는 경우
0으로 설정합니다. -
생성하기 전에 업스트림 연결을 테스트하려면 업스트림 테스트를 선택합니다.
-
-
업스트림 생성을 선택합니다.
캐시 유효성 설정에 대한 자세한 내용은 캐시 유효 기간 설정을 참조하세요.
Maven 가상 레지스트리 사용#
가상 레지스트리를 생성한 후에는 가상 레지스트리를 통해 의존성을 가져오도록 Maven 클라이언트를 구성해야 합니다.
Maven 클라이언트 구성#
Maven 가상 레지스트리는 다음 Maven 클라이언트를 지원합니다:
Maven 클라이언트 구성에서 가상 레지스트리를 선언해야 합니다.
모든 클라이언트는 인증이 필요합니다. 클라이언트 인증을 위해 사용자 지정 HTTP 헤더 또는 Basic Auth를 사용할 수 있습니다. 각 클라이언트에 대해 아래 구성 중 하나를 사용해야 합니다.
| 토큰 유형 | 이름은 다음이어야 함 | 토큰 |
|---|---|---|
| Personal access token | Private-Token |
토큰을 그대로 붙여넣거나 환경 변수를 정의하여 토큰을 저장합니다. |
| Group deploy token | Deploy-Token |
토큰을 그대로 붙여넣거나 환경 변수를 정의하여 토큰을 저장합니다. |
| Group access token | Private-Token |
토큰을 그대로 붙여넣거나 환경 변수를 정의하여 토큰을 저장합니다. |
| CI/CD Job token | Job-Token |
${CI_JOB_TOKEN} |
| OAuth 2.0 token | Authorization | Bearer <your_oauth_token> |
settings.xml 파일에 다음 섹션을 추가합니다.
<settings>
<servers>
<server>
<id>gitlab-maven</id>
<configuration>
<httpHeaders>
<property>
<name>REPLACE_WITH_NAME</name>
<value>REPLACE_WITH_TOKEN</value>
</property>
</httpHeaders>
</configuration>
</server>
</servers>
</settings>
mvn 애플리케이션에서 가상 레지스트리를 두 가지 방법으로 구성할 수 있습니다:
- 기본 레지스트리(Maven central) 위에 추가 레지스트리로 구성. 이 구성에서는 가상 레지스트리와 기본 레지스트리 모두에 있는 프로젝트 의존성을 선언된 레지스트리 중 어디에서든 가져올 수 있습니다.
- 기본 레지스트리(Maven central)를 대체하는 방식으로 구성. 이 구성에서는 가상 레지스트리를 통해 의존성을 가져옵니다. 필요한 공개 의존성을 누락하지 않으려면 Maven Central을 가상 레지스트리의 마지막 업스트림으로 구성해야 합니다.
Maven 가상 레지스트리를 추가 레지스트리로 구성하려면, pom.xml 파일에 repository 요소를 추가합니다:
<repositories>
<repository>
<id>gitlab-maven</id>
<url>https://gitlab.example.com/api/v4/virtual_registries/packages/maven/<registry_id></url>
</repository>
</repositories>
<id>:settings.xml에서 사용된<server>의 동일한 ID.<registry_id>: Maven 가상 레지스트리의 ID.
Maven 가상 레지스트리를 기본 레지스트리 대체로 구성하려면, settings.xml에 mirrors 요소를 추가합니다:
<settings>
<servers>
...
</servers>
<mirrors>
<mirror>
<id>central-proxy</id>
<name>GitLab proxy of central repo</name>
<url>https://gitlab.example.com/api/v4/virtual_registries/packages/maven/<registry_id></url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
<registry_id>: Maven 가상 레지스트리의 ID.
| 토큰 유형 | 이름은 다음이어야 함 | 토큰 |
|---|---|---|
| Personal access token | Private-Token |
토큰을 그대로 붙여넣거나 환경 변수를 정의하여 토큰을 저장합니다. |
| Group deploy token | Deploy-Token |
토큰을 그대로 붙여넣거나 환경 변수를 정의하여 토큰을 저장합니다. |
| Group access token | Private-Token |
토큰을 그대로 붙여넣거나 환경 변수를 정의하여 토큰을 저장합니다. |
| CI/CD Job token | Job-Token |
${CI_JOB_TOKEN} |
| OAuth 2.0 token | Authorization | Bearer <your_oauth_token> |
GRADLE_USER_HOME 디렉토리에 다음 내용의 gradle.properties 파일을 생성합니다:
gitLabPrivateToken=REPLACE_WITH_YOUR_TOKEN
build.gradle에 repositories 섹션을 추가합니다.
-
Groovy DSL에서:
repositories { maven { url "https://gitlab.example.com/api/v4/virtual_registries/packages/maven/<registry_id>" name "GitLab" credentials(HttpHeaderCredentials) { name = 'REPLACE_WITH_NAME' value = gitLabPrivateToken } authentication { header(HttpHeaderAuthentication) } } } -
Kotlin DSL에서:
repositories { maven { url = uri("https://gitlab.example.com/api/v4/virtual_registries/packages/maven/<registry_id>") name = "GitLab" credentials(HttpHeaderCredentials::class) { name = "REPLACE_WITH_NAME" value = findProperty("gitLabPrivateToken") as String? } authentication { create("header", HttpHeaderAuthentication::class) } } } -
<registry_id>: Maven 가상 레지스트리의 ID.
| 토큰 유형 | 사용자 이름은 다음이어야 함 | 토큰 |
|---|---|---|
| Personal access token | 사용자의 사용자 이름 | 토큰을 그대로 붙여넣거나 환경 변수를 정의하여 토큰을 저장합니다. |
| Group deploy token | 배포 토큰의 사용자 이름 | 토큰을 그대로 붙여넣거나 환경 변수를 정의하여 토큰을 저장합니다. |
| Group access token | 액세스 토큰에 연결된 사용자의 사용자 이름 | 토큰을 그대로 붙여넣거나 환경 변수를 정의하여 토큰을 저장합니다. |
| CI/CD Job token | gitlab-ci-token |
sys.env.get("CI_JOB_TOKEN").get |
SBT의 인증은 기본 HTTP 인증을 기반으로 합니다. 이름과 비밀번호를 제공해야 합니다.
build.sbt에 다음 줄을 추가합니다:
resolvers += ("gitlab" at "<endpoint_url>")
credentials += Credentials("GitLab Virtual Registry", "<host>", "<username>", "<token>")
<endpoint_url>: Maven 가상 레지스트리 URL. 예:https://gitlab.example.com/api/v4/virtual_registries/packages/maven/<registry_id>, 여기서<registry_id>는 Maven 가상 레지스트리의 ID입니다.<host>: 프로토콜 스키마 또는 포트 없이<endpoint_url>에 있는 호스트. 예:gitlab.example.com.<username>: 사용자 이름.<token>: 구성된 토큰.
Credentials의 첫 번째 인수가 "GitLab Virtual Registry"인지 확인하세요. 이 영역 이름은 Maven 가상 레지스트리가 보내는 Basic Auth 영역과 정확히 일치해야 합니다.
문제 해결#
Maven 가상 레지스트리를 사용할 때 다음 문제가 발생할 수 있습니다.
오류: gitlab.example.com:443에 연결 실패: 연결 시간 초과#
다음과 같이 가상 레지스트리를 통해 Maven 의존성을 가져올 때 간헐적인 연결 시간 초과 오류가 발생할 수 있습니다:
Connect to gitlab.example.com:443 failed: Connect timed out
이 문제는 업스트림 레지스트리 URL이 로컬 네트워크 주소로 확인될 때 GitLab Self-Managed 인스턴스에서 발생할 수 있습니다. 기본적으로 GitLab은 보안상의 이유로 로컬 네트워크 주소에 대한 아웃바운드 요청을 차단합니다.
이 문제를 해결하려면:
- 오른쪽 상단 모서리에서 관리자를 선택합니다.
- 왼쪽 사이드바에서 설정 > 네트워크를 선택합니다.
- 아웃바운드 요청을 확장합니다.
- 웹훅 및 통합에서 로컬 네트워크로의 요청 허용 확인란을 선택합니다.
- 선택 사항. 모든 로컬 네트워크 요청을 허용하는 대신 특정 주소만 허용하려면, 훅 및 통합이 액세스할 수 있는 로컬 IP 주소 및 도메인 이름에서 업스트림 레지스트리의 호스트 이름 또는 IP 주소를 추가합니다.
- 변경 사항 저장을 선택합니다.
자세한 내용은 로컬 네트워크에 요청 허용을 참조하세요.
