Gradle Repository를 변경해보자
발단
신규 Spring Batch 프로젝트 구동을 위해 서버를 구축 중이었고, 먼저 개발환경(dev enviroment)을 세팅하고 있었다. 서버에서 젠킨스를 띄우고 빌드를 위한 플러그인들을 설치하려는데 초장부터 문제가 생겼다. 사내의 개발 환경은 외부 인터넷망으로의 접근이 막혀 있었던 것이다. 그래도 여기까지는 다른 서버에서 플러그인 파일을 복사해오거나 번거럽더라도 http://plugins.jenkins.io에서 아카이브 파일을 직접 다운로드할 수도 있으니 괜찮았다.
그런데, 플러그인 설치 작업을 마치고 빌드를 눌러보니 다음과 같은 오류가 발생했다.
원격 저장소 의존성
프로젝트 빌드시 gradle wrapper를 사용하고 있는데, 이 gradle wrapper는 특정 저장소에서 제공하는 gradle 모듈을 바라보게 되어있다. 문제는 외부 인터넷 접근이 차단된 상태에서 Gradle이 직접 관리하는 원격 저장소(services.gradle.org)를 보고 있었으므로 빌드가 될리 없었다(퍼블릭 망이 뚫려있는 로컬 환경에서는 인지를 못했던 것이다) . 따라서 이 의존성 설정부터 변경이 필요했다.
사내에 공식 메이븐 Repository(Nexus)가 있다는 것은 알고 있었는데, 의존성을 모두 Nexus Repository로 옮겨도 될지 궁금했다. 알아본바, 사내 저장소는 프록시 저장소로서 메이븐 Central Repository를 미러링하고 있는듯 했다. 그렇다면 큰 문제는 없을 것이고 일단 해보기로 했다.
1) gradle-wrapper.properties 수정
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
//distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-bin.zip (AS-IS)
distributionUrl=http\://nexus.XXXXX.com:8081/nexus/repository/gradle-dist/gradle-5.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
gradle 저장소의 url을 변경해준다. (회사 도메인은 XXXXX 표기로 대신하였다)
이제 gradle wrapper는 빌드 수행시 사내 Nexus Resitory에서 같은 버전인 gradle-5.4 모듈을 참조할 것이다.
2) build.gradle 수정
build.gradle을 보면 프로젝트 구성시 필요한 다양한 의존 라이브러리를 추가할 수 있게 되어있다. 이 라이브러리들 역시 특정 저장소를 참조하게 되어있으며 보통은 Maven Central Repository를 참조한다. 이 의존 라이브러리 저장소 역시 사내 Nexus Repository를 바라보도록 변경해준다.
repositories {
//mavenCentral() (AS-IS)
maven { url "http://nexus.XXXXX.com:8081/nexus/content/groups/public/" }
}
여기까지 설정하면 이제 모든 의존성 Repository가 사내 Nexus로 변경된 것 같다. 다시 빌드를 해보자. 이렇게 의존성 설정을 변경해줄 경우 각 의존 모듈의 artifact를 다운받기 때문에 빌드 속도가 매우 느리다. 하지만 gradle이 로컬에 캐싱을 하기 때문에 다음번부터는 빠르게 빌드된다. 그런데 빌드 결과를 보니..
역시 한 번에 되는 일은 없다. 로그를 보니 Gradle plugin 저장소가 Gradle이 관리하는 플러그인 원격 저장소(http://plugins.gradle.org)로 세팅되어 있다. 이 또한 Nexus로 변경해준다.
3) settings.gradle 수정
pluginManagement {
repositories {
//maven { url "https://plugins.gradle.org/m2/" }
maven { url "http://nexus.XXXXX.com:8081/nexus/content/groups/public/" }
}
}
그리고 나서 빌드를 해보면 드디어 빌드가 성공했다는 젠킨스 로그를 확인할 수 있다.
끝으로 Gradle 플러그인과 메이븐 라이브러리들을 단일 url(public)로 참조할 수 있는 것이 의아 했는데, Nexus 세팅 설정시 public을 통해 모든 라이브러리를 참조할 수 있게 설정할 수 있다고 한다.
끝.
Reference
- Gradle 의존성 설정 관련 : limdevbasic.tistory.com/12
- Nexus Repository 설정 및 사용하기 : laily.tistory.com/18