Réindexation programmée de JIRA

logo_jira

En vue de fournir à ses utilisateurs une recherche rapide et pertinente, JIRA maintient un index Lucene de tout texte entré dans les différents champs d'un ticket. Cet index est normalement mis à jour à chaque fois qu'un nouveau champ est renseigné ou mis à jour. Mais il arrive qu'il faille régénérer l'index manuellement. Par exemple lorsqu'il est corrompu, ou lorsque la configuration d'un champ personnalisé est mise à jour.

Il existe deux types de réindexation :

  1. L'une se fait en arrière-plan, mais elle peut être relativement longue à s'achever ; toutefois, les utilisateurs peuvent continuer à utiliser JIRA normalement pendant que s'effectue la réindexation.
  2. La seconde réindexation s'effectue en avant-plan et, contrairement à la précédente, a pour caractéristique de provoquer une interruption de service, bloquant tout accès à JIRA jusqu'à ce que la réindexation s'achève. En outre les index relatifs aux commentaires et à l'historique des changements ne peuvent être reconstruits que par cette voie.

Pour minorer ces inconvénients, il est intéressant de procéder à la réindexation en « heures creuses » (heures non ouvrées ou de faible activité). Mais comme la réindexation ne peut être programmée, cela impliquait -- du moins avant JIRA 6.1 -- que l'administrateur JIRA fût devant sa machine.

Or Atlassian, étendant sans cesse son API REST pour JIRA, a ajouté avec la livraison 6.1 (sortie en septembre 2013) une nouvelle ressource permettant de déclencher une réindexation par un simple appel HTTP POST. Cette ressource permet désormais -- pourvu que l'on dispose des droits ad hoc -- de déclencher à distance et programmatiquement une réindexation. Avec cURL, par exemple, comme l'illustre le script reindex.sh suivant :

#!/bin/sh
# Created on: 2014-11-19
# Created by: Nicolas Casanova
# Depends on: printf curl base64 cut grep
set -o posix

unset PATH;
PATH=/bin:/usr/bin export PATH

conf_dir="./conf";
ini_file="$conf_dir/reindex.ini"

# See API reference
#  https://docs.atlassian.com/jira/REST/6.3.9/
resource="/rest/api/2/reindex"

# See JIRA Knowledge Base
#  https://confluence.atlassian.com/display/JIRAKB/How+to+trigger+re-indexing+using+REST+request+via+cURL+command
reindex_type='BACKGROUND_PREFERRED';

# Parsing options
while getopts i:t: option
do      case "$option" in
        i)      jira_instance="$OPTARG";;
        t)      if [ "$OPTARG" = "fg" ]; then
                    reindex_type="FOREGROUND"
                elif [ "$OPTARG" = "bg" ]; then
                    reindex_type="BACKGROUND"
                fi ;;
        [?])    echo >&2 "Usage: $0 [-i JIRA instance name] [-t index type (fg or bg)]"
                exit 1;;
        esac
done

shift $(( $OPTIND-1 ))

# Getting JIRA URL, admin username and password from config file
if [ -r "$ini_file" ]; then
    instance_name=$( grep "^$jira_instance" $ini_file | cut -d '=' -f1 )
    if [ "$jira_instance" = "$instance_name" ];
    then
        base_url=$( grep "^$jira_instance" $ini_file | cut -d "=" -f2 )
    fi
    username=$(grep "^username" "$ini_file" | cut -d '=' -f2)
    password=$(grep "^password" "$ini_file" | cut -d '=' -f2)
    # Note that base64 is part of GNU coreutils
    # If you're not using GNU/Linux, consider using
    #  OpenSSL or Perl with its MIME::Base64 module
    credentials=$(printf $username:$password | base64)
else
    echo " Configuration file \"$ini_file\" not readable." >&2
    exit 1
fi

# Building REST URL
if [ -n "$base_url" ]; then
    url=$base_url$resource
else
    echo " JIRA base URL ($base_url) is not defined." >&2
    exit 2
fi

# For the X-Atlassian-Token header, see:
#  https://developer.atlassian.com/display/JIRADEV/Form+Token+Handling#FormTokenHandling-Scripting
curl -X POST -H "Authorization: Basic $credentials"\
             -H "Cache-Control: no-cache"     \
             -H "X-Atlassian-Token: no-check" \
              $url?type=$reindex_type

exit $?
reindex.sh

Quant au fichier de configuration (reindex.ini), il a simplement besoin d'être ainsi constitué :


; URL de JIRA. La partie gauche est l'argument passé après -i, en ligne de commande
jira=http://localhost:8080/jira
; Nom d'un utilisateur avec des droits d'administration
username=username
; Le mot de passe correspondant
password=password

Et il n'y a plus qu'à l'appeler :

$ sh reindex.sh -i jira -t bg

bouton_atlassian_netapsys

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.