JIRA REST API Integration

1. Einleitung

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 //packages.atlassian.com/maven/repository/public 

Sobald das Repository zur Datei pom.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 Kern- und Fugenabhängigkeiten 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:

  • Benutzername - ist der Benutzername eines gültigen Jira-Benutzers
  • Passwort - 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", "//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(); }

Der getJiraRestClient () verwendet alle bereitgestellten Informationen und gibt eine Instanz von JiraRestClient 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 Methode getUri () konvertiert einfach die jiraUrl in eine Instanz von java.net.URI :

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

Damit ist unsere Infrastruktur zur Erstellung eines benutzerdefinierten Jira-Clients abgeschlossen. Wir können uns nun verschiedene Möglichkeiten ansehen, um mit der API zu interagieren.

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

Der projectKey ist das Unikat, 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". Die IssueSummary ist der Titel unserer Ausgabe.

Das Problem wird als Instanz von IssueInput an die restliche API gesendet . Abgesehen von den von uns beschriebenen Eingaben können Dinge wie Empfänger, Reporter, betroffene Versionen und andere Metadaten als IssueInput verwendet werden .

3.2. Problembeschreibung aktualisieren

Jedes Problem in Jira wird durch einen eindeutigen String wie „ MYKEY-123 “ gekennzeichnet. Wir benötigen diesen Problemschlüssel, um mit der restlichen 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(); }

Sobald die Beschreibung aktualisiert wurde, lesen wir die aktualisierte Beschreibung nicht mehr zurück:

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

Die Issue- Instanz stellt ein Problem dar, das vom issueKey identifiziert wurde . Wir können diese Instanz verwenden, um die Beschreibung dieses Problems zu lesen:

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

Dadurch wird die Beschreibung des Problems auf die Konsole gedruckt.

3.3. Stimmen Sie für ein Problem ab

Sobald wir eine Instanz des Problems erhalten haben, können wir damit auch Aktualisierungs- / Bearbeitungsaktionen ausführen. Lassen Sie uns für das Thema stimmen:

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

Dadurch wird die Abstimmung im Namen des Benutzers, dessen Anmeldeinformationen verwendet wurden , zur Ausgabe 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(); }

Eine Sache, die hier zu beachten ist, ist, dass wir hier erneut eine neue Instanz von Issue abrufen, um die aktualisierte Stimmenzahl wiederzugeben .

3.4. Kommentar hinzufügen

Wir können dieselbe Issue- 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-Methode valueOf () verwendet, die von der Comment- Klasse bereitgestellt wird , um eine Instanz eines Kommentars zu erstellen . Es gibt verschiedene andere Factory-Methoden für erweiterte Anwendungsfälle, z. B. die Steuerung der Sichtbarkeit eines Kommentars .

Lassen Sie uns eine neue Instanz des Problems abrufen und alle Kommentare 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 Problemschlü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 der grundlegenden Vorgänge ausführt.

Die vollständige Quelle dieses Artikels finden Sie auf GitHub.