ノート: GitHub Actionsは、GitHub Enterprise Server 2.22で限定ベータとして利用可能でした。 ベータは終了しました。 GitHub Actionsは、GitHub Enterprise Server 3.0以降で一般に利用可能になりました。 詳しい情報については、GitHub Enterprise Server 3.0 のリリースノートを参照してください。
- GitHub Enterprise Server 3.0以降へのアップグレードに関する詳しい情報については「GitHub Enterprise Serverのアップグレード」を参照してください。
- アップグレード後のGitHub Actionsの設定に関する詳しい情報については、GitHub Enterprise Server 3.0のドキュメンテーションを参照してください。
ノート: 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
シークレットの内容が設定されます。ワークフロー中でのシークレットの利用に関する詳しい情報については「暗号化されたシークレットの作成と利用」を参照してください。