Skip to main content

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

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

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

소개

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

필수 조건

워크플로 파일 및 구성 옵션을 기본적으로 이해하는 것이 좋습니다. 자세한 내용은 "워크플로 작성"을(를) 참조하세요.

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 리포지토리에 인증하는 데 사용하는 사용자 이름과 암호 또는 토큰의 환경 변수를 설정해야 합니다. 자세한 내용은 "GitHub Actions에서 비밀 사용"을(를) 참조하세요.

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@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 }}

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

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

  2. Java JDK를 설정합니다.

  3. Gradle 환경을 설정합니다. 이 gradle/actions/setup-gradle 작업은 워크플로 실행 간의 캐싱 상태를 처리하고 모든 Gradle 실행에 대한 자세한 요약을 제공합니다.

  4. 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 구성은 아래 예제와 유사합니다.

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@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 }}

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

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

  2. Java JDK를 설정합니다.

  3. Gradle 환경을 설정합니다. 이 gradle/actions/setup-gradle 작업은 워크플로 실행 간의 캐싱 상태를 처리하고 모든 Gradle 실행에 대한 자세한 요약을 제공합니다.

  4. 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 호스팅 프로젝트를 통해 중앙 리포지토리에 배포하는 경우 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@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 }}

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

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

  2. Java JDK를 설정합니다.

  3. Gradle 환경을 설정합니다. 이 gradle/actions/setup-gradle 작업은 워크플로 실행 간의 캐싱 상태를 처리하고 모든 Gradle 실행에 대한 자세한 요약을 제공합니다.

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

    워크플로에서 비밀을 사용하는 방법에 대한 자세한 내용은 "GitHub Actions에서 비밀 사용"을(를) 참조하세요.