JIRA REST API-Integration

JIRA REST API-Integration

1. Einführung

In diesem Artikel erhalten Sie einen kurzen Überblick über die Integration in JIRA mithilfe der REST-API.

2. Maven-Abhängigkeit

Die erforderlichen Artefakte finden Sie im öffentlichen Maven-Repository von Atlassian:


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

Sobald das Repository zupom.xml hinzugefügt wurde, müssen die folgenden Abhängigkeiten hinzugefügt werden:


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


    com.atlassian.fugue
    fugue
    2.6.1

Die neuesten Versionen der Abhängigkeitencore undfugue finden Sie in Maven Central.

3. Erstellen eines Jira-Clients

Schauen wir uns zunächst einige grundlegende Informationen an, die wir benötigen, um eine Verbindung zu einer Jira-Instanz herstellen zu können:

  • username - ist der Benutzername eines gültigen Jira-Benutzers

  • password - ist das Passwort dieses Benutzers

  • jiraUrl - ist die URL, unter der die Jira-Instanz gehostet wird

Sobald wir diese Details haben, können wir unseren Jira Client instanziieren:

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

Der Konstruktor dieser Klasse:

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

getJiraRestClient() verwendet alle bereitgestellten Informationen und gibt eine Instanz vonJiraRestClient zurück. Dies ist die Hauptschnittstelle, über die wir mit der Jira REST-API kommunizieren:

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

Hier verwenden wir die Basisauthentifizierung, um mit der API zu kommunizieren. Es werden jedoch auch komplexere Authentifizierungsmechanismen wie OAuth unterstützt.

Die MethodegetUri() konvertiert einfachjiraUrl in eine Instanz vonjava.net.URI:

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

Damit ist unsere Infrastruktur für die Erstellung eines benutzerdefinierten Jira-Clients abgeschlossen. Wir können uns nun verschiedene Möglichkeiten für die Interaktion mit der API ansehen.

3.1. Erstellen Sie eine neue Ausgabe

Beginnen wir mit der Erstellung einer neuen Ausgabe. Wir werden diese neu erstellte Ausgabe für alle anderen Beispiele in diesem Artikel verwenden:

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();
}

DasprojectKey ist das eindeutige, das Ihr Projekt definiert. Dies ist nichts anderes als das Präfix, das an alle unsere Probleme angehängt wird. Das nächste Argument,issueType, ist ebenfalls projektabhängig und identifiziert den Typ Ihrer Probleme wie "Aufgabe" oder "Story". DasissueSummary ist der Titel unserer Ausgabe.

Das Problem geht als Instanz vonIssueInput an die restliche API. Abgesehen von den von uns beschriebenen Eingaben können Dinge wie Empfänger, Reporter, betroffene Versionen und andere Metadaten alsIssueInput angegeben werden.

3.2. Problembeschreibung aktualisieren

Jedes Problem in Jira wird durch ein eindeutigesStringwie „MYKEY-123“ gekennzeichnet. Wir benötigen diesen Problemschlüssel, um mit der Rest-API zu interagieren und die Beschreibung des Problems zu aktualisieren:

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

Lassen Sie die aktualisierte Beschreibung nach der Aktualisierung der Beschreibung nicht mehr zurücklesen:

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

Die InstanzIssue stellt ein Problem dar, das durchissueKey identifiziert wird. Mit dieser Instanz können wir die Beschreibung dieses Problems lesen:

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

Dadurch wird die Beschreibung des Problems auf der Konsole gedruckt.

3.3. Stimmen Sie für ein Problem ab

Sobald wir eine Issue-Instanz erhalten haben, können wir sie auch zum Aktualisieren / Bearbeiten verwenden. Stimmen wir für das Thema ab:

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

Dadurch wird die Stimme im Namen des Benutzers, dessen Anmeldeinformationen verwendet wurden, zuissue hinzugefügt. Dies kann durch Überprüfen der Stimmenzahl überprüft werden:

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

Hierbei ist zu beachten, dass wir hier erneut eine neue Instanz vonIssue abrufen, um die aktualisierte Stimmenzahl wiederzugeben.

3.4. Kommentar hinzufügen

Wir können dieselbeIssue-Instanz verwenden, um im Namen des Benutzers einen Kommentar hinzuzufügen. Wie das Hinzufügen einer Stimme ist auch das Hinzufügen eines Kommentars ziemlich einfach:

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

Wir haben die Factory-MethodevalueOf() verwendet, die von der KlasseComment bereitgestellt wird, um eine Instanz vonComment zu erstellen. Es gibt verschiedene andere Factory-Methoden für fortgeschrittene Anwendungsfälle, z. B. die Steuerung der Sichtbarkeit vonComment.

Lassen Sie uns eine neue Instanz vonIssue abrufen und alleComments lesen:

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

3.5. Löschen Sie ein Problem

Das Löschen eines Problems ist ebenfalls recht einfach. Wir benötigen nur den Issue-Schlüssel, der das Problem identifiziert:

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

4. Fazit

In diesem kurzen Artikel haben wir einen einfachen Java-Client erstellt, der in die Jira REST-API integriert ist und einige grundlegende Vorgänge ausführt.

Die vollständige Quelle dieses Artikels finden Sie inover on GitHub.