ノート: GitHubホストランナーは、現在GitHub Enterprise Serverでサポートされていません。 GitHubパブリックロードマップで、計画されている将来のサポートに関する詳しい情� �を見ることができます。
はじめに
このガイドは、JavaのパッケージをGitHub PackagesやMaven Central Repositoryに公開するワークフローの作成方法を紹介します。 1つのワークフローで、パッケージを1つのリポジトリあるいは複数のリポジトリに公開できます。
必要な環境
ワークフローファイルと設定オプションに関する基本的な理解をしておくことをおすすめします。 詳しい情� �については、「GitHub Actions を学ぶ」を参照してく� さい。
MavenでのJavaプロジェクトのためのCIワークフローの作成に関する詳しい情� �については「MavenでのJavaのビルドとテスト」を参照してく� さい。
また、以下の基本的な理解があれば役立ちます。
- 「npm レジストリの利用」
- 「環境変数」
- 「暗号化されたシークレット」
- 「ワークフローでの認証」
パッケージの設定について
pom.xmlファイル中のgroupId
及びartifactId
フィールドは、レジストリがパッケージをレジストリにリンクするために利用するパッケージのユニークな識別子を作成します。 詳しい情� �については、Apache MavenのドキュメンテーションのGuide to uploading artifacts to the Central Repositoryを参照してく� さい。
pom.xmlファイルには、Mavenがパッケージをデプロイする配布管理リポジトリの設定も含まれています。 各リポジトリは、名前とデプロイメントURLを持たなければなりません。 これらのリポジトリに対する認証は、Mavenを実行するユーザーのホー� ディレクトリ内の.m2/settings.xmlファイルに設定できます。
setup-java
アクションを使って、デプロイメントリポジトリを認証と合わせて設定できます。 詳しい情� �についてはsetup-java
を参照してく� さい。
Maven Central Repositoryへのパッケージの公開
新しいリリースを作成するたびに、パッケージを公開するワークフローを起動できます。 以下の例でのワークフローは、created
という種類でrelease
イベントが発生したときに実行されます。 このワークフローは、CIテストをパスすればMaven Central Repositoryにパッケージを公開します。 release
イベントに関する詳しい情� �については「ワークフローを起動するイベント」を参照してく� さい。
このワークフロー内では、setup-java
アクションを利用できます。 このアクションは、指定されたバージョンのJDKをPATH
にインストールしますが、パッケージの公開のためのMavenのsettings.xmlも設定します。 デフォルトでは、設定ファイルはGitHub Packagesに対して設定されますが、Maven Central Repositoryなどの他のパッケージレジストリにデプロイするようにも設定できます。 pom.xmlに設定済みの配布管理リポジトリがすでにあるなら、setup-java
アクションの呼び出しの際にそのid
を指定できます。
たとえば、OSSRHホスティングプロジェクトを通じてMaven Central Repositoryにデプロイしていたなら、pom.xml はossrh
のid
で配布管理リポジトリを指定できます。
<project ...>
...
<distributionManagement>
<repository>
<id>ossrh</id>
<name>Central Repository OSSRH</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</project>
この設定で、リポジトリ管理のid
をsetup-java
アクションに指定してやることで、パッケージをMaven Central Repositoryに公開するワークフローを作成できます。 リポジトリの認証のために、ユーザ名とパスワードを含む環境変数を提供する必要もあります。
デプロイのステップでは、リポジトリに認証してもらうユーザ名と、認証のためのパスワードあるいはトークンで設定したシークレットを環境変数に設定する必要があります。 詳しい情� �については、「暗号化されたシークレットの作成と利用」を参照してく� さい。
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 Maven Central Repository
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Publish package
run: mvn --batch-mode deploy
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリのコピーをチェックアウトします。
-
Java JDKをセットアップし、環境変数の
MAVEN_USERNAME
とMAVEN_PASSWORD
を使ってossrh
リポジトリに対する認証を追� するためにMavenのsettings.xmlファイルも設定します。 -
ossrh
リポジトリに公開するためにmvn --batch-mode deploy
コマンドを実行してく� さい。 環境変数のMAVEN_USERNAME
はOSSRH_USERNAME
シークレットの内容で、環境変数のMAVEN_PASSWORD
はOSSRH_TOKEN
シークレットの内容で設定されます。ワークフロー中でのシークレットの利用に関する詳しい情� �については「暗号化されたシークレットの作成と利用」を参照してく� さい。
GitHub Packagesへのパッケージの公開
新しいリリースを作成するたびに、パッケージを公開するワークフローを起動できます。 以下の例でのワークフローは、created
という種類でrelease
イベントが発生したときに実行されます。 このワークフローは、CIテストをパスすればGitHub Packagesにパッケージを公開します。 release
イベントに関する詳しい情� �については「ワークフローを起動するイベント」を参照してく� さい。
このワークフロー内では、setup-java
アクションを利用できます。 このアクションは、指定されたバージョンのJDKをPATH
にインストールし、GitHub Packagesにパッケージを公開するためにMavenのsettings.xmlもセットアップします。 生成されたsettings.xmlは、環境変数のGITHUB_ACTOR
をユーザ名、GITHUB_TOKEN
をパスワードとして使い、github
のid
でサーバーの認証を定義します。 GITHUB_TOKEN
環境変数には、特別な GITHUB_TOKEN
シークレットの値が割り当てられます。
ワークフロー内のジョブが開始されるたびに、GITHUB_TOKEN
はそのリポジトリのアクセストークンに設定されます。 これは、ワークフローが実行されるリポジトリ内でパッケージに対する読み取り及び書き込み権限を持っています。 詳しい情� �については「GITHUB_TOKENでの認証を参照してく� さい。
Mavenベースのプロジェクトでは、GitHub Packagesのエンドポイントを指すgithub
のid
でpom.xmlファイル中に配布リポジトリを作成することによって、これらの設定を利用できます。
たとえば、Organizationの名前が"octocat"でリポジトリの名前が"hello-world"なら、pom.xml中のGitHub Packagesの設定は以下の例のようになるでしょう。
<project ...>
...
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub Packages</name>
<url>https://maven.pkg.github.com/octocat/hello-world</url>
</repository>
</distributionManagement>
</project>
この設定で、自動的に生成されたsettings.xmlを利用してGitHub Packagesにパッケージを公開するワークフローを作成できます。
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: Publish package
run: mvn --batch-mode deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリのコピーをチェックアウトします。
-
Java JDKをセットアップし、自動的にMavenのsettings.xmlファイルを設定して環境変数の
GITHUB_TOKEN
を使うようにgithub
Mavenリポジトリの認証を追� します。 -
GitHub Packagesに公開するために
mvn --batch-mode deploy
コマンドを実行してく� さい。 環境変数GITHUB_TOKEN
には、GITHUB_TOKEN
シークレットの内容が設定されます。ワークフロー中でのシークレットの利用に関する詳しい情� �については「暗号化されたシークレットの作成と利用」を参照してく� さい。
Maven Central RepositoryとGitHub Packagesへのパッケージの公開
setup-java
アクションをそれぞれのレジストリに対して利用すれば、Maven Central RepositoryとGitHub Packagesの両方にパッケージを公開できます。
pom.xmlファイルに、GitHubリポジトリとMaven Central Repositoryプロバイダの双方に対する配布管理リポジトリを確実に含めてく� さい。 たとえば、OSSRHホスティングプロジェクトを通じてCentral Repositoryへデプロイするなら、それをid
をossrh
に設定して配布管理リポジトリ内で指定し、id
をgithub
に設定して配布管理リポジトリ内で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 for publishing to Maven Central Repository
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
server-id: ossrh
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Publish to the Maven Central Repository
run: mvn --batch-mode deploy
env:
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
- name: Set up Java for publishing to GitHub Packages
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
- name: Publish to GitHub Packages
run: mvn --batch-mode deploy
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
このワークフローは、setup-java
アクションを2回呼びます。 実行される度に、setup-java
アクションはMavenのsettings.xmlをパッケージの公開のために上書きします。 リポジトリの認証については、settings.xmlファイルは配布管理リポジトリのid
、及びユーザ名とパスワードを参照します。
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリのコピーをチェックアウトします。
-
1回目の
setup-java
の呼び出しを行います。 これはMavenのsettings.xmlファイルをossrh
に対して設定し、認証のオプションを次のステップで定義される環境変数に設定します。 -
ossrh
リポジトリに公開するためにmvn --batch-mode deploy
コマンドを実行してく� さい。 環境変数のMAVEN_USERNAME
はOSSRH_USERNAME
シークレットの内容で、環境変数のMAVEN_PASSWORD
はOSSRH_TOKEN
シークレットの内容で設定されます。 -
2回目の
setup-java
の呼び出しを行います。 Mavenのsettings.xmlファイルをGitHub Packagesに対して自動的に設定します。 -
GitHub Packagesに公開するために
mvn --batch-mode deploy
コマンドを実行してく� さい。 環境変数GITHUB_TOKEN
には、GITHUB_TOKEN
シークレットの内容が設定されます。ワークフロー中でのシークレットの利用に関する詳しい情� �については「暗号化されたシークレットの作成と利用」を参照してく� さい。