LoginSignup
12
6

JavaでGitlab APIを利用してみた

Last updated at Posted at 2022-10-12

はじめに

JavaでGitlabのAPIを利用してみたので、利用方法について簡単に記載します。
今回利用したAPIは下記になります。

  • IssuesApi
  • RepositoryApi
  • RepositoryFileApi

実行環境は下記になります。

Gitlab : 14.9.4
Java : 1.8

事前準備

今回はgradleを利用してJavaプロジェクトを作成しました。
APIの実行はgitlab4j-apiを利用しました。

build.gradleは下記になります。

apply plugin: "java"

repositories {
  mavenCentral()
}

sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
compileJava.options.encoding = 'UTF-8'

dependencies {
  implementation "org.gitlab4j:gitlab4j-api:5.0.1"
}

APIの実行のためにアクセストークンを利用するので、作成方法は下記をご確認下さい。

簡単な実装

ここからは簡単な実装を紹介します。

GitLabApiインスタンスの取得

各種APIの実行はGitlabApiインスタンスを通して行います。インスタンスの取得にはアクセストークンが必要です。

// GitLabApiインスタンスの取得
GitLabApi gitLabApi = new GitLabApi("http://sample.gitlab.com", "YOUR_PERSONAL_ACCESS_TOKEN");

以降の実装ではGitLabApiから操作したいAPIを取得して操作します。

IssuesApi

Issueの一覧の取得

特定のプロジェクトに起票されているIssueの一覧を取得します。

// プロジェクトに起票されたIssueをすべて取得する(プロジェクトID=1234)
List<Issue> issueList = gitLabApi.getIssuesApi().getIssues("1234");

// Issueのタイトルを出力
for (Issue issue : issueList) {
    System.out.println(issue.getTitle());
}

Issueの作成

指定したプロジェクトにIssueを起票します。指定できるオプションはたくさんありますが、ここでは下記を指定しその他は指定しない(null)で実行してみます。

  • プロジェクト
  • タイトル
  • 説明
  • ラベル

説明にはMarkdown形式の表を盛り込んでみます。

// Issueの起票(プロジェクトID=1234)
gitLabApi.getIssuesApi().createIssue(//
        "1234", // ProjectId
        "GitlabAPI sample issue", // Title
        getDescription(), // Description
        null,
        null,
        null,
        "sample_label", // Label
        null,
        null,
        null,
        null
);

String getDescription() {
    StringBuffer sb = new StringBuffer();
    sb.append("# Overview");
    sb.append(System.lineSeparator());
    sb.append(System.lineSeparator());
    sb.append("|COLUMN1|COLUMN2|COLUMN3|");
    sb.append(System.lineSeparator());
    sb.append("|---|---|---|");
    sb.append(System.lineSeparator());
    sb.append("|hoge|fuga|piyo|");
    sb.append(System.lineSeparator());
    sb.append("|foo|bar|baz|");
    return sb.toString();
}

下記のようなIssueが起票されます。これならAPIからの起票でもいろいろ情報を盛り込めそうです。

issue_1.png

RepositoryApi

RepositoryApiでは主にBranchを操作することができます。

// Branchの一覧を取得(プロジェクトID=1234)
List<Branch> branchList = gitLabApi.getRepositoryApi().getBranches("1234");

for (Branch branch : branchList) {
    System.out.println(branch.getName());
}

// Branchを保護する(プロジェクトID=1234)
gitLabApi.getRepositoryApi().protectBranch("1234", "YOUR_BRANCH_NAME");

// Branchの保護の解除(プロジェクトID=1234)
gitLabApi.getRepositoryApi().unprotectBranch("1234", "YOUR_BRANCH_NAME");

RepositoryFileApi

RepositoryFileApiはリポジトリで管理しているファイルを操作するAPIのようです。  
ここでは、mainブランチのqiita/test/以下のhoge.txtを取得してみます。

// hoge.txtを取得(プロジェクトID=1234)
File file = gitLabApi.getRepositoryApi().getRawFile("1234", "main", "qiita/test/hoge.txt", null);

System.out.println(file.getName()); // hoge.txt

最後に

今回はIssuesApi、RepositoryApi、RepositoryFileApiを扱いましたが他にも便利なAPIがありそうでした。
shellコマンドでいろいろ操作できればラクでよいのでしょうが、私は苦手なのでjavaのAPIがあってとても助かりました。

12
6
1

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
12
6