GitHub PackagesへJARをデプロイする
概要
GitHub PackagesへJARをデプロイする方法を書きます。
基本的なことは次の公式ドキュメントに書かれています。
公式ドキュメントの内容と重なる部分もありますが、ローカルから手動でJARをデプロイする方法とデプロイしたJARを使う方法、それからGitHub Actionsでデプロイする方法を書きます。
とりあえずローカルから手動でデプロイする
手順は次の通りです。
- Personal access tokenを作る
-
~/.m2/settings.xmlへデプロイ先となるMavenリポジトリの認証情報を書く -
pom.xmlへデプロイ先となるMavenリポジトリ情報を書く - デプロイする
1. Personal access tokenを作る
https://github.com/settings/tokens からPersonal access tokenを作ります。
デプロイしたいので、write:packagesスコープにチェックしてください。
2. ~/.m2/settings.xmlへデプロイ先となるMavenリポジトリの認証情報を書く
username要素にはGitHubのアカウント名を、password要素には先ほど作ったPersonal access tokenを記載します(ここではユーザー名はbackpaper0とします)。
<server>
<id>github</id>
<username>backpaper0</username>
<password>※ここにPersonal access tokenを書く</password>
</server>
~/.m2/settings.xmlが無い場合は作成してください。
Mavenのconfディレクトリにあるものをコピーすると良いです。
Mavenのホームディレクトリはmvn --versionすればわかります(どこにあるかわかっていなかった、、、)。
また、Personal access tokenを平文で書きたくない場合はmvn -epで暗号化できます。
詳しくはMaven – Password Encryptionを参照ください。
3. pom.xmlへデプロイ先となるMavenリポジトリ情報を書く
MavenリポジトリのURLはユーザー名、Gitリポジトリ名によって変わります。
ここではユーザー名はbackpaper0、Gitリポジトリ名はdemoとします(GitHubにはdemoというGitリポジトリを作成していることとします)。
<distributionManagement>
<repository>
<id>github</id>
<name>GitHub OWNER Apache Maven Packages</name>
<url>https://maven.pkg.github.com/backpaper0/demo</url>
</repository>
</distributionManagement>
4. デプロイする
mvnコマンドでデプロイできます。
mvn deploy
ソースコードとJavadocもデプロイする
ちなみに、pom.xmlに次のようにmaven-source-pluginとmaven-javadoc-pluginの設定をすればソースコードのJARとJavadocのJARもデプロイできます。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
デプロイしたJARを使用する
手順は次の通りです。
-
pom.xmlへMavenリポジトリ情報を書く -
dependencyを追加する
ちなみに、認証は必要なのでPersonal access tokenと~/.m2/settings.xmlの準備をしていない場合はしておいてください。
なお、デプロイするのではなく参照するだけならPersonal access tokenのスコープはread:packagesで大丈夫です。
1. pom.xmlへMavenリポジトリ情報を書く
Mavenリポジトリの情報はデプロイの際に書いたものと同じです。
SNAPSHOTバージョンも使用する場合はsnapshots要素内のenabled要素へtrueを書いておきましょう。
<repositories>
<repository>
<id>github</id>
<name>GitHub OWNER Apache Maven Packages</name>
<url>https://maven.pkg.github.com/backpaper0/demo</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
2. dependencyを追加する
あとはpom.xmlへデプロイしたJARの情報を書いたdependency要素を追加すると使えます。
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.1-SNAPSHOT</version>
</dependency>
</dependencies>
GitHub Actionsでデプロイする
手順は次の通りです。
- 専用の
settings.xmlを用意する - ワークフローのYAMLを書く
1. 専用のsettings.xmlを用意する
GitHub Actionsでデプロイする場合、ローカルの~/.m2/settings.xmlは使えないためsettings.xmlもGitリポジトリへ追加します。
Personal access tokenを書くわけにはいかないので、環境変数から読み取るようにします。
ここでは環境変数GITHUB_TOKENとします。
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<servers>
<server>
<id>github</id>
<username>backpaper0</username>
<password>${env.GITHUB_TOKEN}</password>
</server>
</servers>
</settings>
2. ワークフローのYAMLを書く
GitHub Actionsで次のコマンドを実行するとデプロイできます。
GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} mvn -B -s settings.xml deploy
ポイントは次の通りです。
- Personal access tokenを
secretsコンテキストから読み取って環境変数GITHUB_TOKENへセットする(settings.xmlへ渡すため) -
-sでGitリポジトリへ追加したsettings.xmlを使用する
secrets.GITHUB_TOKENについて詳しくはワークフローで認証するを参照してください。
YAMLファイル全体は次のようになります。
name: Java CI with Maven
on:
push:
branches: [ master ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Cache local Maven repository
uses: actions/cache@v2
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: Release Maven package
run: GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} mvn -B -s settings.xml deploy
以上です。
Discussion