Skip to main content
설명서에 자주 업데이트를 게시하며 이 페이지의 번역이 계속 진행 중일 수 있습니다. 최신 정보는 영어 설명서를 참조하세요.

Gradle을 사용하여 Java 패키지 게시

Gradle을 사용하여 CI(연속 통합) 워크플로의 일부로 Java 패키지를 레지스트리에 게시할 수 있습니다.

참고: GitHub 호스트 실행기는 현재 GitHub Enterprise Server에서 지원되지 않습니다. GitHub public roadmap에 예정된 향후 지원에 대해 자세히 알아볼 수 있습니다.

소개

이 가이드에서는 GitHub Packages 및 Maven 중앙 리포지토리에 Java 패키지를 게시하는 워크플로를 만드는 방법을 보여 줍니다. 단일 워크플로를 사용하면 패키지를 단일 리포지토리 또는 여러 리포지토리에 게시할 수 있습니다.

필수 조건

워크플로 파일 및 구성 옵션을 기본적으로 이해하는 것이 좋습니다. 자세한 내용은 “GitHub Actions 알아보기”를 참조하세요.

Gradle을 사용하여 Java 프로젝트에 대한 CI 워크플로를 만드는 방법에 대한 자세한 내용은 “Gradle을 사용하여 Java 빌드 및 테스트”를 참조하세요.

다음과 관련된 기본 지식도 유용할 수 있습니다.

패키지 구성 정보

build.gradle 파일 MavenPublication 섹션의 groupIdartifactId 필드는 레지스트리에서 패키지를 특정 레지스트리에 연결하는 데 사용하는 패키지의 고유 식별자를 만듭니다. Maven pom.xml 파일의 groupIdartifactId 필드와 유사합니다. 자세한 내용은 Gradle 설명서의 “Maven 게시 플러그 인”을 참조하세요.

build.gradle 파일에는 Gradle에서 패키지를 게시할 배포 관리 리포지토리에 대한 구성도 포함되어 있습니다. 각 리포지토리에는 이름, 배포 URL, 인증을 위한 자격 증명이 있어야 합니다.

Maven 중앙 리포지토리에 패키지 게시

새 릴리스를 만들 때마다 워크플로를 트리거하여 패키지를 게시할 수 있습니다. 아래 예제의 워크플로는 release 이벤트가 created 형식으로 트리거될 때 실행됩니다. 이 워크플로는 CI 테스트를 통과할 경우 Maven 중앙 리포지토리에 패키지를 게시합니다. release 이벤트에 대한 자세한 내용은 “워크플로를 트리거하는 이벤트”를 참조하세요.

패키지 리포지토리를 가리키는 build.gradle 파일의 게시 블록에서 새 Maven 리포지토리를 정의할 수 있습니다. 예를 들어 OSSRH 호스팅 프로젝트를 통해 Maven 중앙 리포지토리에 배포하는 경우 build.gradle에서 이름이 "OSSRH"인 리포지토리를 지정할 수 있습니다.

groovy
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 리포지토리에 인증하는 데 사용하는 사용자 이름과 암호 또는 토큰의 환경 변수를 설정해야 합니다. 자세한 내용은 “암호화된 비밀 만들기 및 사용”을 참조하세요.

YAML

# 이 워크플로는 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@v3
      - name: Set up Java
        uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'adopt'
      - name: Validate Gradle wrapper
        uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
      - name: Publish package
        uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
        with:
          arguments: publish
        env:
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}

이 워크플로는 다음 단계를 수행합니다.

  1. 프로젝트 리포지토리의 복사본을 체크 아웃합니다.

  2. Java JDK를 설정합니다.

  3. 리포지토리에 있는 Gradle Wrapper JAR 파일의 체크섬의 유효성을 검사합니다.

  4. publish 인수와 함께 gradle/gradle-build-action 작업을 실행하여 OSSRH Maven 리포지토리에 게시합니다. MAVEN_USERNAME 환경 변수는 OSSRH_USERNAME 비밀의 내용으로 설정되고, MAVEN_PASSWORD 환경 변수는 OSSRH_TOKEN 비밀의 내용으로 설정됩니다.

    워크플로에서 비밀을 사용하는 방법에 대한 자세한 내용은 “암호화된 비밀 만들기 및 사용”을 참조하세요.

GitHub Packages에 패키지 게시

새 릴리스를 만들 때마다 워크플로를 트리거하여 패키지를 게시할 수 있습니다. 아래 예제의 워크플로는 release 이벤트가 created 형식으로 트리거될 때 실행됩니다. 이 워크플로는 CI 테스트를 통과할 경우 GitHub Packages에 패키지를 게시합니다. release 이벤트에 대한 자세한 내용은 “워크플로를 트리거하는 이벤트”를 참조하세요.

