web-dev-qa-db-fra.com

Comment configurer un seul travail Jenkins pour effectuer le processus de publication à partir d'un tronc ou de branches?

J'améliore actuellement le processus de sortie de nos projets sur Jenkins (1.430).

Travaux de publication actuels

Aujourd'hui, pour un projet spécifique, nous avons un travail dédié au processus de Release. La procédure complète est la suivante:

  1. Le développeur qui est en charge de la version modifie manuellement la version de tous les fichiers pom.xml (en fait en utilisant mvn versions:set -DnewVersion=2.0) pour se débarrasser du -SNAPSHOT.
  2. Ensuite, il crée une balise en SVN ( http: // my-svn-repo/project/tags/V_2_ par exemple).
  3. Une fois cette balise créée, il se connecte à notre serveur Jenkins et démarre une version Release.
  4. Cette build lui demandera quelle balise il veut utiliser pour la build. Le travail est configuré comme un Build paramétré, avec le paramètre List Subversion tags.
  5. Jenkins va ensuite construire les artefacts à partir de cette balise et les déployer sur notre instance Nexus.
  6. Une fois cela fait, le développeur a défini les versions de pom.xml sur la nouvelle version de développement (c'est-à-dire 2.1-SNAPSHOT).

L'avantage de cette méthode est que je n'ai que du travail Jenkins, car la construction ne s'appuiera que sur une balise.

Cependant, cette procédure implique trop d'interventions humaines (modifications du pom.xml, commits, tags, etc.).

Travaux de nouvelle version

Maintenant, j'utilise le plugin de sortie Maven. J'ai créé un travail qui demande trois informations à l'utilisateur qui lance la build:

  • la version de la version (paramètre releaseVersion du plugin de version);
  • la version de développement, après la sortie (paramètre developmentVersion du plugin de sortie);
  • le nom de la balise (paramètre tag du plugin de version).

Ce travail fonctionne bien, sauf pour un point: le travail est basé sur le tronc ou sur une branche dans SVN. Cela signifie que si j'ai 2 branches (en plus du tronc), je devrai créer 3 jobs de release: un par branche.

Une idée pour garder le meilleur des deux mondes (c'est-à-dire en utilisant la version mvn, mais en gardant 1 tâche de version) pour ajouter un paramètre de construction qui demandera à l'utilisateur le chemin du tronc/branche. Donc, au lieu de définir http://my-svn-repo/project/trunk (ou http://my-svn-repo/project/branches/BRANCH_V1) dans la configuration du travail, je définirai http://my-svn-repo/project/$FROM_BRANCH, et demandez à l'utilisateur de saisir le FROM_BRANCH paramètre.

Le problème avec cette solution est que l'utilisateur devra saisir trunk ou branches/BRANCH_Vx, ce qui peut entraîner des erreurs.

Idéalement, j'aimerais avoir un paramètre de build qui me laisse le choix de la branche (y compris le tronc), car le paramètre List Subversion tags existe pour le choix des tags ...

Donc ma question: existe-t-il une meilleure façon de configurer un travail Jenkins qui peut fonctionner sur toutes les branches?

Merci.


Edit: J'ai trouvé le plugin Validating String Jenkins qui peut être intéressant pour s'assurer que la valeur définie par l'utilisateur respecte une expression régulière. C'est utile dans mon cas ...

18
Romain Linsolas

Vous avez besoin de la version 1.32 du plugin Subversion. Le problème JENKINS-10678 a été implémenté dans cette version.

Ensuite, vous ne lui donnez que l'URL de votre projet (qui doit contenir le tronc, les branches et les balises) et il vous offrira le tronc avec vos branches.

9
Peter Schuetze

Juste pour ajouter quelques notes à la réponse de Peter si vous n'êtes pas si familier avec Jenkins.

Le plugin Subversion est installé par défaut dans les versions récentes (comme pour septembre 2015).

Ensuite, vous devez configurer votre projet comme suit:

  1. cochez "Cette version est paramétrée" (ce projet est paramétré dans les versions les plus récentes)
  2. choisissez "Liste des balises de sous-version (et plus)"
  3. dans le champ nom, définissez un nom variable qui pourra être référencé plus tard dans l'url svn. Je choisis svnbranch ici.
  4. dans le champ URL du référentiel, donnez-lui l'URL de votre projet (qui doit contenir le tronc, les branches et les balises)
  5. remplissez un autre champ selon vos besoins
  6. dans la gestion du code source, référencez la variable définie précédemment dans l'url de votre référentiel.

vérifiez les captures d'écran suivantes:

enter image description here

enter image description here

17
dezhi