はじめに
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からの起票でもいろいろ情報を盛り込めそうです。
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があってとても助かりました。