원문 - Working with the Gradle registry


  • 깃허브 패키지 인증(Authenticating to GitHub Packages)
  • 패키지 게시(Publishing a package)
  • 게시된 패키지 사용(Using a published package)
  • 추가로 읽을 거리(Further reading)

그레이들 레지스트리 작업(Working with the Gradle registry)

패키지를 깃허브 Packages에 게시하고 깃허브 패키지 그레이들 레지스트리에 저장된 패키지를 자바 프로젝트의 의존성으로 사용하도록 그레이들을 구성할 수 있다.

깃허브 패키지는 GitHub Free, GitHub Pro, 조직용 GitHub Free, GitHub Team, GitHub Enterprise Cloud, GitHub Enterprise Server 3.0 이상 및 GitHub AE와 함께 사용할 수 있다.

레거시 리포지터리별 플랜을 사용하는 계정이 소유한 프라이빗 리포지터리에는 깃허브 패키지를 사용할 수 없다. 또한 레거시 리포지터리별 플랜을 사용하는 계정은 리포지터리별로 비용이 청구되므로 세분화된 권한을 지원하는 레지스트리에 접근할 수 없다. 세부적인 권한을 지원하는 레지스트리 목록은 “깃허브 패키지에 대한 권한 정보”를 참고하자. 자세한 내용은 “깃허브 플랜”을 참고하자.

깃허브 패키지 인증(Authenticating to GitHub Packages)

깃허브 패키지는 개인 액세스 토큰(클래식)을 사용한 인증만 지원한다. 자세한 내용은 “개인 액세스 토큰 관리”를 참고하자.

프라이빗, 인터널 및 퍼블릭 패키지를 게시, 설치 및 삭제하려면 액세스 토큰이 필요하다.

개인 액세스 토큰(클래식)을 사용하여 깃허브 패키지 또는 깃허브 API에 인증할 수 있다. 개인용 액세스 토큰(클래식)을 생성할 때 필요에 따라 토큰에 다양한 범위를 할당할 수 있다. 개인용 액세스 토큰(클래식)의 패키지 관련 범위에 대한 자세한 내용은 “깃허브 패키지에 대한 권한 정보”를 참고하자.

깃허브 액션 워크플로 내에서 깃허브 패키지 레지스트리에 인증하려면 다음 내용을 사용할 수 있다.

  • GITHUB_TOKEN은 워크플로 리포지터리와 관련된 패키지를 게시한다.
  • 다른 프라이빗 리포지터리(GITHUB_TOKEN이 접근할 수 없음)와 관련된 패키지를 설치하기 위한 최소한 read:packages 범위가 있는 개인 액세스 토큰(클래식)이 필요하다.

깃헙 액션 워크플로에 사용되는 GITHUB_TOKEN에 대한 자세한 내용은 “자동 토큰 인증”을 참고하자. 그레이들과 함께 GITHUB_TOKEN을 사용하는 방법에 대한 자세한 내용은 “그레이들을 사용하여 자바 패키지 게시”를 참고하자.

개인 액세스 토큰으로 인증(Authenticating with a personal access token)

깃허브 패키지에 패키지를 게시하고 설치하려면 적절한 범위의 개인 액세스 토큰(클래식)을 사용해야 한다. 자세한 내용은 “깃허브 패키지 소개”를 참고하자.

개인 액세스 토큰(클래식)을 포함하도록 build.gradle 파일(그레이들 그루비) 또는 build.gradle.kts 파일(코틀린 DSL) 파일을 편집하여 그레이들 그루비 또는 코틀린 DSL을 사용하여 그레이들로 깃허브 패키지에 인증할 수 있다. 리포지터리의 단일 패키지 또는 여러 패키지를 인식하도록 그레이들 그루비 및 코틀린 DSL을 구성할 수도 있다.

USERNAME을 깃허브 사용자명으로 바꾸고, TOKEN을 개인 액세스 토큰(클래식)으로 바꾸고, REPOSITORY를 게시하려는 패키지가 포함된 리포지터리명으로, OWNER를 리포지터리를 소유한 깃허브의 개인 계정이나 조직명으로 바꾼다. 대문자는 지원되지 않으므로 깃허브 사용자 또는 조직명에 대문자가 포함된 경우에도 리포지터리 소유자에는 소문자를 사용해야 한다.

깃허브 패키지는 아파치 메이븐의 SNAPSHOT 버전을 지원한다. SNAPSHOT 아티팩트 다운로드를 위해 깃허브 패키지 리포지터리를 사용하려면 소비 프로젝트의 POM 또는 ~/.m2/settings.xml 파일에서 SNAPSHOTS를 활성화한다. 예제를 보려면 “아파지 메이븐 레지스트리 작업”을 참고하자.