GitHub Packages를 가리키는 build.gradle의 게시 블록에서 새 Maven 리포지토리를 정의할 수 있습니다. 해당 리포지토리 구성에서 CI 워크플로 실행에 설정된 환경 변수를 활용할 수도 있습니다. GITHUB_ACTOR 환경 변수를 사용자 이름으로 사용할 수 있으며, GITHUB_TOKEN 비밀로 GITHUB_TOKEN 환경 변수를 설정할 수 있습니다.

GITHUB_TOKEN 비밀은 워크플로의 작업이 시작될 때마다 리포지토리에 대한 액세스 토큰으로 설정됩니다. contents 범위에 대한 읽기 권한을 부여하고 packages 범위에 대한 쓰기 권한을 부여하려면 워크플로 파일에서 이 액세스 토큰에 대한 사용 권한을 설정해야 합니다. 자세한 내용은 “GITHUB_TOKEN을 사용한 인증”을 참조하세요.

예를 들어 조직 이름이 “octocat”이고 리포지토리 이름이 “hello-world”인 경우 build.gradle의 GitHub Packages 구성은 아래 예제와 유사합니다.

groovy
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에 패키지를 게시하는 워크플로를 만들 수 있습니다.

YAML

# 이 워크플로는 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@v3
      - uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'adopt'
      - name: Validate Gradle wrapper
        uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
      - name: Publish package
        uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
        with:
          arguments: publish
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

이 워크플로는 다음 단계를 수행합니다.

  1. 프로젝트 리포지토리의 복사본을 체크 아웃합니다.

  2. Java JDK를 설정합니다.

  3. 리포지토리에 있는 Gradle Wrapper JAR 파일의 체크섬의 유효성을 검사합니다.

  4. publish 인수와 함께 gradle/gradle-build-action 작업을 실행하여 GitHub Packages에 게시합니다. GITHUB_TOKEN 환경 변수는 GITHUB_TOKEN 비밀의 내용으로 설정됩니다. permissions 키는 GITHUB_TOKEN 비밀이 허용하는 액세스를 지정합니다.

    워크플로에서 비밀을 사용하는 방법에 대한 자세한 내용은 “암호화된 비밀 만들기 및 사용”을 참조하세요.

Maven 중앙 리포지토리 및 GitHub Packages에 패키지 게시

build.gradle 파일에서 각각 구성하여 Maven 중앙 리포지토리와 GitHub Packages에 모두 패키지를 게시할 수 있습니다.

build.gradle 파일에 GitHub 리포지토리 및 Maven 중앙 리포지토리 공급자의 리포지토리가 둘 다 포함되어 있는지 확인합니다.

예를 들어 OSSRH 호스팅 프로젝트를 통해 중앙 리포지토리에 배포하는 경우 nameOSSRH로 설정된 배포 관리 리포지토리에서 지정하는 것이 좋습니다. GitHub Packages에 배포하는 경우 nameGitHubPackages로 설정된 배포 관리 리포지 토리에서 지정하는 것이 좋습니다.

조직 이름이 “octocat”이고 리포지토리 이름이 “hello-world”인 경우 build.gradle의 구성은 아래 예제와 유사합니다.

groovy
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에 모두 패키지를 게시하는 워크플로를 만들 수 있습니다.

YAML

# 이 워크플로는 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@v3
      - name: Set up Java
        uses: actions/setup-java@v3
        with:
          java-version: '11'
          distribution: 'adopt'
      - name: Validate Gradle wrapper
        uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
      - name: Publish package
        uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
        with:
          arguments: publish
        env: 
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

이 워크플로는 다음 단계를 수행합니다.

  1. 프로젝트 리포지토리의 복사본을 체크 아웃합니다.

  2. Java JDK를 설정합니다.

  3. 리포지토리에 있는 Gradle Wrapper JAR 파일의 체크섬의 유효성을 검사합니다.

  4. publish 인수와 함께 gradle/gradle-build-action 작업을 실행하여 OSSRH Maven 중앙 리포지토리와 GitHub Packages에 게시합니다. MAVEN_USERNAME 환경 변수는 OSSRH_USERNAME 비밀의 내용으로 설정되고, MAVEN_PASSWORD 환경 변수는 OSSRH_TOKEN 비밀의 내용으로 설정됩니다. GITHUB_TOKEN 환경 변수는 GITHUB_TOKEN 비밀의 내용으로 설정됩니다. permissions 키는 GITHUB_TOKEN 비밀이 허용하는 액세스를 지정합니다.

    워크플로에서 비밀을 사용하는 방법에 대한 자세한 내용은 “암호화된 비밀 만들기 및 사용”을 참조하세요.