2016-06-21 21 views
1

Wir haben mehrere JIRA-Probleme, die über 1000 doppelte, gefälschte, Spam-ähnliche Kommentare enthalten. Wie können wir sie schnell löschen?Wie kann ich Kommentare in JIRA massiv löschen?

Hintergrund:

Wir haben einen Benutzer in Active Directory deaktiviert (Exchange), aber nicht JIRA, so JIRA immer wieder versucht, sie Updates per E-Mail. Der E-Mail-Server gab eine Bounce-Back-Nachricht zurück, und JIRA protokollierte sie pflichtbewusst bei der Aufgabe, was dazu führte, dass sie ein weiteres Update schickte und eine Feedback-Schleife entstand.

Die Meldungen haben das folgende Format:

Delivery has failed to these recipients or groups: 
[email protected]<[email protected]> 
The e-mail address you entered couldn't be found. Please check the recipient's e-mail address and try to resend the message. If the problem continues, please contact your helpdesk. 
Diagnostic information for administrators: 
Generating server: emailserver.example.com 
[email protected] 
#550 5.1.1 RESOLVER.ADR.RecipNotFound; not found ## 
Original message headers: 
Received: from jiraserver.example.com (10.0.0.999) by emailserver.example.com (10.0.0.999) 
with Microsoft SMTP Server id nn.n.nnn.n; Mon, 13 Jun 2016 15:57:04 -0500 
Date: Mon, 13 Jun 2016 15:57:03 -0500 

Our research nicht eine einfache Möglichkeit zu entdecken, ohne gekauft Plug-In wie Script Runner oder „Hacking“ auf die Datenbank, die wir vermeiden wollten.

Hinweis:

Wir kamen mit einer Lösung und sind Entsendung hier zu teilen.

Antwort

1

Verwenden Sie die JIRA REST API über die Chrome JavaScript Console.

Hintergrund:

Wir wollten nicht für eine vollständige Bewerbung schreiben, was wir hoffen, dass ein isoliertes Vorkommen ist. Wir hatten ursprünglich geplant, PowerShells Invoke-WebRequest zu verwenden. Die Authentifizierung erwies sich jedoch als Herausforderung. Die API unterstützt Basic Authentication, obwohl es nur recommended when using SSL ist, die wir nicht für unseren internen Server verwenden. Auch unsere anfänglichen Tests führten zu 401 Fehlern (vielleicht aufgrund eines Fehlers).

Die API unterstützt jedoch auch die cookiebasierte Authentifizierung. Solange Sie die Anforderung von einem Browser mit einer gültigen JIRA-Sitzung generieren, funktioniert sie einfach. Wir haben diese Methode gewählt.

Lösung im Detail:

Zuerst finden und den entsprechenden Kommentar überprüfen und IDs Ausgabe:

SELECT * FROM jira..jiraaction WHERE actiontype = 'comment' AND actionbody LIKE '%RESOLVER.ADR.RecipNotFound%'; 

Dies könnte eine langsame Abfrage auf der Größe Ihrer JIRA Daten abhängig sein. Es scheint auf dem issueid indiziert zu sein, also, wenn Sie das wissen, spezifizieren Sie es. Fügen Sie dieser Abfrage weitere Kriterien hinzu, sodass nur die Kommentare angezeigt werden, die Sie löschen möchten.

Die folgende Lösung ist für Kommentare zu einem einzelnen Problem geschrieben, aber mit einigen zusätzlichen JavaScript könnte erweitert werden, um mehrere Probleme zu unterstützen.

Wir benötigen die Liste der Kommentar-IDs für die Verwendung in der Chrome JavaScript-Konsole. Ein nützliches Format ist eine durch Kommata getrennte Liste von Strings, die Sie erstellen können, wie folgt:

SELECT '"' + CONVERT(VARCHAR(50),ID) + '", ' FROM jira..jiraaction WHERE actiontype = 'comment' AND actionbody LIKE '%RESOLVER.ADR.RecipNotFound%' AND issueid = @issueid FOR XML PATH('') 

(Dies ist nicht unbedingt der beste Weg, um concatenate strings in SQL, aber es ist einfach und funktioniert für diesen Zweck.)

Öffnen Sie nun eine neue Browsersitzung und authentifizieren Sie sich bei Ihrer JIRA-Instanz. Wir haben Chrome verwendet, aber jeder Browser mit einer JavaScript-Konsole sollte dies tun.

die Zeichenfolge von dieser Abfrage erzeugt nehmen und es in der JavaScript-Konsole fallen innerhalb einer Anweisung wie folgt:

CommentIDs = [StringFromSQL]; 

Sie müssen das folgende Komma manuell (oder stellen Sie die obige Abfrage trimmen, dies zu tun für dich). Es sieht so aus:

CommentIDs = ["1234", "2345"]; 

Wenn Sie diesen Befehl ausführen, haben Sie ein JavaScript-Array mit all diesen Kommentar-IDs erstellt.

Jetzt kommen wir zum Fleisch der Technik. Wir werden den Inhalt dieses Arrays durchlaufen und mit Hilfe von XMLHttpRequest (oft abgekürzt XHR) einen neuen AJAX-Aufruf an die REST-API senden. (Es gibt auch eine jQuery option.)

for (let s of CommentIDs) {let r = new XMLHttpRequest; r.open("DELETE","http://jira.example.com/rest/api/2/issue/11111/comment/"+s,true); r.send();} 

Sie müssen "11111" mit der entsprechenden Ausgabe ID ersetzen. Sie können dies für mehrere Ausgabe-IDs wiederholen, oder Sie können ein mehrdimensionales Array und eine bessere Loop erstellen.

Dies ist nicht elegant. Es hat keine Fehlerbehandlung, aber Sie können den Fortschritt mithilfe der Chrome JavaScript API überwachen.

Console Network Activity Pane

1

ich einen jira-Python-Skript oder ein Script groovy Skript verwenden würde. Selbst für ein einmaliges Bulk-Update, weil es einfacher zu testen ist und keinen Datenbankzugriff benötigt.

Froh, dass es für Sie gearbeitet hat!