この記事の概要
筆者は、HottyDBという検索エンジンとレコメンドエンジンの機能を搭載したRDBMSを個人開発しています!
そのHottyDBのα版を公開するにあたり、GitLabのパッケージレジストリを使いました。
この記事では、GitHub ActionsからGitLabのパッケージレジストリにMavenパッケージをDeployする手順を解説します。
ちなみに、過去の記事でHottyDBに関する解説もしていますので、よければそちらも参照してみてください!!
背景
Mavenパッケージを公開したい場合、一般にはMaven Central Repositoryを使うと思います。
ただMaven Central RepositoryはJIRAチケットによる申請が必要なので、HottyDBがまだα版であることを考えると少々面倒です。
GitLabのパッケージレジストリであれば簡単にMavenパッケージの公開や削除することができるので、今回使うことにしました!
パッケージの公開方法
前提
- ビルドツールにはGradle(Groovy DSL)を使います。
- GitHub上にJavaプロジェクトがある前提で解説します
流れ
- GitLabで公開Project作成し、Deploy Tokenを取得する
- GitHubの設定で環境変数をセットしておく
- build.gradleの設定を追加
- GitHub Actionsの設定ファイル作成
- GitHubにPushし、Releaseタグ作成
1. GitLabで公開Project作成し、Deploy Tokenを取得する
1-1. GitLabに公開Groupを作成します
Visibility level
を必ずPublicにしましょう。
1-2. 作成したGroupに公開Projectを作成
Create blank project
を選択し、空の公開プロジェクトを作成しましょう
1-3. パッケージデプロイに使うDeploy Tokenを取得しましょう
-
Settings
→Repository
→Deploy Tokens
をExpandしましょう -
Name
にmaven-publish
と入れましょう(なんでもいいですが) -
Scopes
のread_package_registry
とwrite_package_registry
にチェックを入れましょう -
Create deploy token
ボタンを押して、作成します - 一回しかTokenは表示されないので、ここでTokenをコピーしておきましょう
2. GitHubの環境変数にTokenをセットしておく
次はGitHub上での操作です。
GitHubのJavaプロジェクトのリポジトリに移動し、下記のように環境変数をセットしましょう。
(もしまだなければ作成しましょう)
-
Settings
→Security
→Secrets
→Actions
でNew Repository Secrets
のボタンを押しましょう -
Name
にGITLAB_DEPLOY_TOKEN
と入れましょう -
Value
に 先ほどコピーしておいたTokenをペーストしましょう -
Add Secret
ボタンを押してセット完了です
3. build.gradleの設定を追加
続いて、エディタなどでJavaのGradleプロジェクトの方を編集していきます。
3-1. build.gradleにpluginを追加
plugins {
id 'java'
id 'maven-publish' // 追加
}
3-2. build.gradleに以下のようなブロックを追記してください
publishing {
publications {
library(MavenPublication) {
from components.java
}
}
repositories {
maven {
url "https://gitlab.com/api/v4/projects/<プロジェクトID>/packages/maven"
name "GitLab"
credentials(HttpHeaderCredentials) {
name = 'Deploy-Token'
value = System.getenv("GITLAB_DEPLOY_TOKEN")
}
authentication {
header(HttpHeaderAuthentication)
}
}
}
}
url
の値はGitLabプロジェクトに合わせて変更する必要があります。
<プロジェクトID>
とある部分を手順1で作成したGitLabプロジェクトのIDに変更してください。
プロジェクトIDは、GitLabのプロジェクトページを見ると上の方に書いてあります。
4. GitHub Actionsの設定ファイル作成
続いての手順も、エディタなどでJavaのプロジェクト内の編集をします。
ここでは、GitHub Actionsの設定ファイルを作成します。
- リポジトリのルートディレクトリに
.github/workflows
という名前のディレクトリを作成しましょう - そこに、
maven.yaml
という名前のファイルを作成し、中身を下記のようにしましょう
name: Publish Maven package
on:
release:
types: [published]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Java
uses: actions/setup-java@v3
with:
java-version: '8'
distribution: 'adopt'
- name: Validate Gradle wrapper
uses: gradle/wrapper-validation-action@e6e38bacfdf1a337459f332974bb2327a31aaf4b
- name: Publish package
uses: gradle/gradle-build-action@0d13054264b0bb894ded474f08ebb30921341cee
with:
arguments: publish
env:
GITLAB_DEPLOY_TOKEN: ${{ secrets.GITLAB_DEPLOY_TOKEN }}
5. GitHubにPushし、Releaseタグ作成
- ここまでのJavaプロジェクトの変更をGitHubにPushしましょう
- 次に、Releaseタグを作成してください。これでGitHub Actionsが起動するはずです
- GitHubリポジトリの
Actions
タブでデプロイの進捗状況を確認してください - Actionが完了したら、GitLabプロジェクトの方を確認します。
Package Registry
にパッケージが登録されてることを確認してください。
パッケージの公開手順は以上です。
以上の手順で作成したサンプルリポジトリを下記に記します。
パッケージの利用方法
登録したパッケージの利用方法は、作成したGItLabのパッケージレジストリを見るのがわかりやすいです。
上記サンプルの場合、下記のURLとなります。
Gradle Groovy DSLの例
Gradle Groovy DSLにおける上記サンプルパッケージの利用例を示します。
build.gradle
plugins {
id 'java'
}
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
// "Add Gradle Groovy DSL repository command" の部分をここに貼り付けます
maven {
url 'https://gitlab.com/api/v4/projects/37838898/packages/maven'
}
}
dependencies {
// "Gradle Groovy DSL install command" の部分をここに貼り付けます
implementation 'org.example:gitlab-sample:1.0'
}
以上で手順は終了です!
ぜひお試しください!!