LoginSignup
0

More than 1 year has passed since last update.

GitHub ActionsからGitLabのMavenパッケージレジストリにDeployする方法

Last updated at Posted at 2022-07-15

この記事の概要

筆者は、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プロジェクトがある前提で解説します

流れ

  1. GitLabで公開Project作成し、Deploy Tokenを取得する
  2. GitHubの設定で環境変数をセットしておく
  3. build.gradleの設定を追加
  4. GitHub Actionsの設定ファイル作成
  5. 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を取得しましょう

  1. SettingsRepositoryDeploy Tokens をExpandしましょう
  2. Namemaven-publish と入れましょう(なんでもいいですが)
  3. Scopesread_package_registrywrite_package_registryにチェックを入れましょう
  4. Create deploy token ボタンを押して、作成します
  5. 一回しかTokenは表示されないので、ここでTokenをコピーしておきましょう

2. GitHubの環境変数にTokenをセットしておく

次はGitHub上での操作です。
GitHubのJavaプロジェクトのリポジトリに移動し、下記のように環境変数をセットしましょう。
(もしまだなければ作成しましょう)

  1. SettingsSecuritySecretsActionsNew Repository Secretsのボタンを押しましょう
  2. NameGITLAB_DEPLOY_TOKEN と入れましょう
  3. Value に 先ほどコピーしておいたTokenをペーストしましょう
  4. 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のプロジェクトページを見ると上の方に書いてあります。

スクリーンショット 2022-07-15 21.35.58.png
※画像のProject IDとある部分です。

4. GitHub Actionsの設定ファイル作成

続いての手順も、エディタなどでJavaのプロジェクト内の編集をします。
ここでは、GitHub Actionsの設定ファイルを作成します。

  1. リポジトリのルートディレクトリに .github/workflows という名前のディレクトリを作成しましょう
  2. そこに、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タグ作成

  1. ここまでのJavaプロジェクトの変更をGitHubにPushしましょう
  2. 次に、Releaseタグを作成してください。これでGitHub Actionsが起動するはずです
  3. GitHubリポジトリのActionsタブでデプロイの進捗状況を確認してください
  4. 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'
}

以上で手順は終了です!

ぜひお試しください!!

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
0