2012-04-17 32 views
81

Tengo problemas para que Jenkins cree una etiqueta específica. La etiqueta es parte de una compilación parametrizada, pero no sé cómo pasar esto al plugin git para simplemente construir esa etiqueta. Esto ha tomado 3 horas de mi día y he concedido la derrota a los maestros en el desbordamiento de la pila.Jenkins Git Plugin: ¿Cómo construir una etiqueta específica?

+0

¿Quieres decir que esto es diferente de http://stackoverflow.com/questions/7157170/can-i-get-jenkins-to-build-a-git-tag-from-a-passed-in-parameter? (tercer resultado de https://www.google.com/search?q=git+jenkins+tag&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a) – VonC

+0

" Esto ha estado tomando 3 horas de mi día "- No soy tan vago que 3 horas de mi día no incluyeron todos los enlaces que pude encontrar en google :) – monkjack

+1

¿Estás seguro de que quieres hacerlo de esta manera? ¿Te das cuenta de que [etiquetar en git no escala] (http://lists-archives.com/git/747985-git-is-not-scalable-with-too-many-refs.html)? ¿Tal vez podrías usar una tarea de "ejecutar shell" para escribir un script para ver la etiqueta/revisión que * realmente * quieres? – mpontillo

Respuesta

5

Establecí el campo Avanzado-> Refspec en refs/tags/[your tag name]. Esto parece más simple que las otras sugerencias para Refspec, pero funcionó bien para mí.

ACTUALIZACIÓN 23/7/2014 - En realidad, después de más pruebas, resulta que esto no funcionó como se esperaba. Parece que la versión HEAD aún se estaba revisando. Por favor, deshaga esto como la respuesta aceptada. Terminé obteniendo una solución de trabajo siguiendo la publicación de gotgenes en este thread (30 de marzo). El problema mencionado en esa publicación de desencadenamiento innecesario de compilaciones no fue un problema para mí, ya que mi trabajo se desencadena desde un trabajo en sentido ascendente, no desde un sondeo de SCM.

13

¿No puede decirle a Jenkins que cree un nombre Ref? Si es así, entonces es

refs/tags/tag-name 

De todas las preguntas que veo sobre Jenkins y Hudson, me gustaría sugerir el cambio a TeamCity. No tuve que editar ningún archivo de configuración para que TeamCity funcione.

+0

No eres la primera persona que sugiere una ciudad de equipo en realidad. ¿Realmente es mucho mejor? Podría verlo. – monkjack

+1

@monkjack Intenté la misma sintaxis en uno de mis repositorios y funcionó. ¿Puedes hacer una lista de tus etiquetas actuales? ¿Estás seguro de que has empujado específicamente esa etiqueta al repositorio remoto con 'git push --tags' –

+0

@monkjack No estoy seguro de cómo se eligen a Jenkins o Hudson en TeamCity, excepto por sus restricciones en el número de Agentes y Proyectos. Son realmente diferentes en términos de calidad. Pagaré por TeamCity cuando/si llega el momento. –

4

Pude conseguir que Jenkins creara una etiqueta configurando Refspec y Branch Specifier como detailed in this blog post.

También tuve que configurar el nombre del repositorio (a "origen" en mi caso) para que pudiera referenciarlo en el Refspec (de lo contrario, aparentemente usaría un nombre generado aleatoriamente).

145

que era capaz de hacer eso mediante el uso de las "ramas para construir" parámetro:

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

Reemplazar [tag-name] por el nombre de su etiqueta.

+4

No sé por qué esto no tiene más +1. Esa entrada de blog de notas eróticas es confusa como el infierno. Esto es simple y funciona genial. ¡Gracias! –

+1

Funcionó muy bien para mí. Gracias. Mi parámetro se llamaba RELEASE_TAG, así que usé etiquetas/$ {RELEASE_TAG} como el valor para Branch Specifier. –

+0

@monkjack - ¿no debería ser esta la respuesta aceptada? – Ben

64

Ninguna de estas respuestas fue suficiente para mí, utilizando Jenkins CI v.1.555, complemento de Git Client v.1.6.4 y plugin de Git 2.0.4.

Quería que se creara un trabajo para un repositorio de Git para una etiqueta específica, fija (es decir, no parametrizada). Tuve que improvisar una solución de las varias respuestas más el "build a Git tag" blog postcited by Thilo.

  1. Asegúrese de empujar su etiqueta al repositorio remoto con git push --tags
  2. En la sección "Git repositorio" de su trabajo, en virtud de la "Gestión de Código Fuente", haga clic en "Opciones avanzadas".
  3. En el campo de Refspec, agregue el siguiente texto: +refs/tags/*:refs/remotes/origin/tags/*
  4. En "Ramas de construir", "Rama especificador", puso */tags/<TAG_TO_BUILD> (reemplazando <TAG_TO_BUILD> etiqueta con su nombre real).

Agregando el Refspec para mí resultó ser crítico. Aunque parecía que los repositorios de git estaban obteniendo toda la información remota de forma predeterminada cuando la dejé en blanco, el complemento de Git no pudo encontrar mi etiqueta por completo. Solo cuando especifiqué explícitamente "obtener las etiquetas remotas" en el campo Refspec, el plugin de Git fue capaz de identificar y construir desde mi etiqueta.

actualización 05/07/2014: Desafortunadamente, esta solución viene con un efecto secundario indeseable para Jenkins CI (v.1.555) y el mecanismo de notificación repositorio Git empuje a la Stash Webhook to Jenkins: cualquier momento cualquier rama en el repositorio se actualiza en un impulso, los trabajos de creación de etiquetas también se activarán nuevamente. Esto lleva a una gran cantidad de reconstrucciones innecesarias de los mismos trabajos de etiquetas una y otra vez. He intentado configurar los trabajos con y sin la opción "Forzar encuesta mediante el espacio de trabajo", y parecía no tener ningún efecto. La única forma en que podría evitar que Jenkins realice las construcciones innecesarias para los trabajos de etiquetas es borrar el campo Refspec (es decir, eliminar el +refs/tags/*:refs/remotes/origin/tags/*).

Si alguien encuentra una solución más elegante, edite esta respuesta con una actualización. Sospecho, por ejemplo, que quizás esto no sucedería si el refspec específicamente fuera +refs/tags/<TAG TO BUILD>:refs/remotes/origin/tags/<TAG TO BUILD> en lugar del asterisco catch-all. Por ahora, sin embargo, esta solución nos funciona, simplemente eliminamos el Refspec adicional una vez que el trabajo tiene éxito.

+3

Para "agregar el texto siguiente" al refspec ... si su refspec era previamente '+ refs/heads/*: refs/remotes/origin/*' ahora será '+ refs/heads/*: refs/remotos/origin/* + refs/tags/*: refs/remotos/origin/tags/*'. (No he trabajado mucho con refspecs, por lo que me llevó un tiempo aprender que este campo está delimitado por espacios.) – hangtwenty

+0

¡esta debería ser la respuesta aceptada! –

+0

Un +1 adicional para esta solución. Las soluciones anteriores tampoco me funcionaron. – whitespy9

1

Lo que hice al final fue:

  • creado una nueva rama jenkins-target, y tiene Jenkins para realizar un seguimiento de que
  • fusión desde cualquier rama o una etiqueta Quiero construir sobre la jenkins-target
  • vez la compilación funcionaba, las pruebas pasaban, etc., simplemente creaba una etiqueta desde la rama jenkins-target

No estoy seguro de si esto funcionará para todos, mi proyecto era bastante pequeño, no había demasiadas etiquetas y esas cosas, pero es muy fácil de hacer, no tengo que meterme con las especificaciones y parámetros y cosas así :-)

+0

Me gusta este enfoque muy simple. – zochhuana

6

Hice algo así y funcionó:

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

registro Jenkins confirmó que se estaba haciendo la fuente de la etiqueta

Comprobación de Revisión 0b4d6e810546663e931cccb45640583b596c24b9 (v0.9.5.2)

+0

¡Esto es ideal para crear todas las etiquetas, gracias! Agregar el 'refspec' fue el truco haciendo clic en el botón Avanzado. – styfle

5

En un reciente Jenkins (1.639 y superior) puede:

  1. basta con especificar el nombre de la etiqueta en un campo 'ramas para construir'.
  2. En una compilación parametrizada, puede usar el parámetro como variable en el mismo campo 'Sucursales para compilar', es decir, $ {Sucursal_para_construir}.
  3. puede instalar Git Parameter Plugin que le proporcionará funcionalidad mediante la lista de todas las ramas y etiquetas disponibles.
+1

De hecho, simplemente ingresar un nombre de etiqueta también me ha funcionado. Aunque la documentación para esto en el plugin git aún dice específicamente que hacer eso no debería funcionar: _ ": Esto no funciona ya que la etiqueta no será reconocida como etiqueta. Use refs/tags/ en su lugar." _ – Zitrax

+1

Gracias por el puntero al complemento de parámetros de Git. –

0

Usted puede construir incluso un tipo de etiqueta, por ejemplo 1.2.3-alpha43, utilizando comodines:

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

Branch especificador:origin/tags/1.2.3-alpha*

También puede marcar la casilla "Compilar cuando un cambio se presiona a GitHub "para activar el empuje, pero debe agregar "crear" acción a la web hook

4

Si está utilizando tuberías Jenkins y desea para la obtención de una etiqueta específica (por ejemplo: un parámetro TAG de su construcción), esto es lo que puede hacer:

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 
    } 
} 
Cuestiones relacionadas