はじめに
こんにちは!アルバイトスタッフの吉田です。
OPTiM Geo Scan のバックエンドを担当しています。
この度、プロダクト間での共通ライブラリを作成する方法についての調査と開発を行ったので、それについて書いていこうと思います。
目次
直面していた課題
プロダクト間で共通する部分がそれぞれ個別で開発されていました。 このままにしていると同じことを何度もするといった、無駄な作業が出てきてしまうので、共通部分をライブラリとして切り出してプロダクト間で流用できるようにすることとなりました。
GitLab Package Registryについて
いろいろ調べていると、GitLab Package Registry というものに辿り着きました。
GitLab Package Registry とは、GitLabを様々なパッケージマネージャーのレジストリとして利用できる機能で、Maven、npm、NuGet、PyPIなどがサポートされています。(サポートされているパッケージマネージャー)
ここでは Maven Repository を利用する手順について説明していきます。
環境
- Gradle 7.5.1
- Java 11
大まかな手順
※前提としてJavaライブラリは作成済みで、GitLabリポジトリがある状態とします。
- トークンの発行
- build.gradle に maven-publish の内容を書く
- gitlab-ci.yml を書く
- pushする
トークンの発行
認証方法は下記の3つがあります。
- プライベートトークン
- デプロイトークン
- CIトークン
今回はデプロイトークンを利用した認証方法を使います。
発行画面
GitLabのリポジトリ画面左側にあるSettingsからRepositoryを選択します。
Deploy tokensという項目のExpandをクリック。
トークンの名前を入力し、read_package_registry と write_package_registry にチェックを入れてトークンを作成。
作成されたトークンはメモしておいてください。
build.gradle に maven-publish の内容を書く
build.gradle の plugins に maven-publish を追加
// build.gradle plugins { ... id 'maven-publish' }
group 名と version を書いておく
//build.gradle group = 'jp.co.optim.~' version = '0.0.1' // この場合、使用の際は 'jp.co.optim.~:ライブラリ名:0.0.1' となる
publishing の設定を書く
// build.gradle publishing { publications { library(MavenPublication) { from components.java } } repositories { maven { url 'https://GitLabのFQDN/api/v4/projects/プロジェクトID/packages/maven' name 'GitLab' credentials(HttpHeaderCredentials) { name = 'Deploy-Token' value = '発行したデプロイトークン' } authentication { header(HttpHeaderAuthentication) } } } }
いじる必要のある部分は url と value になります。
注意点:
- name は 発行した際のトークン名ではなく 'Deploy-Token' です。
- セキュリティ面を考慮すると、デプロイトークンは別ファイルに記述したほうが良いです。
gitlab-ci.yml を書く
.gitlab-ci.yml に以下を追加します。以下は一例で、imageなどは環境に合わせてください。
gradle-publish: stage: publish image: amazoncorretto:11 script: ./gradlew publish
※参考:Scrapbox GitLabのMaven Repository機能を使ってみる
書く部分は以上になります。
pushする
push すると CIが実行されます。うまく行けば Package Registry にパッケージが表示されます。(画面左のダンボール箱のマークから飛べる。)
公開したパッケージの利用方法
公開したパッケージの個別ページに使用方法が書いてありますが、プライベートリポジトリの場合は使用の際も認証が必要になるので、こちらの手順も書いておきます。(Gradle)
まず、デプロイトークンを発行する画面で、read_package_registry のみにチェックを入れてトークンを発行してください。 次に、ライブラリを使うプロジェクトのbuild.gradleを以下のように書いてください。
// build.gradle repositories { ... maven { url 'https://GitLabのFQDN/api/v4/projects/プロジェクトID/packages/maven' name "GitLab" credentials(HttpHeaderCredentials) { name = 'Deploy-Token' value = '発行したデプロイトークン' } authentication { header(HttpHeaderAuthentication) } } } dependencies{ ... implementation 'グループ名:ライブラリ名:バージョン' }
これで利用することが可能になります。
参考にした記事など
- Qiita プロジェクト間共通ライブラリを GitLab Package Registry に登録して使う
- Scrapbox GitLabのMaven Repository機能を使ってみる
- GitLab Package Registry
感想
Java も Gradle も CI もほとんど触ったことがなかったので結構しょうもないところで詰まりましたが、おかげで力がついた気がします。
OPTiM ではアルバイトスタッフでも活躍できる環境があります。興味のある方はぜひ採用情報をご覧ください。 www.optim.co.jp