はじめに
このガイドは、JavaのパッケージをGitHub PackagesやMaven Central Repositoryに公開するワークフローの作成方法を紹介します。 1つのワークフローで、パッケージを1つのリポジトリあるいは複数のリポジトリに公開できます。
必要な環境
ワークフローファイルと設定オプションに関する基本的な理解をしておくことをおすすめします。 詳しい情報については、「GitHub Actions を学ぶ」を参照してください。
GradleでのJavaプロジェクトのためのCIワークフローの作成に関する詳しい情報については「GradleでのJavaのビルドとテスト」を参照してください。
また、以下の基本的な理解があれば役立ちます。
パッケージの設定について
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"
という名前でリポジトリを指定できます。
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リポジトリの認証に使うトークンを環境変数に設定する必要があります。 詳しい情報については、「暗号化されたシークレットの作成と利用」を参照してください。
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@v1
with:
java-version: 1.8
- name: Publish package
run: gradle publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリのコピーをチェックアウトします。
-
Java JDKをセットアップします。
-
gradle publish
コマンドを実行して、OSSRH
Mavenリポジトリに公開してください。 環境変数の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での認証」を参照してください。
たとえば、Organizationの名前が"octocat"でリポジトリの名前が"hello-world"なら、build.gradle中のGitHub Packagesの設定は以下の例のようになるでしょう。
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
コマンドの実行によってパッケージをMaven Central Repositoryに公開するワークフローを作成できます。
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@v1
with:
java-version: 1.8
- name: Publish package
run: gradle publish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリのコピーをチェックアウトします。
-
Java JDKをセットアップします。
-
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にデプロイしていたなら、name
をOSSRH
に設定して配布管理リポジトリでそのことを指定できます。 GitHub Packagesにデプロイするなら、name
をGitHubPackages
に設定して配布管理リポジトリでそのことを指定できます。
Organizationの名前が"octocat"でリポジトリの名前が"hello-world"なら、build.gradle中のGitHub Packagesの設定は以下の例のようになるでしょう。
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の両方に公開するワークフローを作成できます。
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@v1
with:
java-version: 1.8
- name: Publish to the Maven Central Repository
run: gradle publish
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリのコピーをチェックアウトします。
-
Java JDKをセットアップします。
-
OSSRH
MavenリポジトリとGitHub Packagesに公開するためにgradle publish
コマンドを実行してください。 環境変数のMAVEN_USERNAME
はOSSRH_USERNAME
シークレットの内容で、環境変数のMAVEN_PASSWORD
はOSSRH_TOKEN
シークレットの内容で設定されます。 環境変数GITHUB_TOKEN
には、GITHUB_TOKEN
シークレットの内容が設定されます。ワークフロー中でのシークレットの利用に関する詳しい情報については「暗号化されたシークレットの作成と利用」を参照してください。