はじめに
このガイドは、JavaのパッケージをGitHub PackagesやMaven Central Repositoryに公開するワークフローの作成方法を紹介します。 1つのワークフローで、パッケージを1つのリポジトリあるいは複数のリポジトリに公開できます。
前提条件
ワークフローファイルと設定オプションに関する基本的な理解をしておくことをおすすめします。 詳しくは、「ワークフローの書き込み」を参照してください。
Maven を使用して Java プロジェクトの CI ワークフローを作成する方法の詳細については、「MavenでのJavaのビルドとテスト」を参照してください。
また、以下の基本的な理解があれば役立ちます。
パッケージの設定について
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>
<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 セントラル リポジトリにパッケージを発行するワークフローを作成できます。 リポジトリの認証のために、ユーザ名とパスワードを含む環境変数を提供する必要もあります。
デプロイのステップでは、リポジトリに認証してもらうユーザ名と、認証のためのパスワードあるいはトークンで設定したシークレットを環境変数に設定する必要があります。 詳しくは、「GitHub Actions でのシークレットの使用」を参照してください。
name: Publish package to the Maven Central Repository on: release: types: [created] jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Maven Central Repository uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' 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 }}
name: Publish package to the Maven Central Repository
on:
release:
types: [created]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Maven Central Repository
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
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 Actions でのシークレットの使用」を参照してください。
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
アクセス許可に対する書き込みアクセスを付与する必要があります。 詳しくは、「自動トークン認証」を参照してください。
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>
<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@v4 - uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' - name: Publish package run: mvn --batch-mode deploy env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
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@v4
- uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
- 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
に付与されているアクセス権を指定します。ワークフローでシークレットを使う方法について詳しくは、「GitHub Actions でのシークレットの使用」を参照してください。
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@v4 - name: Set up Java for publishing to Maven Central Repository uses: actions/setup-java@v4 with: java-version: '11' distribution: 'temurin' 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@v4 with: java-version: '11' distribution: 'temurin' - name: Publish to GitHub Packages run: mvn --batch-mode deploy env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
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@v4
- name: Set up Java for publishing to Maven Central Repository
uses: actions/setup-java@v4
with:
java-version: '11'
distribution: 'temurin'
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@v4
with:
java-version: '11'
distribution: 'temurin'
- 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
に付与されているアクセス権を指定します。ワークフローでシークレットを使う方法について詳しくは、「GitHub Actions でのシークレットの使用」を参照してください。