Comment déclencher un build Jenkins lors d'un commit SVN

Publié le 22 Novembre 2011

SVN permet de définir des actions (hooks) en fonction des évènements de gestion conf. Il permet de définir les hooks suivant:

  • post-commit: déclenché après un commit
  • post-lock: déclenché après le lock d'un fichier ou d'un repertoire
  • post-revprop-change: déclenché après un changement de propriétés SVN
  • post-unlock: déclenché après la libération d'un lock
  • pre-commit: déclenché avant un commit
  • pre-lock: déclenché avant l'obtention d'un lock
  • pre-revprop-change: déclenché avant le changement de propriétés SVN
  • pre-unlock: déclenché avant la libération d'un lock
  • start-commit: déclenché avant l'opération de commit ne soit créé (avant le pre-commit).

Pour configurer un hook il faut placer un fichier exécutable (script, binaire, etc ..) dans le repertoire hooks de SVN, le nom du fichier devant être le nom du hook: http://svnbook.red-bean.com/en/1.5/svn.reposadmin.create.html#svn.reposadmin.create.hooks

Dans notre cas, seul le hook post-commit nous intéresse: Il faut donc créé un fichier nommé post-commit (sans .sh à la fin) et lui donner les drois 755 (soit rwxr-xr-x).

Le contenu du script doit être:

#!/bin/sh
#
REPOS="$1"
REV="$2"
UUID=`svnlook uuid $REPOS`
/usr/bin/wget \
  --header "Content-Type:text/plain;charset=UTF-8" \
  --post-data "`svnlook changed --revision $REV $REPOS`" \
  --output-document "-" \
  --timeout=2 \
  http://localhost/subversion/${UUID}/notifyCommit?rev=$REV

Penser à remplacer localhost par l'adresse du serveur Jenkins.

Comme on peut le voir lors d'un commit une commande wget sera exécutée pour envoyer une requête HTTP au serveur Jenkins.

Attention à bien activer le 'Poll SCM' dans la configuration du job Jenkins pour que le hook fonctionne (dans le cas contraire Jenkins ne déclenchera pas le build). Comme on a un déclenchement automatique on peut augmenter largement l'intervalle des vérifications SVN (une fois / jour par exemple).

Tout ceci est expliqué sur la page de configuration du plugin SVN : https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin

Rédigé par Bliz

Publié dans #Intégration continue

Repost 0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article