Jenkins Git Plugin: comment construire une balise spécifique?

J'ai des problèmes pour que Jenkins construise une balise spécifiée. La balise fait partie d'une construction paramétrée, mais je ne sais pas comment passer cela au plugin git pour simplement construire cette balise. Cela a pris 3 heures de ma journée et j'ai concédé la défaite aux maîtres à stack overflow.

90
demandé sur Jonik 2012-04-17 21:17:37

10 réponses

J'ai pu le faire en utilisant le paramètre "branches to build":

Branch Specifier (blank for default): tags/[tag-name]

Remplacez [tag-name] par le nom de votre tag.

156
répondu Emmanuel Keller 2013-10-28 10:58:03

Aucune de ces réponses n'était suffisante pour moi, en utilisant Jenkins CI v. 1. 555, git Client plugin v. 1. 6.4, et git plugin 2.0.4.

Je voulais un travail à construire pour un référentiel Git pour une balise spécifique, fixe (c'est-à-dire non paramétrée). J'ai dû bricoler une solution à partir des différentes réponses plus le blog "construire un tag Git" cité par Thilo .

  1. assurez-vous de pousser votre balise vers le référentiel distant avec git push --tags
  2. dans le " dépôt Git" dans la section "Gestion du Code Source" de votre travail, cliquez sur "Avancé".
  3. dans le champ Refspec, ajoutez le texte suivant: +refs/tags/*:refs/remotes/origin/tags/*
  4. sous "Branches à construire"," spécificateur de branche", mettez */tags/<TAG_TO_BUILD> (en remplaçant <TAG_TO_BUILD> par votre nom de balise réel).

L'ajout du Refspec pour moi s'est avéré critique. Bien qu'il semble que les dépôts git récupéraient toutes les informations distantes par défaut quand je l'ai laissé vide, le plugin Git serait néanmoins complètement ne parviennent pas à trouver mon tag. Ce n'est que lorsque j'ai explicitement spécifié "get the remote tags" dans le champ Refspec que le plugin Git était capable d'identifier et de construire à partir de ma balise.

Update 2014-5-7: malheureusement, cette solution a un effet secondaire indésirable pour Jenkins CI (v. 1.555) et le mécanisme de notification push du dépôt Git à la Stash Webhook to Jenkins : chaque fois que une branche du dépôt est mise à jour dans un push, les travaux de construction de balises se déclencheront à nouveau. Cela conduit à beaucoup de reconstitutions inutiles des mêmes tâches de balise encore et encore. J'ai essayé de configurer les travaux à la fois avec et sans l'option "Forcer l'interrogation en utilisant l'espace de travail", et cela semblait n'avoir aucun effet. La seule façon d'empêcher Jenkins de faire les builds inutiles pour les travaux de balise est d'effacer le champ Refspec (c'est-à-dire, supprimer le +refs/tags/*:refs/remotes/origin/tags/*).

Si quelqu'un trouve une solution plus élégante, veuillez modifier cette réponse avec une mise à jour. Je soupçonne, par exemple, que peut-être cela cela n'arriverait pas si le refspec était spécifiquement +refs/tags/<TAG TO BUILD>:refs/remotes/origin/tags/<TAG TO BUILD> plutôt que l'astérisque fourre-tout. Pour l'instant, cependant, cette solution fonctionne pour nous, nous supprimons simplement le Refspec supplémentaire après le succès du travail.

69
répondu gotgenes 2017-05-23 12:18:19

Ne pouvez-vous pas dire à Jenkins de construire à partir d'un nom Ref? Si oui, alors c'est

refs/tags/tag-name

De toutes les questions que je vois sur Jenkins et Hudson, je suggère de passer à TeamCity. Je n'ai pas eu à éditer de fichiers de configuration pour que TeamCity fonctionne.

13
répondu Andrew T Finnell 2013-11-04 17:42:20

J'ai fait quelque chose comme ça et ça a marché:

Source Code Management

 Git    
    Repositories    


 Advance

Name: ref
Refspec : +refs/tags/*:refs/remotes/origin/tags/* 

 Branches to build  
 Branch Specifier (blank for 'any') : v0.9.5.2

entrez la description de l'image ici

Jenkins log a confirmé qu'il obtenait la source de la balise

Vérification de la révision 0b4d6e810546663e931cccb45640583b596c24b9 (v0.9.5.2)

7
répondu Hasan Shaik 2017-03-10 19:41:02

Dans un dernier Jenkins (1.639 et supérieur), vous pouvez:

  1. spécifiez simplement le nom de la balise dans un champ 'Branches à construire'.
  2. dans une construction paramétrée, vous pouvez utiliser parameter comme variable dans un même champ 'Branches to build', c'est-à-dire ${Branch_to_build}.
  3. vous pouvez installer Git Parameter Plugin qui vous fournira des fonctionnalités en répertoriant toutes les branches et balises disponibles.
6
répondu m1ld 2015-12-02 08:27:01

J'ai défini le champ avancé - > Refspec sur refs/tags/[your tag name]. Cela semble plus simple que les diverses autres suggestions pour Refspec, mais cela a très bien fonctionné pour moi.

UPDATE 23/7/2014 - en fait, après d'autres tests, il s'avère que cela n'a pas fonctionné comme prévu. Il semble que la version HEAD était toujours en cours de vérification. Veuillez annuler ceci comme réponse acceptée. J'ai fini par obtenir une solution de travail en suivant le post de gotgenes dans ce fil (30 Mars). Le problème mentionné dans ce post de déclenchement inutile des builds n'était pas un problème pour moi, car mon travail est déclenché à partir d'un travail en amont, pas à partir de l'interrogation SCM.

UPDATE APR-2018 - Notez dans les commentaires que cela fonctionne pour une personne, et est d'accord avec la documentation de Jenkins.

6
répondu Nebu 2018-05-21 17:41:38

Si vous utilisez des pipelines Jenkins et que vous voulez extraire une balise spécifique (par exemple: un paramètre TAG de votre build), voici ce que vous pouvez faire:

stage('Checkout') {
  steps {
    checkout scm: [$class: 'GitSCM', userRemoteConfigs: [[url: 'YOUR_GIT_REPO_URL.git', credentialsId: 'YOUR_GIT_CREDENTIALS_ID' ]], branches: [[name: 'refs/tags/${TAG}']]], poll: false
  }
}
4
répondu Vincent de Lagabbe 2017-08-31 08:56:09

J'ai pu amener Jenkins à construire une balise en définissant le spécificateur Refspec et branche comme détaillé dans cet article de blog .

J'ai également dû définir le nom du référentiel (à "ORIGINE" dans mon cas) afin que je puisse le référencer dans le Refspec (sinon il utiliserait apparemment un nom généré aléatoirement).

3
répondu Thilo 2013-07-24 05:46:57

Ce que j'ai fait à la fin était:

  • a créé une nouvelle branche jenkins-target, et a demandé à jenkins de suivre cela
  • fusionnez à partir de la branche ou de la balise que je veux construire sur jenkins-target
  • Une fois que la construction fonctionnait, teste etc, créez simplement une balise à partir de la branche jenkins-target

Je ne suis pas sûr que cela fonctionnera pour tout le monde, mon projet était assez petit, pas trop de tags et d'autres choses, mais c'est facile à faire, ne pas avoir à jouer avec refspecs et paramètres et autres :-)

1
répondu Hugh Perkins 2015-04-18 09:28:12

Vous pouvez même créer un type de balise, par exemple 1.2.3-alpha43, en utilisant des caractères génériques:

Refspec: +refs/tags/*:refs/remotes/origin/tags/*

Direction de la spécificateur: origin/tags/1.2.3-alpha*

Vous pouvez également cocher "Build quand une modification est poussée vers GitHub " pour déclencher la poussée, mais vous devez ajouter "create" action au webhook

1
répondu riverfall 2016-07-25 16:08:56