Jira en ligne de commande

Introduction

Que l’on soit freelance ou salarié, on n’a pas toujours le choix des outils de gestion de projets que l’on doit utiliser. Parmi les outils imposés que je dois me coltiner au jour le jour, Jira est dans mon top des outils les plus désagréables (euphémisme pour rester poli).

Heureusement, des gentils développeurs de Netflix ont créé un outil, go-jira, qui permet d’éviter l’utilisation de l’interface web du mastodon, et d’utiliser la ligne de commande depuis son terminal pour gérer ses tickets.

Installation

L’outil a été développé avec le langage Go. Il s’installe donc comme tous les logiciels écrits dans ce langage, avec la commande go get qui télécharge le code, le compile et l’installe dans un répertoire donné. Il suffit donc de taper: go get gopkg.in/Netflix-Skunkworks/go-jira.v1/cmd/jira pour obtenir un exécutable qui sera copié dans le sous répertoire bin du répertoire défini par la variable GOPATH.

Pour exécuter facilement ce binaire, deux options. Soit créer un alias pointant vers le fichier directement (alias jira=~/go/bin/jira à ajouter dans son ~/.bash_aliases); soit ajouter ${GOPATH}/bin dans son path, ce qui revient à accepter tous les logiciels compilés avec la commande go get.

Première utilisation

La première commande à exécuter avant toute chose est de s’authentifier auprès d’une instance Jira. Dans mon cas personnel, cela donne ceci:

jira login -e https://jira.nom-du-client.com/ -u "Michael Parienti"

J’ai fourni deux paramètres:

  1. l’url de l’instance jira où se se connecter avec l’option -e
  2. mon identifiant avec l’option -u

Un mot de passe est demandé et, si le mot de passe est correct, un cookie est enregistré dans un sous répertoire ~/.jira. Ce cookie vous permettra de ne pas avoir à vous authentifier pour les prochaines commandes. Néanmoins, d’après mon expérience, sa durée de vie est plus courte que celle d’une session avec un navigateur.

Pour rentrer dans le vif du sujet, voici un exemple de commande plus concrète qui change le statut d’un ticket.

jira -e https://jira.nom-du-client.com/  transition  "In Progress" PREFIX-10693

Je re utilise ici l’option -e pour renseigner le serveur jira, puis je donne le nom de la commande (transition), le nouveau statut (In Progress) et enfin le numéro du ticket que je veux modifier.

Configurer l’outil

Pour éviter de fournir chaque fois certaines options qui restent identiques d’un appel à l’autre, il est nécessaire d’utiliser des fichiers de configuration.

L’outil va chercher tous les répertoires et fichiers .jira.d/config.yml de façon hiérarchique.

Vous pouvez donc enregister sous votre répertoire maison, dans ~/.jira.d/config.yml, toutes les options communes à vos projets.

Dans mon cas ce fichier ressemble à ceci:

editor: emacs -nw
user: Michael Parienti

Ici j’ai seulement configuré mon éditeur par défaut et mon identifiant, qui est commun à toutes les instances jira que j’utilise.

Dans le répertoire (~/projects/nom-du-client/.jira.d/config.yml) j’enregistre l’url de l’instance jira utilisée par le projet:

endpoint: https://jira.nom-du-client.com/

Cela m’évite de fournir ce paramètre à chaque fois. Tous les exemples qui suivent dans cet article utilisent un endpoint défini dans un fichier de configuration.

Exemples de commandes

Voici une liste de commandes qui accèdent en lecture à Jira:

jira view PREFIX-10693
jira transitions PREFIX-10693
jira list --query "priority = Blocker"
jira list --query "Component = XYZ AND priority = Blocker"

Ces commandes respectives:

  1. affiche le ticket PREFIX-10693
  2. affiche la liste des changements de statut possibles pour ce ticket
  3. liste tous les tickets qui ont la priorité Blocker
  4. liste tous les tickets qui ont la priorité Blocker et qui ont le composant XYZ

Voici une liste de commandes qui modifient des tickets:

jira take PREFIX-10693
jira unassign PREFIX-10692
jira comment PREFIX-10693
jira comment --noedit -m "Un commentaire judicieux" PREFIX-10693
jira close PREFIX-10693

Ces commandes respectivement:

  1. M’assigne le ticket PREFIX-10693
  2. Enlève le propriétaire au ticket PREFIX-10692
  3. Ajoute un commentaire au ticket PREFIX-10693; l’éditeur par défaut va s’ouvrir
  4. Ajoute le commentaire "Un commentaire judicieux" au ticket PREFIX-10693 sans ouvrir d’éditeur
  5. Ferme le ticket PREFIX-10693

La liste de toutes les commandes disponibles est la suivante: «acknowledge, assign, attach, create attach get, attach list, attach remove, backlog, block, browse, close, comment, component add, components, create, createmeta, done, dup, edit, editmeta, epic add, epic create, epic list, epic remove, export-templates, fields, in-progress, issuelink, issuelinktypes, issuetypes, labels add, labels remove, labels set, list, login, logout, rank, reopen, request, resolve, start, stop, subtask, take, todo, transition, transitions, transmeta, unassign, unexport-templates, view, vote, watch, worklog add, worklog list, session».

Une aide est disponible pour chacune d’entre elles.

Créer ses propres commandes

Un autre point fort de l’outil go-jira est la possibilité de créer ses propres commandes.

L’exemple basique, fourni par la documentation, consiste à lister les tickets dont nous sommes le propriétaire:

custom-commands:
  - name: mine
    help: display issues assigned to me
    script: |-
      {{jira}} list --query "resolution = unresolved and assignee=currentuser() ORDER BY created"

Dans mon fichier de configuration global, j’ai créé une commande pour fermer un ticket et enlever le propriétaire au ticket, et une autre commande pour ajouter un commentaire rapidement:

custom-commands:
  - name: bye
    help: Close and unassign a ticket
    args:
      - name: TICKET
        required: true
    script: |-
      {{jira}} close {{args.TICKET}} ; {{jira}} unassign {{args.TICKET}}
  - name: sl-comment
    help: Comment a ticket with a single line comment
    args:
      - name: TICKET
        required: true
      - name: COMMENT
        required: true
    script: |-
      {{jira}} comment --noedit -m "{{args.COMMENT}}" {{args.TICKET}}

La commande sl-comment ne sert qu’à m’éviter de fournir l’argument --noedit que j’oublie tout le temps. La comment bye est un raccourci pratique pour supprimer les très vieux bugs qui ne sont plus d’actualité.

Les exemples ci-dessus sont simples. Il est aussi possible de spécifier très précisément les options et les arguments de chaque commande, en particulier leur type.

Et plus encore

L’outil propose d’autres fonctionnalités que je n’ai pas abordées, parce que je ne les utilise pas (encore) ou par manque de temps:

  • les fichiers de configurations peuvent être des scripts exécutables, et ainsi rendus dynamiques;
  • tout ce qui affiché peut être configuré via l’utilisation de templates (patron en bon français);
  • l’authentification peut s’appuyer sur des outils extérieurs; j’utilise personnellement pass.

Conclusion

Cet article n’est qu’une introduction à l’outil go-jira. Moi même j’utilise encore l’interface web pour avoir une vue d’ensemble sur les tickets d’un sprint.

J’utilise ensuite l’outil en ligne de commande pour les opérations simples comme le changement de propriétaire ou de statut d’un ticket. Mon objectif reste néanmoins de me passer de plus en plus de la lourde interface web.