Script Runner, mon sauveur! (ou comment j’ai remplacé Outlook par JIRA)


Publié par
Anand UNADKAT

10 juin 2014

Si vous avez besoin de configurer JIRA pour l’adapter aux besoins de votre entreprise et que vous avez des connaissances en développement, Script Runner est votre sauveur. Dans cet article, je vous expliquerai comment il m’a aidé lors de la configuration de JIRA pour répondre à des besoins spécifiques.

Les utilisateurs ont toujours une liste d’exigences pour la configuration de leur JIRA. Cependant, par défaut, JIRA ne permet pas toujours d’y répondre sans l’aide d’add-ons.

Utiliser le scripting pour configurer JIRA comme vous voulez

Sur la marketplace d’Atlassian, de nombreux add-ons vous permettront de configurer JIRA pour répondre à vos exigences, malheureusement, ils ont bien souvent un coût. L’ingénieuse création de Jamie Echlin appelée Script Runner vient à votre rescousse. En effet, vous pouvez faire quasiment ce que vous souhaitez en écrivant un script.

Pour ceux d’entre vous qui ne savent pas ce qu’est Script Runner, il s’agit d’un add-on qui permet de mettre en place des configurations avances de votre instance JIRA en utilisant le langage Groovy.  Script Runner a déjà des scripts intégrés qui pourront vous aider avec les post-fonctions de vos workflows, les règles de validation et les conditions, cependant vous pouvez aussi les utiliser comme base de départ pour des requêtes JQL, des listeners et des champs scripts. Par exemple, rechercher des issues avec des documents joints.

Comment j’ai remplacé Outlook par JIRA

Pour revenir à mon expérience, des utilisateurs voulaient remplacer Outlook par JIRA. Ils utilisaient Outlook pour toute tâche ad-hoc arrivant sous forme d’email et ils exécutaient la tâche par un aller-retour incessant d’emails. En tant qu’administrateur, j’aurais tout à fait pu leur dire d’utiliser JIRA, ne tenant cependant pas compte de la complexité du système qui allait en découler.

Besoins des utilisateurs

Les emails étaient automatiquement classés dans différents dossiers selon le sujet et l’expéditeur, grâce à des règles définies dans leur Outlook. Ce tri a dû être reproduit dans JIRA. Pour représenter les dossiers, j’ai utiliser un custom field JIRA  » Type de requête ». Avec l’aide de l’add-on JETI (JIRA Email This Issue), j’ai ensuite généré des custom fields avec l’adresse email de l’émetteur pour permettre au receveur de l’identifier facilement.  Comme vous le savez, il existe une post-fonction qui permet de copier la valeur d’un champ dans un autre champ en utilisant JIRA Suites Utilities.

However, updating a custom field with a value depending on a particular value from another custom field is what JIRA does not offer

Cependant, JIRA n’offre pas la possibilité de mettre à jour un custom field avec une valeur dépendant de la valeur d’un autre custom field, même avec l’aide de JIRA Suites Utilities, c’est pourquoi Script Runner s’est avéré utile. Tout d’abord, c’est un add-on gratuit, ce qui est toujours un avantage pour administrateur et utilisateurs, et deuxièmement il répond aux besoins des utilisateurs, il est donc notre sauveur.

La solution que j’ai mise en place

Le script lit une issue pendant sa création, et selon l’expéditeur et l’objet de l’email, il remplit les champs Type de requête, Priorité, Composant, Assignee, et créé le SLA. Les utilisateurs voulaient également assurer un tracking rapide des issues ne remplissant pas les règles définies et compléter cette issue en configurant sa résolution. Ils voulaient aussi mettre en place un listener surveillant l’évènement « Issue Updated » pour gérer la mise à jour d’un autre custom field de l’issue. Tout cela a pu être réalisé grâce à un seul add-on. Voici ci-dessous un échantillon du script.

import com.atlassian.jira.bc.project.component.ProjectComponent
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.project.Project
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.IssueImpl
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.comments.CommentManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.util.ImportUtils
import com.atlassian.jira.user.util.DefaultUserManager
import com.atlassian.crowd.embedded.api.User
import com.atlassian.jira.project.Project
import com.atlassian.jira.issue.customfields.manager.OptionsManager
import com.atlassian.jira.issue.context.IssueContext
import com.atlassian.jira.issue.context.IssueContextImpl

//Type of Request field
optionsManager = componentManager.getComponentInstanceOfType(OptionsManager.class)
cf2 = ComponentAccessor.customFieldManager.getCustomFieldObjects(issue).find{it.name =='Type of Request'}

//Business Unit Owner Field
optionsManager = componentManager.getComponentInstanceOfType(OptionsManager.class)
cf3 = ComponentAccessor.customFieldManager.getCustomFieldObjects(issue).find{it.name =='Business Unit'}

//Sender Field
cf = ComponentAccessor.customFieldManager.getCustomFieldObjectByName("Sender")
val = issue.getCustomFieldValue(cf)

if(issue.getSummary.toLowerCase().contains("sample text")) {
    Project project = issue.getProjectObject()
    ProjectComponent component = ComponentAccessor.getProjectComponentManager().findByComponentName(project.getId(), "name of component")
    issue.setComponentObjects([component])

    def fieldConfig = cf2.getRelevantConfig(issue)
    def option = optionsManager.getOptions(fieldConfig).find {it.value == "name of type of request"}
    issue.setCustomFieldValue(cf2, option)

    def fieldConfig1 = cf3.getRelevantConfig(issue)
    def option1 = optionsManager.getOptions(fieldConfig1).find {it.value == "name of business unit"}
    issue.setCustomFieldValue(cf3, option1)

    issue.setPriorityId("priorityID")
} else {
return false
}
Sample Groovy Script

Je suis ravi de vanter les mérites de Script Runner,  cependant, comme tout outil, il a quelques limitations. L’une d’entre elles est qu’il nécessite des connaissances en développement et de comprendre Groovy pour écrire des scripts complexes. Ceci peut être bloquant et amener à choisir un ou des add-ons payants. Cependant il y a beaucoup de contenus sur internet qui peuvent aider un administrateur, quel que soit son background, pour démarrer avec les bases du scripting.

Soyez le héros JIRA du jour

Désormais, vous savez qu’un add-on peut vous permettre de répondre à vos besoins quels qu’ils soient et quelque soit votre abilité à écrire des scripts Groovy, car de nombreuses ressources peuvent vous permettre d’y parvenir.