web-dev-qa-db-fra.com

Jenkins: Comment utiliser le plug-in de déclenchement paramétré et passer une révision Subversion?

IMO, ce cas d'utilisation doit vraiment être spécifiquement expliqué sur la page Web/documentation du plugin.

Disons que j'ai un projet nommé U pour l'amont et D pour l'aval. Quand U a fini de construire, je veux que D vérifie la même révision que U vient de construire. U vérifiera toujours HEAD.

Voici ce que j'ai fait:

  1. En U, j'ai ajouté une "Actions post-build" pour "Trigger build paramétré sur d'autres projets".
  2. Pour "Projets à construire", j'ai tapé D et à construire uniquement lorsque "Stable".
  3. J'ai ajouté un déclencheur pour "révision Subversion".
  4. J'ai sauvegardé cette configuration

Maintenant, je ne sais pas ce que je suis censé faire ensuite, mais je n'ai aucun feedback pour indiquer que cela fonctionne. En fait, même ce testcase dédié à la source du plugin suggère que c'est tout ce que je dois faire.

Mais, si je devais deviner, je pense que je suis censé marquer U comme une construction paramétrée et y ajouter un paramètre. Ce paramètre doit être nommé ce que U envoie à D. Mais, si j'ai la bonne idée, je ne sais pas comment je suis censé nommer ce paramètre. Ni le journal de console de D ni le journal de console de U ne mentionnent de nouveau paramètre.

J'ai pris une supposition et créé un paramètre de chaîne en U nommé "SVN_REVISION" et l'ai mis par défaut à -1, mais cela n'a eu aucun effet. Chaque fois que D déclenche une génération, SVN_REVISION est défini par défaut sur -1.


C'est la sortie de l'exécution de export sur le projet D:

+ export
export BUILD_ID="2013-03-20_09-48-32"
export BUILD_NUMBER="4522"
export BUILD_TAG="jenkins-D-4522"
export BUILD_URL="http://my.jenkins.server.com:8081/job/D/4522/"
export EXECUTOR_NUMBER="2"
export HUDSON_COOKIE="8ec52f7a-d60d-4640-83a9-dbed7351b32a"
export HUDSON_HOME="/opt/hudson"
export HUDSON_SERVER_COOKIE="633967fcd1d6f7b38a85042ada5c3949"
export HUDSON_URL="http://my.jenkins.server.com:8081/"
export Java_HOME="/opt/Java"
export JENKINS_HOME="/opt/hudson"
export JENKINS_SERVER_COOKIE="633967fcd1d6f7b38a85042ada5c3949"
export JENKINS_URL="http://my.jenkins.server.com:8081/"
export JOB_NAME="D"
export JOB_URL="http://my.jenkins.server.com:8081/job/D/"
export LANG="en_US.UTF-8"
export LD_LIBRARY_PATH="/opt/jdk1.6.0_30/jre/lib/i386/server:/opt/jdk1.6.0_30/jre/lib/i386:/opt/jdk1.6.0_30/jre/../lib/i386"
export M2="/opt/maven/bin"
export M2_HOME="/opt/maven"
export MAVEN_OPTS="-Xms256m -Xmx512m"
export NHINC_PROPERTIES_DIR="/opt/nhinc/Properties"
export NLSPATH="/usr/dt/lib/nls/msg/%L/%N.cat"
export NODE_LABELS="master"
export NODE_NAME="master"
export OLDPWD
export PATH="/sbin:/usr/sbin:/bin:/usr/bin:/opt/Java/bin:/opt/Apache-ant-1.8.1/bin:/usr/local/bin:/opt/maven/bin"
export PWD="/opt/hudson/jobs/D/workspace"
export SHLVL="2"
export SVN_REVISION="24186"
export SVN_URL="https://a/url/trunk"
export TERM="xterm"
export WORKSPACE="/opt/hudson/jobs/D/workspace"
export XFILESEARCHPATH="/usr/dt/app-defaults/%L/Dt"
export _="/opt/Java/bin/Java"

Il semble donc avoir une variable d'environnement SVN_REVISION. Mais je ne pense pas que cela vienne nécessairement du plugin. Mes preuves proviennent de la description de "l'URL du référentiel" dans jenkins:

Lors de la génération, le numéro de révision du module qui a été extrait est disponible via la variable d'environnement SVN_REVISION, à condition que vous n'extrayiez qu'un seul module. Si vous avez extrait plusieurs modules, utilisez la commande svnversion. Si vous avez extrait plusieurs modules, vous pouvez utiliser la commande svnversion pour obtenir les informations de révision, ou vous pouvez utiliser les variables d'environnement SVN_REVISION_, où se trouve un index basé sur 1 correspondant aux emplacements configurés. Les URL sont disponibles via des variables d'environnement SVN_URL_ similaires.

Mais supposons que cela soit défini à partir de U au lieu de D. Comment puis-je faire en sorte que D l'utilise ou comment puis-je savoir qu'il l'utilise lorsque D est déclenché?


Permettez-moi de poser une question que je devrai probablement poser ensuite. Une fois que je connais le nom du paramètre que je dois utiliser, comment modifier la configuration de D pour qu'il vérifie cette révision? Dois-je modifier l '"URL du référentiel" pour mettre un @${PARAMETER_NAME} à la fin ou quelque chose?

19
Daniel Kaplan

Il s'avère, comme le dit le cas de test , c'était tout ce que j'avais à faire. J'ai testé cela en m'engageant sur U, puis en m'engageant à nouveau pendant la construction. Une fois que D a commencé à construire, il a saisi le premier commit, pas le dernier. C'est ainsi que j'ai testé que cela fonctionnait.

De meilleurs commentaires seraient appréciés, mais au moins je sais que cela fonctionne.

3
Daniel Kaplan

Je ne sais pas pourquoi le paramètre "Subversion revision" ne fonctionne pas (voir le conseil de dépannage ci-dessous), mais essayez d'ajouter le paramètre manuellement sous "Déclencher la construction paramétrée sur d'autres projets" avec la liste déroulante "Ajouter un paramètre". Le plus simple pourrait être d'ajouter des "Paramètres de construction actuels".

Vous pouvez également simplement spécifier les paramètres que vous voulez, avec les valeurs que vous voulez avec "Paramètres prédéfinis", probablement comme ceci:

SVN_REVISION=${SVN_REVISION}

Le marquage D comme paramétré ne devrait pas être nécessaire, cela signifie simplement que vous pouvez spécifier des paramètres avec des valeurs par défaut et obliger Jenkins à demander les paramètres lorsque la génération est déclenchée manuellement. Mais tout ce qui planifie une nouvelle génération (comme le fait le plug-in de déclenchement paramétré) peut toujours ajouter des paramètres à cette génération, quelle que soit la configuration du travail.


Astuce de dépannage: ajoutez une étape de génération pour vider les variables d'environnement (qui devraient également avoir tous les paramètres de génération) dans la génération déclenchée. Le plus simple est d'ajouter "Execute Shell"/"Execute Windows batch command" avec une commande pour vider l'environnement (export avec unix Shell, set avec Windows).

Ensuite, à partir de la sortie de la console de construction, voyez si les paramètres sont tels qu'ils devraient être (existent et ont les bonnes valeurs).

5
hyde