ノート: GitHubホストランナーは、現在GitHub Enterprise Serverでサポートされていません。 GitHubパブリックロードマップで、計画されている将来のサポートに関する詳しい情� �を見ることができます。
はじめに
このガイドは、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」を参照してく� さい。
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"
という名前でリポジトリを指定できます。
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によって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# サポートドキュメンテーションが適用されます。
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@0d13054264b0bb894ded474f08ebb30921341cee
with:
arguments: publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリのコピーをチェックアウトします。
-
Java JDKをセットアップします。
-
リポジトリ内にあるすべてのGradle Wrapper JARファイルのチェックサ� を検証します。
-
Runs the
gradle/gradle-build-action
action with thepublish
argument to publish to theOSSRH
Maven repository. 環境変数のMAVEN_USERNAME
はOSSRH_USERNAME
シークレットの内容で、環境変数のMAVEN_PASSWORD
はOSSRH_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.
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.
# このワークフローは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
uses: gradle/gradle-build-action@0d13054264b0bb894ded474f08ebb30921341cee
with:
arguments: publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリのコピーをチェックアウトします。
-
Java JDKをセットアップします。
-
リポジトリ内にあるすべてのGradle Wrapper JARファイルのチェックサ� を検証します。
-
Runs the
gradle/gradle-build-action
action with thepublish
argument to publish to GitHub Packages. 環境変数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にデプロイしていたなら、name
をOSSRH
に設定して配布管理リポジトリでそのことを指定できます。 GitHub Packagesにデプロイするなら、name
をGitHubPackages
に設定して配布管理リポジトリでそのことを指定できます。
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.
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によって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# サポートドキュメンテーションが適用されます。
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
uses: gradle/gradle-build-action@0d13054264b0bb894ded474f08ebb30921341cee
with:
arguments: publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリのコピーをチェックアウトします。
-
Java JDKをセットアップします。
-
リポジトリ内にあるすべてのGradle Wrapper JARファイルのチェックサ� を検証します。
-
Runs the
gradle/gradle-build-action
action with thepublish
argument to publish to theOSSRH
Maven repository and GitHub Packages. 環境変数のMAVEN_USERNAME
はOSSRH_USERNAME
シークレットの内容で、環境変数のMAVEN_PASSWORD
はOSSRH_TOKEN
シークレットの内容で設定されます。 環境変数GITHUB_TOKEN
には、GITHUB_TOKEN
シークレットの内容が設定されます。ワークフロー中でのシークレットの利用に関する詳しい情� �については「暗号化されたシークレットの作成と利用」を参照してく� さい。