7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

お題は不問!Qiita Engineer Festa 2023で記事投稿!

GCPを使って公開のmavenリポジトリを作る(Gradle)

Last updated at Posted at 2023-07-20

Gradleには標準機能でS3やCloud Storageをmavenリポジトリとして扱う機能がついています。
社内や個人でプライベートなリポジトリとして活用する例は見られるのですが、今回は一般公開設定にしてPublicにしてみます。

Cloud Storageの料金はこちら。実験的にいくつかファイルを置いているくらいであれば0円になることもあります。
アイオワリージョンであれば、公開日時点で1ヶ月あたり$0.020/GBの設定のようです。東京リージョンではもう少し高い値段設定です。

環境

  • Java 17
  • Gradle 8.2

事前準備

ファイルをアップロードするためのCloud Storageのバケットを用意してください。
実験的に試すのであれば、シングルリージョンにしておくのが良いと思います。

build.gradle.ktsの用意

今回はKotlin DSLで書いていますがGroovyでもほぼ同様のコードで動くと思います。

mavenに公開するので、maven-publishのプラグインを使用します。

plugin {
    id("maven-publish")
}

Publishの設定は以下のようにします。
今回はkoma-yumemi-resourcesのバケットの中のgcp-maven-test/mavenにファイルをおくことにします。

publishing {
    publications {
        // この辺りは適当に設定して下さい。
        create("mavenJava", MavenPublication::class) {
            from(components.named("java").get())
        }
    }
    repositories {
        maven {
            // ここのURLがCloud Storageにアップロードするために必要です。
            url = uri("gcs://koma-yumemi-resources/gcp-maven-test/maven")
        }
    }
}

ここのMavenPublication::classの指定はGroovy DSLの場合MavenPublication.classとする必要があります。mavenJava(MavenPublication)といった書き方でもOKです。

ここではURLをgcs://example/mavenといった形式で与える必要があります。GCPでよく使われれるgs://ではないので、書き換えてください。

認証

Gradleからはアプリケーションのデフォルト認証情報を使ってGCPにアクセスします。
ローカル環境であれば、gcloud auth application-default loginのコマンドを実行することで認証ファイルの作成ができます。
内部的にはgoogle-api-clientのライブラリを呼び出しているようです。
この辺りから認証情報を得ているようです。

サービスアカウントを使用している場合はGOOGLE_APPLICATION_CREDENTIALSに設定されたJSONを見て認証してくれるようですが、GitHubのOIDCから得た認証情報を使うと以下のエラーになってしまったので設定が違うのかもしれません。

Caused by: java.io.IOException: Error reading credential file from environment variable GOOGLE_APPLICATION_CREDENTIALS, value '.../gha-creds-d5777338b048ce4b.json': Error reading credentials from stream, 'type' value 'external_account' not recognized. Expecting 'authorized_user' or 'service_account'.

公開

Publish

./gradlew publishを実行するとCloud Storageにアップロードされます。
gcp-uploaded.png
バケット以下の指定したパスにファイルが保存されています。

一般公開の設定

ここではバケット内のすべてのオブジェクトを公開設定にします。
公開したくないファイルが含まれている場合はバケットを分けることをお勧めします。

まず、権限タブからアクセス権の追加を選択します。
2023-07-20 16.26.32.png

プリンシパルにallUsersを指定し、ロールには「Storageオブジェクト閲覧者」を選択します。そして保存をクリックします。
2023-07-20 16.27.11.png

確認画面が出てくるので、「一般公開アクセスを許可」を選択します。
2023-07-20 16.27.21.png
これで一般公開の操作は完了です。
ファイルの一覧を表示すると、公開アクセスの欄がインターネットに公開となっています。
2023-07-20 16.27.47.png

リポジトリを使用する

公開されたプロジェクトを使用する側ではまずrepositoriesの設定を追加します。
gcs://koma-yumemi-resources/gcp-maven-test/mavenに公開していた場合は、以下のような設定になります。

repositories {
    maven {
        url = uri("https://storage.googleapis.com/koma-yumemi-resources/gcp-maven-test/maven")
    }
}

https://storage.googleapis.com/ 以下にパスを付け加えるだけです。

その上でdependencyをMaven Centralのプロジェクトと同じように追加します。
これで公開したプロジェクトを他の人が使えるようになりました。

参考

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?