Le numéro de build indiqué par défaut lors de la construction dans Jenkins est un numéro qui s'incrémente à chaque construction. Ce numéro - mis à part de nous indiquer à combien de construction nous sommes rendu - n'apporte pas plus d'information.
Ce qui serait utile, par contre, c'est de savoir rapidement à quelle version de source cette construction correspond afin de disposer d'une meilleure traçabilité entre Source SVN -> artefact Jenkins.
Aucun plugin ne permet de le faire actuellement, nous allons voir comment on peut cependant le mettre en place rapidement.
Ce numéro de révision est global : il permet de restituer l'état d'un repository à un révision donnée.
Pour chaque sous répertoire, nous disposons d'un second indicateur : Last Changed Revision qui indique le dernier numéro de révision qui à modifié le répertoire en cours
Nous pouvons récupérer ces informations depuis la ligne de commande en se positionnant sur un répertoire de source précédemment checkoutée :
Les informations qui nous intéressent apparaissent dans les champs "Revision" et "Last Changed Rev".
Dans la configuration du build, ajouter une Pre steps avec execution de script Groovy "System". Exécuter en tant que script "System" signifie que le script sera exécuté dans la même JVM que Jenkins, ce qui permet d'avoir la main sur les objets Jenkins. C'est ce qui va nous permettre de modifier le nom du build ainsi que sa description.
Les deux lignes suivantes sont les imports des packages jenkins.
Au complet, ça nous donne :
Lors de la prochaine construction, depuis la View, on verra bien apparaitre notre numéro de révision
Dans la vue Constructions, le LCR apparait en tant que description :
Note complémentaire : pour les ceux qui utilisent SVN depuis Windows, l'outil en ligne de commande est internationalisé et répondra donc en français. Pour restituer les sorties consoles en anglais, ajouter la variable d'environnement suivante :
Ce qui serait utile, par contre, c'est de savoir rapidement à quelle version de source cette construction correspond afin de disposer d'une meilleure traçabilité entre Source SVN -> artefact Jenkins.
Aucun plugin ne permet de le faire actuellement, nous allons voir comment on peut cependant le mettre en place rapidement.
Retour sur les versions de SVN
Dans notre contexte, nous avons plusieurs projets disponibles sur un repository SVN. Chaque projet est donc sur un sous-répertoire depuis la racine du dépot. A chaque commit (peu importe sur quel projet), le numéro de révision du dépôt est incrémenté.Ce numéro de révision est global : il permet de restituer l'état d'un repository à un révision donnée.
Pour chaque sous répertoire, nous disposons d'un second indicateur : Last Changed Revision qui indique le dernier numéro de révision qui à modifié le répertoire en cours
Nous pouvons récupérer ces informations depuis la ligne de commande en se positionnant sur un répertoire de source précédemment checkoutée :
$ svn info Path: . Working Copy Root Path: D:\projets\toto\source\ URL: http:/xxx/usvn/svn/toto/trunk Repository Root: http://xxx/usvn/svn/toto Repository UUID: a1ebbc07-6c76-4030-a489-aa0d2fd72fa2 Revision: 11372 Node Kind: directory Schedule: normal Last Changed Author: fdupont Last Changed Rev: 11360 Last Changed Date: 2013-09-11 17:23:54 +0200 (mer., 11 sept. 2013)
Les informations qui nous intéressent apparaissent dans les champs "Revision" et "Last Changed Rev".
Prise en compte dans Jenkins
Pour la prise en compte dans Jenkins, il faudra ajouter le plugin Hudson Groovy builderDans la configuration du build, ajouter une Pre steps avec execution de script Groovy "System". Exécuter en tant que script "System" signifie que le script sera exécuté dans la même JVM que Jenkins, ce qui permet d'avoir la main sur les objets Jenkins. C'est ce qui va nous permettre de modifier le nom du build ainsi que sa description.
Les deux lignes suivantes sont les imports des packages jenkins.
import hudson.model.* import hudson.util.*Récupère l'instance du build courant
def build = Thread.currentThread().executableOn récupère ensuite le workspace du build courant, c'est à dire le répertoire dans lequel les sources sont chéckoutée. Ce répertoire contient le répertoire .svn qui sera utilisé par la commande svn info.
def workspace = build.getWorkspace()En groovy, le moyen le plus simple d'exécuter une commande shell et de récupérer le résultat est de passer par une tâche Ant.
def ant = new AntBuilder() ant.exec(executable: "svn", outputproperty: "output", dir: workspace){ arg(line: "info") }La sortie est récupérée depuis la variable "outputProperty" puis sert à alimenter la variable svnInfo.
svnInfo = ant.project.getProperty("output")On utilise ensuite des expression régulière pour récupérer le numéro de révision ainsi que le LCR (Last Changed Revision.
def pattern = /Last\s+Changed\s+Rev:\s+(\d+)/ def matcher = (svnInfo =~ pattern) def lcr = "Last changed revivion : <b>" + matcher[0][1] + "</b>" pattern = /Revision:\s+(\d+)/ matcher = (svnInfo =~ pattern) def rev = "r" + matcher[0][1]Le nom du build est ensuite modifié avec l'intitulé de la révision et la description est renseignée avec le LCR.
build.setDisplayName(rev) build.setDescription(lcr)
Au complet, ça nous donne :
import hudson.model.* import hudson.util.* def build = Thread.currentThread().executable def workspace = build.getWorkspace() def ant = new AntBuilder() ant.exec(executable: "svn", outputproperty: "output", dir: workspace){ arg(line: "info") } svnInfo = ant.project.getProperty("output") def pattern = /Last\s+Changed\s+Rev:\s+(\d+)/ def matcher = (svnInfo =~ pattern) def lcr = "Last changed revivion : " + matcher[0][1] + "" pattern = /Revision:\s+(\d+)/ matcher = (svnInfo =~ pattern) def rev = "r" + matcher[0][1] build.setDisplayName(rev) build.setDescription(lcr)
Lors de la prochaine construction, depuis la View, on verra bien apparaitre notre numéro de révision
Dans la vue Constructions, le LCR apparait en tant que description :
Note complémentaire : pour les ceux qui utilisent SVN depuis Windows, l'outil en ligne de commande est internationalisé et répondra donc en français. Pour restituer les sorties consoles en anglais, ajouter la variable d'environnement suivante :
set LC_MESSAGES=en_USL'article original : http://jayflowers.com/WordPress/?p=258
Aucun commentaire:
Enregistrer un commentaire