ノート: 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を使うようにgithubMavenリポジトリの認証を追� します。 -
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シークレットの内容が設定されます。ワークフロー中でのシークレットの利用に関する詳しい情� �については「暗号化されたシークレットの作成と利用」を参照してく� さい。