참고: GitHub 호스트 실행기는 현재 GitHub Enterprise Server에서 지원되지 않습니다. GitHub public roadmap에 예정된 향후 지원에 대해 자세히 알아볼 수 있습니다.
소개
이 가이드에서는 GitHub Packages 및 Maven 중앙 리포지토리에 Java 패키지를 게시하는 워크플로를 만드는 방법을 보여 줍니다. 단일 워크플로를 사용하면 패키지를 단일 리포지토리 또는 여러 리포지토리에 게시할 수 있습니다.
필수 조건
워크플로 파일 및 구성 옵션을 기본적으로 이해하는 것이 좋습니다. 자세한 내용은 "워크플로 작성"을(를) 참조하세요.
Gradle을 사용한 Java 패키지의 CI 워크플로 생성에 대한 자세한 내용은 "Gradle을 사용하여 Java 빌드 및 테스트"을(를) 참조하세요.
또한 다음 사항을 기본적으로 이해하는 것이 유용할 수 있습니다.
패키지 구성 정보
build.gradle 파일 MavenPublication
섹션의 groupId
및 artifactId
필드는 레지스트리에서 패키지를 특정 레지스트리에 연결하는 데 사용하는 패키지의 고유 식별자를 만듭니다. Maven pom.xml 파일의 groupId
및 artifactId
필드와 유사합니다. 자세한 내용은 Gradle 설명서의 “Maven 게시 플러그 인”을 참조하세요.
build.gradle 파일에는 Gradle에서 패키지를 게시할 배포 관리 리포지토리에 대한 구성도 포함되어 있습니다. 각 리포지토리에는 이름, 배포 URL, 인증을 위한 자격 증명이 있어야 합니다.
Maven 중앙 리포지토리에 패키지 게시
새 릴리스를 만들 때마다 워크플로를 트리거하여 패키지를 게시할 수 있습니다. 아래 예제의 워크플로는 release
이벤트가 created
형식으로 트리거될 때 실행됩니다. 이 워크플로는 CI 테스트를 통과할 경우 Maven 중앙 리포지토리에 패키지를 게시합니다. release
이벤트의 자세한 내용은 "워크플로를 트리거하는 이벤트"을(를) 참조하세요.
패키지 리포지토리를 가리키는 build.gradle 파일의 게시 블록에서 새 Maven 리포지토리를 정의할 수 있습니다. 예를 들어 OSSRH 호스팅 프로젝트를 통해 Maven 중앙 리포지토리에 배포하는 경우 _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") } } } }
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 중앙 리포지토리에 패키지를 게시하는 워크플로를 만들 수 있습니다. 배포 단계에서 Maven 리포지토리에 인증하는 데 사용하는 사용자 이름과 암호 또는 토큰의 환경 변수를 설정해야 합니다. 자세한 내용은 "GitHub Actions에서 비밀 사용"을(를) 참조하세요.
# 이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다. # 작업은 타사에서 제공하며 # 별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다. # 참조하세요. # 커밋 SHA에 작업을 고정하는 것이 좋습니다. # 최신 버전을 얻으려면 SHA를 업데이트해야 합니다. # 태그 또는 분기를 참조할 수도 있지만 경고 없이 작업이 변경될 수 있습니다. name: Publish package to the Maven Central Repository on: release: types: [created] jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Java uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 - name: Publish package run: ./gradlew publish env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
# 이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다.
# 작업은 타사에서 제공하며
# 별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다.
# 참조하세요.
# 커밋 SHA에 작업을 고정하는 것이 좋습니다.
# 최신 버전을 얻으려면 SHA를 업데이트해야 합니다.
# 태그 또는 분기를 참조할 수도 있지만 경고 없이 작업이 변경될 수 있습니다.
name: Publish package to the Maven Central Repository
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
- 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
작업을 실행하여OSSRH
Maven 리포지토리에 게시합니다.MAVEN_USERNAME
환경 변수는OSSRH_USERNAME
비밀의 내용으로 설정되고,MAVEN_PASSWORD
환경 변수는OSSRH_TOKEN
비밀의 내용으로 설정됩니다.워크플로에서 비밀을 사용하는 방법에 대한 자세한 내용은 "GitHub Actions에서 비밀 사용"을(를) 참조하세요.
GitHub Packages에 패키지 게시
새 릴리스를 만들 때마다 워크플로를 트리거하여 패키지를 게시할 수 있습니다. 아래 예제의 워크플로는 release
이벤트가 created
형식으로 트리거될 때 실행됩니다. 이 워크플로는 CI 테스트를 통과할 경우 GitHub Packages에 패키지를 게시합니다. release
이벤트의 자세한 내용은 "워크플로를 트리거하는 이벤트"을(를) 참조하세요.
GitHub Packages를 가리키는 _build.gradle_의 게시 블록에서 새 Maven 리포지토리를 정의할 수 있습니다. 해당 리포지토리 구성에서 CI 워크플로 실행에 설정된 환경 변수를 활용할 수도 있습니다. GITHUB_ACTOR
환경 변수를 사용자 이름으로 사용할 수 있으며, GITHUB_TOKEN
비밀로 GITHUB_TOKEN
환경 변수를 설정할 수 있습니다.
GITHUB_TOKEN
비밀은 워크플로의 작업이 시작될 때마다 리포지토리에 대한 액세스 토큰으로 설정됩니다. contents
권한에 대한 읽기 권한을 부여하고 packages
권한에 대한 쓰기 권한을 부여하려면 워크플로 파일에서 이 액세스 토큰에 대한 사용 권한을 설정해야 합니다. 자세한 내용은 "자동 토큰 인증"을(를) 참조하세요.
예를 들어 조직 이름이 “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") } } } }
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에 패키지를 게시하는 워크플로를 만들 수 있습니다.
# 이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다. # 작업은 타사에서 제공하며 # 별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다. # 참조하세요. # 커밋 SHA에 작업을 고정하는 것이 좋습니다. # 최신 버전을 얻으려면 SHA를 업데이트해야 합니다. # 태그 또는 분기를 참조할 수도 있지만 경고 없이 작업이 변경될 수 있습니다. 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@v4 - uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 - name: Publish package run: ./gradlew publish env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# 이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다.
# 작업은 타사에서 제공하며
# 별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다.
# 참조하세요.
# 커밋 SHA에 작업을 고정하는 것이 좋습니다.
# 최신 버전을 얻으려면 SHA를 업데이트해야 합니다.
# 태그 또는 분기를 참조할 수도 있지만 경고 없이 작업이 변경될 수 있습니다.
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@v4
- uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
- 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_TOKEN
비밀의 내용으로 설정됩니다.permissions
키는GITHUB_TOKEN
비밀이 허용하는 액세스를 지정합니다.워크플로에서 비밀을 사용하는 방법에 대한 자세한 내용은 "GitHub Actions에서 비밀 사용"을(를) 참조하세요.
Maven 중앙 리포지토리 및 GitHub Packages에 패키지 게시
build.gradle 파일에서 각각 구성하여 Maven 중앙 리포지토리와 GitHub Packages에 모두 패키지를 게시할 수 있습니다.
build.gradle 파일에 GitHub 리포지토리 및 Maven 중앙 리포지토리 공급자의 리포지토리가 둘 다 포함되어 있는지 확인합니다.
예를 들어 OSSRH 호스팅 프로젝트를 통해 중앙 리포지토리에 배포하는 경우 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") } } } }
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 중앙 리포지토리와 GitHub Packages에 모두 패키지를 게시하는 워크플로를 만들 수 있습니다.
# 이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다. # 작업은 타사에서 제공하며 # 별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다. # 참조하세요. # 커밋 SHA에 작업을 고정하는 것이 좋습니다. # 최신 버전을 얻으려면 SHA를 업데이트해야 합니다. # 태그 또는 분기를 참조할 수도 있지만 경고 없이 작업이 변경될 수 있습니다. 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@v4 - name: Set up Java uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Setup Gradle uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0 - name: Publish package run: ./gradlew publish env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# 이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다.
# 작업은 타사에서 제공하며
# 별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다.
# 참조하세요.
# 커밋 SHA에 작업을 고정하는 것이 좋습니다.
# 최신 버전을 얻으려면 SHA를 업데이트해야 합니다.
# 태그 또는 분기를 참조할 수도 있지만 경고 없이 작업이 변경될 수 있습니다.
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@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@af1da67850ed9a4cedd57bfd976089dd991e2582 # v4.0.0
- 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
작업을 실행하여OSSRH
Maven 리포지토리 및 GitHub Packages에 게시합니다.MAVEN_USERNAME
환경 변수는OSSRH_USERNAME
비밀의 내용으로 설정되고,MAVEN_PASSWORD
환경 변수는OSSRH_TOKEN
비밀의 내용으로 설정됩니다.GITHUB_TOKEN
환경 변수는GITHUB_TOKEN
비밀의 내용으로 설정됩니다.permissions
키는GITHUB_TOKEN
비밀이 허용하는 액세스를 지정합니다.워크플로에서 비밀을 사용하는 방법에 대한 자세한 내용은 "GitHub Actions에서 비밀 사용"을(를) 참조하세요.