注: GitHub ホステッド ランナーは、現在 GitHub Enterprise Server でサポートされていません。 GitHub public roadmap で、今後の計画的なサポートの詳細を確認できます。
はじめに
このガイドは、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へのパッケージの公開
新しいリリースを作成するたびに、パッケージを公開するワークフローを起動できます。 次の例のワークフローでは、release
イベントが created
型でトリガーされたときに実行されます。 このワークフローは、CIテストをパスすればMaven Central Repositoryにパッケージを公開します。 release
イベントの詳細については、「ワークフローをトリガーするイベント」を参照してく� さい。
このワークフローでは、setup-java
アクションを使用できます。 このアクションにより、特定のバージョンの JDK が PATH
にインストールされますが、パッケージを発行するための Maven settings.xml も構成されます。 デフォルトでは、設定ファイルはGitHub Packagesに対して設定されますが、Maven Central Repositoryなどの他のパッケージレジストリにデプロイするようにも設定できます。 pom.xml で既にディストリビューション管理リポジトリが構成されている� �合は、setup-java
アクションの呼び出し時にその id
を指定できます。
たとえば、OSSRH ホスティング プロジェクトを使用して Maven セントラル リポジトリにデプロイする� �合、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 セントラル リポジトリにパッケージを発行するワークフローを作成できます。 リポジトリの認証のために、ユーザ名とパスワードを含む環境変数を提供する必要もあります。
デプロイのステップでは、リポジトリに認証してもらうユーザ名と、認証のためのパスワードあるいはトークンで設定したシークレットを環境変数に設定する必要があります。 詳細については、暗号化されたシークレットの作成と使用に関するページを参照してく� さい。
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 settings.xml ファイルも構成して、
MAVEN_USERNAME
およびMAVEN_PASSWORD
環境変数を使用してossrh
リポジトリの認証を追� します。 -
ossrh
リポジトリに公開するには、mvn --batch-mode deploy
コマンドを実行します。MAVEN_USERNAME
環境変数にはOSSRH_USERNAME
シークレットの内容が設定され、MAVEN_PASSWORD
環境変数にはOSSRH_TOKEN
シークレットの内容が設定されます。ワークフローでシークレットを使用する方法の詳細については、暗号化されたシークレットの作成と使用に関するページを参照してく� さい。
GitHub Packagesへのパッケージの公開
新しいリリースを作成するたびに、パッケージを公開するワークフローを起動できます。 次の例のワークフローでは、release
イベントが created
型でトリガーされたときに実行されます。 このワークフローは、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
シークレットはそのリポジトリのアクセス トークンに設定されます。 ワークフロー ファイルでこのアクセス トークンにアクセス許可を設定して、contents
スコープに対する読み取りアクセス権と、packages
スコープに対する書き込みアクセス権を付与する必要があります。 詳細については、「GITHUB_TOKEN を使用した認証」を参照してく� さい。
Maven ベースのプロジェクトの� �合は、github
の id
を使用して GitHub Packages エンドポイントを指すディストリビューション リポジトリを pom.xml ファイルに作成することで、これらの設定を利用できます。
たとえば、組織の名前が "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
permissions:
contents: read
packages: write
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 を設定し、
github
Maven リポジトリでGITHUB_TOKEN
環境変数を使用するための認証を追� するように Maven settings.xml ファイルも自動的に構成します。 -
mvn --batch-mode deploy
コマンドを実行して、GitHub Packages に公開します。GITHUB_TOKEN
環境変数には、GITHUB_TOKEN
シークレットの内容が設定されます。permissions
キーには、GITHUB_TOKEN
に付与されているアクセス権を指定します。ワークフローでシークレットを使用する方法の詳細については、暗号化されたシークレットの作成と使用に関するページを参照してく� さい。
Maven Central RepositoryとGitHub Packagesへのパッケージの公開
各レジストリの setup-java
アクションを使用して、Maven セントラル リポジトリと GitHub Packages の両方にパッケージを発行できます。
pom.xml ファイルに、GitHub リポジトリと Maven セントラル リポジトリ プロバイダーの両方のディストリビューション管理リポジトリが含まれている必要があります。 たとえば、OSSRH ホスティング プロジェクトを使用してセントラル リポジトリにデプロイする� �合は、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
permissions:
contents: read
packages: write
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
とユーザー名とパスワードを参照します。
このワークフローは以下のステップを実行します。
-
プロジェクトのリポジトリのコピーをチェックアウトします。
-
初回の
setup-java
の呼び出しを行います。 これにより、ossrh
リポジトリの Maven settings.xml ファイルが構成され、次の手� �で定義されている環境変数に認証オプションが設定されます。 -
ossrh
リポジトリに公開するには、mvn --batch-mode deploy
コマンドを実行します。MAVEN_USERNAME
環境変数にはOSSRH_USERNAME
シークレットの内容が設定され、MAVEN_PASSWORD
環境変数にはOSSRH_TOKEN
シークレットの内容が設定されます。 -
2 回目の
setup-java
の呼び出しを行います。 これにより、GitHub Packages の Maven settings.xml ファイルが自動的に構成されます。 -
mvn --batch-mode deploy
コマンドを実行して、GitHub Packages に公開します。GITHUB_TOKEN
環境変数には、GITHUB_TOKEN
シークレットの内容が設定されます。permissions
キーには、GITHUB_TOKEN
に付与されているアクセス権を指定します。ワークフローでシークレットを使用する方法の詳細については、暗号化されたシークレットの作成と使用に関するページを参照してく� さい。