Gradle로 Java 패키지 게시하기
Gradle로 Java 패키지 게시하기
이 튜토리얼에서는 지속적 통합(CI) 워크플로우의 일부로 Gradle을 사용해서 Java 패키지를 레지스트리에 게시하는 방법을 알려드릴게요.
출처: 문서
본문
Introduction
이 가이드는 Java 패키지를 GitHub Packages와 Maven Central Repository에 게시하는 워크플로우를 만드는 방법을 보여줍니다. 단일 워크플로우로 하나의 저장소 또는 여러 저장소에 패키지를 게시할 수 있어요.
[!WARNING] 이 가이드에 사용된 예시는 Legacy OSSRH 서비스를 참조해요. Maven Central Repository 문서의 Publishing을 참고하세요.
Prerequisites
워크플로우 파일과 구성 옵션에 대한 기본적인 이해가 있으면 좋아요. 자세한 내용은 Writing workflows 문서를 참고하세요.
Gradle로 Java 프로젝트를 위한 CI 워크플로우를 만드는 방법에 대한 자세한 내용은 Building and testing Java with Gradle 문서를 참고하세요.
다음에 대한 기본적인 이해가 있으면 더 도움이 될 수 있어요.
- Working with the Apache Maven registry
- Store information in variables
- Using secrets in GitHub Actions
- Use GITHUB_TOKEN for authentication in workflows
About package configuration
build.gradle 파일의 MavenPublication 섹션에 있는 groupId 및 artifactId 필드는 레지스트리가 패키지를 레지스트리에 연결하는 데 사용하는 패키지의 고유 식별자를 만들어요. 이는 Maven pom.xml 파일의 groupId 및 artifactId 필드와 유사해요. 자세한 내용은 Gradle 문서의 Maven Publish Plugin을 참고하세요.
build.gradle 파일에는 Gradle이 패키지를 게시할 배포 관리 저장소(distribution management repositories)에 대한 구성도 포함되어 있어요. 각 저장소에는 이름, 배포 URL, 인증 자격 증명이 있어야 해요.
Publishing packages to the Maven Central Repository
새 릴리스를 만들 때마다 패키지를 게시하도록 워크플로우를 트리거할 수 있어요. 아래 예시의 워크플로우는 release 이벤트가 created 유형으로 트리거될 때 실행돼요. 워크플로우는 CI 테스트가 통과하면 패키지를 Maven Central Repository에 게시해요. release 이벤트에 대한 자세한 내용은 Events that trigger workflows 문서를 참고하세요.
build.gradle 파일의 publishing 블록에서 패키지 저장소를 가리키는 새 Maven 저장소를 정의할 수 있어요. 예를 들어 OSSRH 호스팅 프로젝트를 통해 Maven Central Repository에 배포한다면 build.gradle에서 "OSSRH"라는 이름의 저장소를 지정할 수 있어요.
plugins {
...
id 'maven-publish'
}
publishing {
...
repositories {
maven {
name = "OSSRH"
url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
credentials {
username = System.getenv("MAVEN_USERNAME")
password = System.getenv("MAVEN_PASSWORD")
}
}
}
}
이 구성으로 gradle publish 명령을 실행해서 패키지를 Maven Central Repository에 게시하는 워크플로우를 만들 수 있어요. 배포 단계에서 Maven 저장소로 인증하는 데 사용하는 사용자 이름과 비밀번호 또는 토큰에 대한 환경 변수를 설정해야 해요. 자세한 내용은 Using secrets in GitHub Actions 문서를 참고하세요.
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# GitHub recommends pinning actions to a commit SHA.
# To get a newer version, you will need to update the SHA.
# You can also reference a tag or branch, but the action may change without warning.
name: Publish package to the Maven Central Repository
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2
- name: Publish package
run: ./gradlew publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
이 워크플로우는 다음 단계를 수행해요.
-
프로젝트 저장소의 사본을 체크아웃합니다.
-
Java JDK를 설정합니다.
-
Gradle 환경을 설정합니다.
gradle/actions/setup-gradle액션은 워크플로우 실행 간 상태 캐싱을 처리하고 모든 Gradle 실행에 대한 상세 요약을 제공해요. -
Gradle
publish작업을 실행해서OSSRHMaven 저장소에 게시합니다.MAVEN_USERNAME환경 변수는OSSRH_USERNAMEsecret의 내용으로 설정되고,MAVEN_PASSWORD환경 변수는OSSRH_TOKENsecret의 내용으로 설정돼요.워크플로우에서 secret을 사용하는 방법에 대한 자세한 내용은 Using secrets in GitHub Actions 문서를 참고하세요.
Publishing packages to GitHub Packages
새 릴리스를 만들 때마다 패키지를 게시하도록 워크플로우를 트리거할 수 있어요. 아래 예시의 워크플로우는 release 이벤트가 created 유형으로 트리거될 때 실행돼요. 워크플로우는 CI 테스트가 통과하면 패키지를 GitHub Packages에 게시해요. release 이벤트에 대한 자세한 내용은 Events that trigger workflows 문서를 참고하세요.
build.gradle의 publishing 블록에서 GitHub Packages를 가리키는 새 Maven 저장소를 정의할 수 있어요. 해당 저장소 구성에서 CI 워크플로우 실행에 설정된 환경 변수를 활용할 수도 있어요. GITHUB_ACTOR 환경 변수를 사용자 이름으로 사용하고, GITHUB_TOKEN 환경 변수를 GITHUB_TOKEN secret으로 설정할 수 있어요.
GITHUB_TOKEN secret은 워크플로우의 각 job이 시작될 때마다 저장소에 대한 액세스 토큰으로 설정돼요. contents 권한에 대한 읽기 액세스와 packages 권한에 대한 쓰기 액세스를 부여하도록 워크플로우 파일에서 이 액세스 토큰의 권한을 설정해야 해요. 자세한 내용은 Use GITHUB_TOKEN for authentication in workflows 문서를 참고하세요.
예를 들어 조직 이름이 "octocat"이고 저장소 이름이 "hello-world"라면 build.gradle의 GitHub Packages 구성은 아래 예시와 유사할 거예요.
plugins {
...
id 'maven-publish'
}
publishing {
...
repositories {
maven {
name = "GitHubPackages"
url = "https://maven.pkg.github.com/octocat/hello-world"
credentials {
username = System.getenv("GITHUB_ACTOR")
password = System.getenv("GITHUB_TOKEN")
}
}
}
}
이 구성으로 gradle publish 명령을 실행해서 패키지를 GitHub Packages에 게시하는 워크플로우를 만들 수 있어요.
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# GitHub recommends pinning actions to a commit SHA.
# To get a newer version, you will need to update the SHA.
# You can also reference a tag or branch, but the action may change without warning.
name: Publish package to GitHub Packages
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v6
- uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2
- name: Publish package
run: ./gradlew publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
이 워크플로우는 다음 단계를 수행해요.
-
프로젝트 저장소의 사본을 체크아웃합니다.
-
Java JDK를 설정합니다.
-
Gradle 환경을 설정합니다.
gradle/actions/setup-gradle액션은 워크플로우 실행 간 상태 캐싱을 처리하고 모든 Gradle 실행에 대한 상세 요약을 제공해요. -
Gradle
publish작업을 실행해서 GitHub Packages에 게시합니다.GITHUB_TOKEN환경 변수는GITHUB_TOKENsecret의 내용으로 설정돼요.permissions키는GITHUB_TOKENsecret이 허용할 접근을 지정해요.워크플로우에서 secret을 사용하는 방법에 대한 자세한 내용은 Using secrets in GitHub Actions 문서를 참고하세요.
Publishing packages to the Maven Central Repository and GitHub Packages
build.gradle 파일에 각각을 구성해서 Maven Central Repository와 GitHub Packages 양쪽 모두에 패키지를 게시할 수 있어요.
build.gradle 파일에 GitHub 저장소와 Maven Central Repository 제공자에 대한 저장소가 모두 포함되어 있는지 확인하세요.
예를 들어 OSSRH 호스팅 프로젝트를 통해 Central Repository에 배포한다면 name이 OSSRH로 설정된 배포 관리 저장소에 지정할 수 있어요. GitHub Packages에 배포한다면 name이 GitHubPackages로 설정된 배포 관리 저장소에 지정할 수 있어요.
조직 이름이 "octocat"이고 저장소 이름이 "hello-world"라면 build.gradle의 구성은 아래 예시와 유사할 거예요.
plugins {
...
id 'maven-publish'
}
publishing {
...
repositories {
maven {
name = "OSSRH"
url = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
credentials {
username = System.getenv("MAVEN_USERNAME")
password = System.getenv("MAVEN_PASSWORD")
}
}
maven {
name = "GitHubPackages"
url = "https://maven.pkg.github.com/octocat/hello-world"
credentials {
username = System.getenv("GITHUB_ACTOR")
password = System.getenv("GITHUB_TOKEN")
}
}
}
}
이 구성으로 gradle publish 명령을 실행해서 Maven Central Repository와 GitHub Packages 양쪽 모두에 패키지를 게시하는 워크플로우를 만들 수 있어요.
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# GitHub recommends pinning actions to a commit SHA.
# To get a newer version, you will need to update the SHA.
# You can also reference a tag or branch, but the action may change without warning.
name: Publish package to the Maven Central Repository and GitHub Packages
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v6
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4.4.2
- name: Publish package
run: ./gradlew publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
이 워크플로우는 다음 단계를 수행해요.
-
프로젝트 저장소의 사본을 체크아웃합니다.
-
Java JDK를 설정합니다.
-
Gradle 환경을 설정합니다.
gradle/actions/setup-gradle액션은 워크플로우 실행 간 상태 캐싱을 처리하고 모든 Gradle 실행에 대한 상세 요약을 제공해요. -
Gradle
publish작업을 실행해서OSSRHMaven 저장소와 GitHub Packages에 게시합니다.MAVEN_USERNAME환경 변수는OSSRH_USERNAMEsecret의 내용으로 설정되고,MAVEN_PASSWORD환경 변수는OSSRH_TOKENsecret의 내용으로 설정돼요.GITHUB_TOKEN환경 변수는GITHUB_TOKENsecret의 내용으로 설정돼요.permissions키는GITHUB_TOKENsecret이 허용할 접근을 지정해요.워크플로우에서 secret을 사용하는 방법에 대한 자세한 내용은 Using secrets in GitHub Actions 문서를 참고하세요.