このバージョンの GitHub Enterprise はこの日付をもって終了となりました: 2021-09-23. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの改善、新機能のためには、最新バージョンのGitHub Enterpriseにアップグレードしてください。 アップグレードに関する支援については、GitHub Enterprise supportに連絡してください。

GradleでのJavaパッケージの公開

継続的インテグレーション(CI)ワークフローの一部として、Javaのパッケージをレジストリに公開するためにGradleを利用できます。

ノート: GitHub Actionsは、GitHub Enterprise Server 2.22で限定ベータとして利用可能でした。 ベータは終了しました。 GitHub Actionsは、GitHub Enterprise Server 3.0以降で一般に利用可能になりました。 詳しい情報については、GitHub Enterprise Server 3.0 のリリースノートを参照してください。


ノート: GitHubホストランナーは、現在GitHub Enterprise Serverでサポートされていません。 GitHubパブリックロードマップで、計画されている将来のサポートに関する詳しい情報を見ることができます。

はじめに

このガイドは、JavaのパッケージをGitHub PackagesやMaven Central Repositoryに公開するワークフローの作成方法を紹介します。 1つのワークフローで、パッケージを1つのリポジトリあるいは複数のリポジトリに公開できます。

必要な環境

ワークフローファイルと設定オプションに関する基本的な理解をしておくことをおすすめします。 詳しい情報については、「GitHub Actions を学ぶ」を参照してください。

GradleでのJavaプロジェクトのためのCIワークフローの作成に関する詳しい情報については「GradleでのJavaのビルドとテスト」を参照してください。

また、以下の基本的な理解があれば役立ちます。

パッケージの設定について

build.gradleファイルのMavenPublicationセクションにあるgroupId及びartifactIdフィールドは、レジストリがパッケージをレジストリにリンクするために使用する、パッケージのためのユニークな識別子を生成します。 これは、Mavenのpom.xmlファイルにおけるgroupIdartifactIdに似ています。 詳しい情報については、Gradleのドキュメンテーションの「Maven Publish Plugin」を参照してください。

build.gradleファイルには、Gradleがパッケージを公開する配布管理リポジトリの設定も含まれています。 各リポジトリは、名前、デプロイメントのURL、認証のためのクレデンシャルを持っていなければなりません。

Maven Central Repositoryへのパッケージの公開

新しいリリースを作成するたびに、パッケージを公開するワークフローを起動できます。 以下の例でのワークフローは、createdという種類でreleaseイベントが発生したときに実行されます。 このワークフローは、CIテストをパスすればMaven Central Repositoryにパッケージを公開します。 releaseイベントに関する詳しい情報については「ワークフローを起動するイベント」を参照してください。

build.gradleファイルのpublishingブロックには、パッケージリポジトリを指す新しいMavenリポジトリを定義できます。 たとえば、OSSRHホスティングプロジェクトを通じてMaven Central Repositoryにデプロイしていたなら、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 Central Repositoryに公開するワークフローを作成できます。 デプロイのステップでは、ユーザ名とパスワードのための環境変数か、Mavenリポジトリの認証に使うトークンを環境変数に設定する必要があります。 詳しい情報については、「暗号化されたシークレットの作成と利用」を参照してください。

YAML
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# サポートドキュメンテーションが適用されます。

name: Publish package to the Maven Central Repository
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Set up Java
        uses: actions/setup-java@v2
        with:
          java-version: '11'
          distribution: 'adopt'
      - name: Validate Gradle wrapper
        uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
      - name: Publish package
        run: gradle publish
        env:
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}

このワークフローは以下のステップを実行します。

  1. プロジェクトのリポジトリのコピーをチェックアウトします。

  2. Java JDKをセットアップします。

  3. リポジトリ内にあるすべてのGradle Wrapper JARファイルのチェックサムを検証します。

  4. gradle publishコマンドを実行して、OSSRH Mavenリポジトリに公開してください。 環境変数のMAVEN_USERNAMEOSSRH_USERNAMEシークレットの内容で、環境変数のMAVEN_PASSWORDOSSRH_TOKENシークレットの内容で設定されます。

    ワークフロー中でのシークレットの利用に関する詳しい情報については「暗号化されたシークレットの作成と利用」を参照してください。

