JIRA REST APIの統合

1前書き

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

2 Mavenの依存関係

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

<repository>
    <id>atlassian-public</id>
    <url>https://packages.atlassian.com/maven/repository/public</url>
</repository>

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

<dependency>
    <groupId>com.atlassian.jira</groupId>
    <artifactId>jira-rest-java-client-core</artifactId>
    <version>4.0.0</version>
</dependency>
<dependency>
    <groupId>com.atlassian.fugue</groupId>
    <artifactId>fugue</artifactId>
    <version>2.6.1</version>
</dependency>

httpsの最新バージョンについては、Maven Centralを参照できます。/com.atlassian.fugue/fugue[fugue] 依存関係。

3 Jiraクライアントを作成する

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

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

  • password - そのユーザーのパスワード

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

これらの詳細がわかれば、Jiraクライアントをインスタンス化できます。

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 REST APIと通信するための主要なインターフェースです。

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

ここでは、基本認証を使用してAPIと通信しています。

ただし、OAuthなどのより高度な認証メカニズムもサポートされています。

getUri() メソッドは、単に jiraUrl java.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();
}

ここで注意すべきことは、更新された投票数を反映させたいので、ここでも Issue の新しいインスタンスを取得していることです。

3.4. コメントを追加する

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

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

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

Issue の新しいインスタンスを取得して、すべての __Comment __を読みましょう。

public List<Comment> 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クライアントを作成しました。

この記事の全情報源はhttps://github.com/eugenp/tutorials/tree/master/saas[GitHubについて]で見つけることができます。