このバージョンの GitHub Enterprise はこの日付をもって終了となりました: 2021-09-23. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの改善、新機能のためには、最新バージョンのGitHub Enterpriseにアップグレードしてください。 アップグレードに関する支援については、GitHub Enterprise supportに連絡してください。

MavenでのJavaのパッケージの公開

継続的インテグレーション(CI)ワークフローの一部として、Javaのパッケージをレジストリに公開するためにMavenを利用できます。

ノート: GitHub Actionsは、GitHub Enterprise Server 2.22で限定ベータとして利用可能でした。 ベータは終了しました。 GitHub Actionsは、GitHub Enterprise Server 3.0以降で一般に利用可能になりました。 詳しい情報については、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のビルドとテスト」を参照してください。

また、以下の基本的な理解があれば役立ちます。

パッケージの設定について

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.xmlossrhidで配布管理リポジトリを指定できます。

xml
<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>

この設定で、リポジトリ管理のidsetup-javaアクションに指定してやることで、パッケージをMaven Central Repositoryに公開するワークフローを作成できます。 リポジトリの認証のために、ユーザ名とパスワードを含む環境変数を提供する必要もあります。

デプロイのステップでは、リポジトリに認証してもらうユーザ名と、認証のためのパスワードあるいはトークンで設定したシークレットを環境変数に設定する必要があります。 詳しい情報については、「暗号化されたシークレットの作成と利用」を参照してください。

YAML
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 }}

このワークフローは以下のステップを実行します。

  1. プロジェクトのリポジトリのコピーをチェックアウトします。

  2. Java JDKをセットアップし、環境変数のMAVEN_USERNAMEMAVEN_PASSWORDを使ってossrhリポジトリに対する認証を追加するためにMavenのsettings.xmlファイルも設定します。

  3. ossrhリポジトリに公開するためにmvn --batch-mode deployコマンドを実行してください。 環境変数のMAVEN_USERNAMEOSSRH_USERNAMEシークレットの内容で、環境変数のMAVEN_PASSWORDOSSRH_TOKENシークレットの内容で設定されます。

    ワークフロー中でのシークレットの利用に関する詳しい情報については「暗号化されたシークレットの作成と利用」を参照してください。

GitHub Packagesへのパッケージの公開

新しいリリースを作成するたびに、パッケージを公開するワークフローを起動できます。 以下の例でのワークフローは、createdという種類でreleaseイベントが発生したときに実行されます。 このワークフローは、CIテストをパスすればGitHub Packagesにパッケージを公開します。 releaseイベントに関する詳しい情報については「ワークフローを起動するイベント」を参照してください。

このワークフロー内では、setup-javaアクションを利用できます。 このアクションは、指定されたバージョンのJDKをPATHにインストールし、GitHub Packagesにパッケージを公開するためにMavenのsettings.xmlもセットアップします。 生成されたsettings.xmlは、環境変数のGITHUB_ACTORをユーザ名、GITHUB_TOKENをパスワードとして使い、githubidでサーバーの認証を定義します。 GITHUB_TOKEN 環境変数には、特別な GITHUB_TOKEN シークレットの値が割り当てられます。

ワークフロー内のジョブが開始されるたびに、GITHUB_TOKENはそのリポジトリのアクセストークンに設定されます。 これは、ワークフローが実行されるリポジトリ内でパッケージに対する読み取り及び書き込み権限を持っています。 詳しい情報については「GITHUB_TOKENでの認証を参照してください。

Mavenベースのプロジェクトでは、GitHub Packagesのエンドポイントを指すgithubidpom.xmlファイル中に配布リポジトリを作成することによって、これらの設定を利用できます。

たとえば、Organizationの名前が"octocat"でリポジトリの名前が"hello-world"なら、pom.xml中のGitHub Packagesの設定は以下の例のようになるでしょう。

xml
<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にパッケージを公開するワークフローを作成できます。

YAML
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 }}

このワークフローは以下のステップを実行します。

  1. プロジェクトのリポジトリのコピーをチェックアウトします。

  2. Java JDKをセットアップし、自動的にMavenのsettings.xmlファイルを設定して環境変数のGITHUB_TOKENを使うようにgithub Mavenリポジトリの認証を追加します。

  3. 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へデプロイするなら、それをidossrhに設定して配布管理リポジトリ内で指定し、idgithubに設定して配布管理リポジトリ内でGitHub Packagesを指定することになるかもしれません。

YAML
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. プロジェクトのリポジトリのコピーをチェックアウトします。

  2. 1回目のsetup-javaの呼び出しを行います。 これはMavenのsettings.xmlファイルをossrhに対して設定し、認証のオプションを次のステップで定義される環境変数に設定します。

  3. ossrhリポジトリに公開するためにmvn --batch-mode deployコマンドを実行してください。 環境変数のMAVEN_USERNAMEOSSRH_USERNAMEシークレットの内容で、環境変数のMAVEN_PASSWORDOSSRH_TOKENシークレットの内容で設定されます。

  4. 2回目のsetup-javaの呼び出しを行います。 Mavenのsettings.xmlファイルをGitHub Packagesに対して自動的に設定します。

  5. GitHub Packagesに公開するためにmvn --batch-mode deployコマンドを実行してください。 環境変数GITHUB_TOKENには、GITHUB_TOKENシークレットの内容が設定されます。

    ワークフロー中でのシークレットの利用に関する詳しい情報については「暗号化されたシークレットの作成と利用」を参照してください。

問題がまだ解決していませんか?