Groovy baby, Groovy

Kurt Klinner

Mit Erschrecken hab ich gerade festgestellt, dass es schon über ein Jahr her ist, dass ich etwas im Blog veröffentlicht hab. Aus diesem Grund (und der  Tatsache geschuldet, dass ich im Urlaub weile und demzufolge Zeit habe) hier mal wieder ein bisserl was zum Lesen.

Die Flexibilität die Jira mit sich bringt etliche Optionen anzupassen ist Fluch und Segen zu gleich. Aus Sicht eines (Projekt-) Administrators kann man auf Grund der Ampassungsmöglichkeiten so ziemlich alle - teils auch sehr spezielle - Anforderungen umsetzen, Nachteil hierbei ist aber, dass die Anzahl der Workflows, Custom Fields etc unter Umständen stetig wächst.

Irgendwann erreicht man den Punkt an dem entweder einen Einfluss auf die Performance des Systems feststellt oder die schiere Anzahl der bereits vorhandenen Konfigurationen (die natürlich auch keinem sinnigen Namensschema folgen :-)) zu einem dauerhaften Kopfschütteln führt. In beiden Fällen ist es an der Zeit einen Frühjahrsputz durchzuführen.

Der Atlassian Marketplace bietet mit beispielsweise  Optimizer for Jira eine App, die dem Admin bei der Bereinigung unterstützt, allerdings gibt es für die Nutzer der Scriptrunner Erweiterung auch die Möglichkeit mittels Groovy Skripten zu arbeiten.

Beispielhaft hier der Code um nicht mehr genutzte Workflows zu identifizieren bzw. zu löschen.

import com.atlassian.jira.component.ComponentAccessor

def workflowManager = ComponentAccessor.workflowManager
def workflowSchemeManager = ComponentAccessor.workflowSchemeManager
def sb = new StringBuffer()
def doExecute = false

workflowManager.workflows.each {
  if(!it.systemWorkflow) {
    try{
      def schemes = workflowSchemeManager.getSchemesForWorkflow(it)
      if (schemes.size() == 0) {
        if (doExecute) {
          sb.append("Deleting unused workflow: <b>${it.name}</b><br/>")
          workflowManager.deleteWorkflow(it)
        }
        else {
          sb.append ("Unused workflow: <b>${it.name}</b><br/>")
        }
      }
    }
    catch(Exception e) {
     sb.append("Error: " + e + "\n")
    }
  }
}
return sb.toString()

Eine Reihe weiterer Skripte zum Bereinigen nicht mehr verwendeter Issue Types, Screens etc finden sich unter https://github.com/ktklin/atlassian/tree/master/groovy.

Parallel dazu hab ich auch ein paar hilfreiche SQL Statements zusammengetragen, die beim identifizieren nicht mehr verwendeter Teile in Jira unterstützen https://github.com/ktklin/atlassian/tree/master/sql

Für beide Repos gilt, bevor man die Skripte auf Produktion laufen lassen möchte, AUSGIEBIG auf einer Testumgebung ausprobieren.

In diesem Sinne "Kehrd wärd", wie der Franke sagt