注: GitHub ホステッド ランナーは、現在 GitHub Enterprise Server でサポートされていません。 GitHub public roadmap で、今後の計画的なサポートの詳細を確認できます。
はじめに
このガイドは、JavaのパッケージをGitHub PackagesやMaven Central Repositoryに公開するワークフローの作成方法を紹介します。 1つのワークフローで、パッケージを1つのリポジトリあるいは複数のリポジトリに公開できます。
前提条件
ワークフローファイルと設定オプションに関する基本的な理解をしておくことをおすすめします。 詳細については、「GitHub Actions について学ぶ」を参照してく� さい。
Gradle を使用して Java プロジェクトの CI ワークフローを作成する方法の詳細については、「Gradle での Java のビルドとテスト」を参照してく� さい。
また、以下の基本的な理解があれば役立ちます。
- "npm レジストリの操作"
- "環境変数"
- "暗号化されたシークレット"
- "ワークフローでの認証"
パッケージの設定について
build.gradle ファイルの MavenPublication
セクションの groupId
および artifactId
フィールドにより、パッケージをレジストリにリンクするためにレジストリで使われる、パッケージに対する一意の識別子が作成されます。 これは、Maven の pom.xml ファイルの groupId
および artifactId
フィールドと似ています。 詳細については、Gradle のドキュメントの「Maven Publish Plugin (Maven 公開プラグイン)」を参照してく� さい。
build.gradle ファイルには、Gradle によるパッケージの公開先である配布管理リポジトリの設定も含まれています。 各リポジトリは、名前、デプロイメントのURL、認証のためのクレデンシャルを持っていなければなりません。
Maven Central Repositoryへのパッケージの公開
新しいリリースを作成するたびに、パッケージを公開するワークフローを起動できます。 次の例のワークフローでは、release
イベントが created
型でトリガーされたときに実行されます。 このワークフローは、CIテストをパスすればMaven Central Repositoryにパッケージを公開します。 release
イベントの詳細については、「ワークフローをトリガーするイベント」を参照してく� さい。
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リポジトリの認証に使うトークンを環境変数に設定する必要があります。 詳細については、「暗号化されたシークレットの作成と使用」を参照してく� さい。
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してく� さい。
# 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@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
uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
with:
arguments: publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリのコピーをチェックアウトします。
-
Java JDKをセットアップします。
-
リポジトリ内にあるすべてのGradle Wrapper JARファイルのチェックサ� を検証します。
-
OSSRH
Maven リポジトリに公開するには、publish
引数を指定してgradle/gradle-build-action
アクションを実行します。MAVEN_USERNAME
環境変数にはOSSRH_USERNAME
シークレットの内容が設定され、MAVEN_PASSWORD
環境変数にはOSSRH_TOKEN
シークレットの内容が設定されます。ワークフローでシークレットを使用する方法の詳細については、暗号化されたシークレットの作成と使用に関するページを参照してく� さい。
GitHub Packagesへのパッケージの公開
新しいリリースを作成するたびに、パッケージを公開するワークフローを起動できます。 次の例のワークフローでは、release
イベントが created
型でトリガーされたときに実行されます。 このワークフローは、CIテストをパスすればGitHub Packagesにパッケージを公開します。 release
イベントの詳細については、「ワークフローをトリガーするイベント」を参照してく� さい。
GitHub Packages を指す build.gradle の publishing ブロックで、新しい Maven リポジトリを定義できます。 そのリポジトリの設定では、CIワークフローの実行で設定された環境変数を活用することもできます。 GITHUB_ACTOR
環境変数をユーザー名として使用でき、GITHUB_TOKEN
環境変数に GITHUB_TOKEN
シークレットを設定できます。
ワークフロー内のジョブが開始されるたびに、GITHUB_TOKEN
シークレットはそのリポジトリのアクセス トークンに設定されます。 ワークフロー ファイルでこのアクセス トークンにアクセス許可を設定して、contents
スコープに対する読み取りアクセス権と、packages
スコープに対する書き込みアクセス権を付与する必要があります。 詳細については、「GITHUB_TOKEN を使用した認証」を参照してく� さい。
たとえば、Organization の名前が "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 に公開するワークフローを作成できます。
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してく� さい。
# 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@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
uses: gradle/gradle-build-action@67421db6bd0bf253fb4bd25b31ebb98943c375e1
with:
arguments: publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリのコピーをチェックアウトします。
-
Java JDKをセットアップします。
-
リポジトリ内にあるすべてのGradle Wrapper JARファイルのチェックサ� を検証します。
-
GitHub Packages に公開するには、
publish
引数を指定してgradle/gradle-build-action
アクションを実行します。GITHUB_TOKEN
環境変数には、GITHUB_TOKEN
シークレットの内容が設定されます。permissions
キーでは、GITHUB_TOKEN
シークレットによって許可されるアクセス権を指定します。ワークフローでシークレットを使用する方法の詳細については、暗号化されたシークレットの作成と使用に関するページを参照してく� さい。
Maven Central RepositoryとGitHub Packagesへのパッケージの公開
build.gradle ファイルでそれぞれを構成することにより、Maven Central Repository と GitHub Packages の両方にパッケージを公開できます。
build.gradle ファイルに、GitHub リポジトリと Maven Central Repository プロバイダー両方に対するリポジトリを含めます。
たとえば、OSSRH ホスティング プロジェクトを通じて Central Repository にデプロイする� �合は、name
を OSSRH
に設定して、配布管理リポジトリでそのことを指定できます。 GitHub Packages にデプロイする� �合は、name
を GitHubPackages
に設定することで、配布管理リポジトリでそのことを指定できます。
Organization の名前が "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 の両方に公開するワークフローを作成できます。
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してく� さい。
# 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@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
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 }}
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリのコピーをチェックアウトします。
-
Java JDKをセットアップします。
-
リポジトリ内にあるすべてのGradle Wrapper JARファイルのチェックサ� を検証します。
-
OSSRH
Maven リポジトリと GitHub Packages に公開するには、publish
引数を指定してgradle/gradle-build-action
アクションを実行します。MAVEN_USERNAME
環境変数にはOSSRH_USERNAME
シークレットの内容が設定され、MAVEN_PASSWORD
環境変数にはOSSRH_TOKEN
シークレットの内容が設定されます。GITHUB_TOKEN
環境変数には、GITHUB_TOKEN
シークレットの内容が設定されます。permissions
キーでは、GITHUB_TOKEN
シークレットによって許可されるアクセス権を指定します。ワークフローでシークレットを使用する方法の詳細については、暗号化されたシークレットの作成と使用に関するページを参照してく� さい。