web-dev-qa-db-fra.com

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 transmettre 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 au débordement de pile.

110
monkjack

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

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

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

195
Emmanuel Keller

Aucune de ces réponses ne m'a suffi, à l'aide de Jenkins CI v.1.555, du plugin Git Client v.1.6.4 et du plugin Git 2.0.4.

Je voulais qu'un travail soit créé pour un référentiel Git pour une balise fixe (c'est-à-dire non paramétrée) spécifique. J'ai dû bricoler une solution à partir des différentes réponses plus le message de 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 la section "Référentiel Git" de votre travail, sous "Gestion du code source", cliquez sur "Avancé".
  3. Dans le champ pour Refspec, ajoutez le texte suivant: +refs/tags/*:refs/remotes/Origin/tags/*
  4. Sous "Branches à construire", "Spécificateur de branche", insérez */tags/<TAG_TO_BUILD> (en remplaçant <TAG_TO_BUILD> par votre nom de balise actuel).

Ajouter le Refspec pour moi s’est avéré crucial. Même s'il semblait que les dépôts git récupéraient toutes les informations distantes par défaut lorsque je les laissais vides, le plugin Git ne parviendrait néanmoins pas à trouver mon tag. Ce n’est que lorsque j’ai explicitement spécifié "obtenir les balises distantes" dans le champ Refspec que le plug-in 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 sur Jenkins CI (v.1.555) et le référentiel Git. Push Mécanisme de notification à la Stash Webhook to Jenkins : à tout moment , toute branche du référentiel est mise à jour dans un Push, les tâches de construction de balises sont également réactivées. Cela conduit à de nombreuses reconstructions inutiles des mêmes tâches de tag, encore et encore. J'ai essayé de configurer les travaux avec et sans l'option "Forcer l'interrogation à l'aide d'un espace de travail", et cela n'a eu aucun effet. Le seul moyen pour empêcher Jenkins de créer des constructions inutiles pour les tâches de tag 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, modifiez cette réponse avec une mise à jour. Je soupçonne, par exemple, que cela ne se produirait peut-être 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 une fois le travail réussi.

74
gotgenes

Ne pouvez-vous pas dire à Jenkins de construire à partir d'un nom de référence? Si oui, alors

refs/tags/tag-name

Parmi toutes les questions que je vois sur Jenkins et Hudson, je suggérerais de passer à TeamCity. Je n'ai eu à éditer aucun fichier de configuration pour que TeamCity fonctionne.

15
Andrew T Finnell

Si vous utilisez des pipelines Jenkins et souhaitez extraire une balise spécifique (par exemple: un paramètre TAG de votre construction), 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
  }
}
9
Vincent de Lagabbe

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

enter image description here

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

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

9
Hasan Shaik

Je règle le champ Advanced-> Refspec sur refs/tags/[your tag name]. Cela semble plus simple que les diverses autres suggestions de 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 d'extraction. Veuillez annuler ceci en tant que réponse acceptée. J'ai fini par trouver une solution de travail en suivant le message de gotgenes dans ce fil (30ème Mars). Le problème mentionné dans ce message, qui était de déclencher des générations inutiles, n'était pas un problème pour moi, car mon travail est déclenché à partir d'un travail en amont, et non à partir de l'interrogation SCM.

UPDATE APR-2018 - Notez dans les commentaires que cela fonctionne pour une personne et est conforme à la documentation de Jenkins.

8
Nebu

Dans une dernière version de Jenkins (1.639 et plus), vous pouvez:

  1. il suffit de spécifier le nom de la balise dans le champ "Branches à construire".
  2. dans une construction paramétrée, vous pouvez utiliser le paramètre comme variable dans le même champ 'Branches à construire', c'est-à-dire $ {Branch_to_build}.
  3. vous pouvez installer Git Parameter Plugin qui vous fournira des fonctionnalités en listant toutes les branches et balises disponibles.
7
m1ld

J'ai pu obtenir que Jenkins construise une balise en définissant Refspec et Branch Specifier comme détaillé dans ce billet de blog .

Je devais également définir le nom du référentiel (sur "Origine" dans mon cas) pour pouvoir le référencer dans Refspec (sinon, il utiliserait apparemment un nom généré de manière aléatoire).

3
Thilo

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/*

Spécificateur de branche:Origin/tags/1.2.3-alpha*

Vous pouvez aussi cocher " Build quand un changement est poussé vers GitHub " pour déclencher le Push, mais vous devez ajouter "créer" action sur le Webhook

2
riverfall

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

  • créé une nouvelle branche jenkins-target, et jenkins le suit
  • fusionner avec la branche ou l'étiquette que je veux créer sur le jenkins-target
  • une fois que la construction fonctionne, que les tests passent, etc., créez simplement une balise à partir de la branche jenkins-target

Je ne sais pas si cela fonctionnera pour tout le monde, mon projet était plutôt petit, pas trop de balises et autres choses, mais c'est très facile à faire, il ne faut pas perdre son temps avec les références, les paramètres et d'autres choses :-)

2
Hugh Perkins

Ajout de mes deux cents ici car je n'ai pas vu de réponse qui utilise l'option "Construire avec des paramètres" dans Jenkins.

Ici, j’utilise la console de navigateur Jenkins CI pour le projet starwars_api et j’ai pu construire directement avec "Build with parameters" avec la valeur refs/tags/tag-name

  1. choisissez l'option "build with parameters".
  2. ajouter de la valeur dans la zone sous la forme "refs/tags/tag_142" (tag_name = tag_142 pour mon exemple)

construit avec le nom de la balise de référence

0
anayagam