리포지터리의 단일 패키지에 그레이들 그루비를 사용하는 예제이다.

plugins {
    id("maven-publish")
}

publishing {
    repositories {
        maven {
            name = "GitHubPackages"
            url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
            credentials {
                username = project.findProperty("gpr.user") ?: System.getenv("USERNAME")
                password = project.findProperty("gpr.key") ?: System.getenv("TOKEN")
            }
        }
    }
    publications {
        gpr(MavenPublication) {
            from(components.java)
        }
    }
}

동일한 리포지터리의 여러 패키지에 그레아들 그루비를 사용하는 예제이다.

plugins {
    id("maven-publish") apply false
}
subprojects {
    apply plugin: "maven-publish"
    publishing {
        repositories {
            maven {
                name = "GitHubPackages"
                url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
                credentials {
                    username = project.findProperty("gpr.user") ?: System.getenv("USERNAME")
                    password = project.findProperty("gpr.key") ?: System.getenv("TOKEN")
                }
            }
        }
        publications {
            gpr(MavenPublication) {
                from(components.java)
            }
        }
    }
}

동일한 리포지터리의 단일 패키지에 코틀린 DSL을 사용하는 예제이다.

plugins {
    `maven-publish`
}
publishing {
    repositories {
        maven {
            name = "GitHubPackages"
            url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
            credentials {
                username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME")
                password = project.findProperty("gpr.key") as String? ?: System.getenv("TOKEN")
            }
        }
    }
    publications {
        register<MavenPublication>("gpr") {
            from(components["java"])
        }
    }
}

동일한 리포지터리의 여러 패키지에 코틀린 DSL을 사용하는 예제이다.

plugins {
    `maven-publish` apply false
}

subprojects {
    apply(plugin = "maven-publish")
    configure<PublishingExtension> {
        repositories {
            maven {
                name = "GitHubPackages"
                url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
                credentials {
                    username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME")
                    password = project.findProperty("gpr.key") as String? ?: System.getenv("TOKEN")
                }
            }
        }
        publications {
            register<MavenPublication>("gpr") {
                from(components["java"])
            }
        }
    }
}

패키지 게시(Publishing a package)

기본적으로, 깃허브는 패키지와 동일한 이름을 사용하여 존재하는 리포지터리에 패키지를 게시한다. 예를 들어 깃허브는 OWNER/test 깃허브 패키지 리포지터리에 com.example.test라는 패키지를 게시합니다.

패키지를 게시한 후 깃허브에서 패키지를 볼 수 있다. 자세한 내용은 “패키지 보기”를 참고하자.

  1. 깃허브 패키지에 인증한다. 자세한 내용은 “깃허브 패키지 인증”을 참고하자.
  2. 패키지를 만든 후 패키지를 게시할 수 있다.
    gradle publish
    

게시된 패키지 사용(Using a published package)

깃허브 패키지에서 게시된 패키지를 사용하려면 패키지를 의존성으로 추가하고 프로젝트에 리포지터리를 추가하자. 자세한 내용은 그레이들 설명서의 “의존성 선언”을 참고하자.

  1. 깃허브 패키지에 인증한다. 자세한 내용은 “깃허브 패키지 인증”을 참고하자.
  2. build.gradle 파일(그레이들 그루비) 또는 build.gradle.kts 파일(코틀린 DSL) 파일에 패키지 의존성을 추가한다.

그레이들 그루비를 사용한 예제이다.

dependencies {
    implementation 'com.example:package'
}

Example using Kotlin DSL:

dependencies {
    implementation("com.example:package")
}
  1. build.gradle 파일(그레이들 그루비) 또는 build.gradle.kts 파일(코틀린 DSL) 파일에 리포지터리를 추가한다.

그레이들 그루비를 사용한 예제이다.

repositories {
    maven {
        url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
        credentials {
            username = project.findProperty("gpr.user") ?: System.getenv("USERNAME")
            password = project.findProperty("gpr.key") ?: System.getenv("TOKEN")
        }
   }
}

Example using Kotlin DSL:

repositories {
    maven {
        url = uri("https://maven.pkg.github.com/OWNER/REPOSITORY")
        credentials {
            username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME")
            password = project.findProperty("gpr.key") as String? ?: System.getenv("TOKEN")
        }
    }
}

추가로 읽을 거리(Further reading)