JIRA REST APIの統合

JIRA REST APIの統合

1. 前書き

この記事では、RESTAPIを使用してJIRAと統合する方法について簡単に説明します。

2. メーベン依存

必要なアーティファクトは、Atlassianの公開Mavenリポジトリにあります。


    atlassian-public
    https://packages.atlassian.com/maven/repository/public

リポジトリがpom.xmlに追加されたら、以下の依存関係を追加する必要があります。


    com.atlassian.jira
    jira-rest-java-client-core
    4.0.0


    com.atlassian.fugue
    fugue
    2.6.1

coreおよびfugueの依存関係の最新バージョンについては、MavenCentralを参照してください。

3. Jiraクライアントの作成

まず、Jiraインスタンスに接続するために必要ないくつかの基本情報を見てみましょう。

  • username –有効なJiraユーザーのユーザー名です

  • password –そのユーザーのパスワードです

  • jiraUrl –JiraインスタンスがホストされているURLです

これらの詳細を取得したら、Jira Clientをインスタンス化できます。

MyJiraClient myJiraClient = new MyJiraClient(
  "user.name",
  "password",
  "http://jira.company.com");

このクラスのコンストラクター:

public MyJiraClient(String username, String password, String jiraUrl) {
    this.username = username;
    this.password = password;
    this.jiraUrl = jiraUrl;
    this.restClient = getJiraRestClient();
}

getJiraRestClient()は提供されたすべての情報を利用し、JiraRestClientのインスタンスを返します。 これは、Jira RESTAPIと通信するための主要なインターフェースです。

private JiraRestClient getJiraRestClient() {
    return new AsynchronousJiraRestClientFactory()
      .createWithBasicHttpAuthentication(getJiraUri(), this.username, this.password);
}

ここでは、基本認証を使用してAPIと通信しています。 ただし、OAuthなどのより高度な認証メカニズムもサポートされています。

getUri()メソッドは、単にjiraUrljava.net.URIのインスタンスに変換します。

private URI getJiraUri() {
    return URI.create(this.jiraUrl);
}

これで、カスタムJiraクライアントを作成するインフラストラクチャが完了しました。 これで、APIと対話するさまざまな方法を確認できます。

3.1. 新しい問題を作成する

新しい問題を作成することから始めましょう。 この新しく作成された問題は、この記事の他のすべての例に使用します。

public String createIssue(String projectKey, Long issueType, String issueSummary) {
    IssueRestClient issueClient = restClient.getIssueClient();
    IssueInput newIssue = new IssueInputBuilder(
      projectKey, issueType, issueSummary).build();
    return issueClient.createIssue(newIssue).claim().getKey();
}

projectKeyは、プロジェクトを定義する一意です。 これは、すべての問題に追加されるプレフィックスに他なりません。 次の引数issueTypeもプロジェクトに依存し、「タスク」や「ストーリー」などの問題のタイプを識別します。 issueSummaryは私たちの問題のタイトルです。

この問題は、IssueInputのインスタンスとして残りのAPIに発生します。 説明した入力とは別に、担当者、レポーター、影響を受けるバージョン、その他のメタデータなどは、IssueInputとして送信できます。

3.2. 問題の説明を更新

Jiraの各問題は、「MYKEY-123」のような一意のStringによって識別されます。 残りのAPIと対話し、問題の説明を更新するには、この問題キーが必要です。

public void updateIssueDescription(String issueKey, String newDescription) {
    IssueInput input = new IssueInputBuilder()
      .setDescription(newDescription)
      .build();
    restClient.getIssueClient()
      .updateIssue(issueKey, input)
      .claim();
}

説明が更新されたら、更新された説明を読み戻さないでください。

public Issue getIssue(String issueKey) {
    return restClient.getIssueClient()
      .getIssue(issueKey)
      .claim();
}

Issueインスタンスは、issueKeyによって識別される問題を表します。 このインスタンスを使用して、この問題の説明を読むことができます。

Issue issue = myJiraClient.getIssue(issueKey);
System.out.println(issue.getDescription());

これにより、問題の説明がコンソールに出力されます。

3.3. 問題に投票する

Issueのインスタンスを取得したら、それを使用して更新/編集アクションも実行できます。 この問題に投票しましょう:

public void voteForAnIssue(Issue issue) {
    restClient.getIssueClient()
      .vote(issue.getVotesUri())
      .claim();
}

これにより、資格情報が使用されたユーザーに代わって、issueに投票が追加されます。 これは、投票数を確認することで確認できます。

public int getTotalVotesCount(String issueKey) {
    BasicVotes votes = getIssue(issueKey).getVotes();
    return votes == null ? 0 : votes.getVotes();
}

ここで注意すべきことの1つは、更新された投票数を反映させたいため、ここでIssueの新しいインスタンスを再度フェッチしていることです。

3.4. コメントの追加

同じIssueインスタンスを使用して、ユーザーに代わってコメントを追加できます。 投票の追加と同様に、コメントの追加も非常に簡単です。

public void addComment(Issue issue, String commentBody) {
    restClient.getIssueClient()
      .addComment(issue.getCommentsUri(), Comment.valueOf(commentBody));
}

Commentクラスによって提供されるファクトリメソッドvalueOf()を使用して、Commentのインスタンスを作成しました。 Commentの可視性を制御するなど、高度なユースケースには他にもさまざまなファクトリメソッドがあります。

Issueの新しいインスタンスをフェッチして、すべてのCommentsを読み取りましょう。

public List getAllComments(String issueKey) {
    return StreamSupport.stream(getIssue(issueKey).getComments().spliterator(), false)
      .collect(Collectors.toList());
}

3.5. 課題を削除する

問題の削除も非常に簡単です。 問題を識別する問題キーのみが必要です。

public void deleteIssue(String issueKey, boolean deleteSubtasks) {
    restClient.getIssueClient()
      .deleteIssue(issueKey, deleteSubtasks)
      .claim();
}

4. 結論

この簡単な記事では、Jira REST APIと統合し、いくつかの基本的な操作を実行する簡単なJavaクライアントを作成しました。

この記事の完全なソースはover on GitHubにあります。