GitHub Packagesへのパッケージの公開

新しいリリースを作成するたびに、パッケージを公開するワークフローを起動できます。 以下の例でのワークフローは、createdという種類でreleaseイベントが発生したときに実行されます。 このワークフローは、CIテストをパスすればGitHub Packagesにパッケージを公開します。 releaseイベントに関する詳しい情報については「ワークフローを起動するイベント」を参照してください。

build.gradleのpublishingブロックには、GitHub Packagesを指す新しいMavenリポジトリを定義できます。 そのリポジトリの設定では、CIワークフローの実行で設定された環境変数を活用することもできます。 環境変数のGITHUB_ACTORはユーザ名として利用でき、環境変数のGITHUB_TOKENにはGITHUB_TOKENシークレットを設定できます。

ワークフロー内のジョブが開始されるたびに、GITHUB_TOKENはそのリポジトリのアクセストークンに設定されます。 これは、ワークフローが実行されるリポジトリ内でパッケージに対する読み取り及び書き込み権限を持っています。 詳しい情報については「GITHUB_TOKENでの認証を参照してください。

For example, if your organization is named "octocat" and your repository is named "hello-world", then the GitHub Packages configuration in build.gradle would look similar to the below example.

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")
      }
    }
  }
}

With this configuration, you can create a workflow that publishes your package to GitHub Packages by running the gradle publish command.

YAML
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# サポートドキュメンテーションが適用されます。

name: Publish package to GitHub Packages
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest 
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-java@v2
        with:
          java-version: '11'
          distribution: 'adopt'
      - name: Validate Gradle wrapper
        uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
      - name: Publish package
        run: gradle publish
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

このワークフローは以下のステップを実行します。

  1. プロジェクトのリポジトリのコピーをチェックアウトします。

  2. Java JDKをセットアップします。

  3. リポジトリ内にあるすべてのGradle Wrapper JARファイルのチェックサムを検証します。

  4. GitHub Packagesに公開するためにgradle publishコマンドを実行してください。 環境変数GITHUB_TOKENには、GITHUB_TOKENシークレットの内容が設定されます。

    ワークフロー中でのシークレットの利用に関する詳しい情報については「暗号化されたシークレットの作成と利用」を参照してください。

Maven Central RepositoryとGitHub Packagesへのパッケージの公開

build.gradle ファイルでそれぞれについて設定すれば、Maven Central RepositoryとGitHub Packagesの両方にパッケージを公開できます。

build.gradleファイルに、GitHubリポジトリとMaven Central Repositoryプロバイダの双方に対するリポジトリを確実に含めてください。

たとえば、OSSRHホスティングプロジェクトを通じてMaven Central Repositoryにデプロイしていたなら、nameOSSRH に設定して配布管理リポジトリでそのことを指定できます。 GitHub Packagesにデプロイするなら、nameGitHubPackagesに設定して配布管理リポジトリでそのことを指定できます。

If your organization is named "octocat" and your repository is named "hello-world", then the configuration in build.gradle would look similar to the below example.

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 Central RepositoryとGitHub Packagesの両方に公開するワークフローを作成できます。

YAML
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# サポートドキュメンテーションが適用されます。

name: Publish package to the Maven Central Repository and GitHub Packages
on:
  release:
    types: [created]
jobs:
  publish:
    runs-on: ubuntu-latest 
    steps:
      - uses: actions/checkout@v2
      - name: Set up Java
        uses: actions/setup-java@v2
        with:
          java-version: '11'
          distribution: 'adopt'
      - name: Validate Gradle wrapper
        uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
      - name: Publish package
        run: gradle 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. OSSRH MavenリポジトリとGitHub Packagesに公開するために gradle publishコマンドを実行してください。 環境変数のMAVEN_USERNAMEOSSRH_USERNAMEシークレットの内容で、環境変数のMAVEN_PASSWORDOSSRH_TOKENシークレットの内容で設定されます。 環境変数GITHUB_TOKENには、GITHUB_TOKENシークレットの内容が設定されます。

    ワークフロー中でのシークレットの利用に関する詳しい情報については「暗号化されたシークレットの作成と利用」を参照してください。

問題がまだ解決していませんか?