tag crear git jenkins

crear - ¿Cómo recibir el nombre de la sucursal local de Git con el plugin Jenkins Git?



crear tag git (10)

Estoy usando la opción Branch Specifier del plugin Jenkins Git (v2.0) para ejecutar build en una rama específica, por ejemplo, 1.4 .

${GIT_BRANCH} en este caso contiene el valor de origin/1.4 .

¿Cómo puedo recibir un nombre de la rama local de Git utilizada para la clonación (es decir, solo 1.4 sin origin/ prefijo?

Intenté Check out to specific local branch comportamiento adicional de la Check out to specific local branch con el nombre de la rama 1.4 , pero nada había cambiado.

He visto relaciones PR relacionadas en GitHub, pero se ha rechazado (ya que corrige solo un caso con el origin remoto).


A partir de marzo de 2016 (Git Plugin v2.4.3), ahora es compatible de forma nativa. Simplemente coloque ** como el valor de Check out to specific local branch en el complemento de Git, en lugar de cualquier macro / variable.

La descripción del campo detalla el nuevo comportamiento:

Si se selecciona, y su valor es una cadena vacía o "**", entonces el nombre de la rama se calcula desde la rama remota sin el origen. En ese caso, se enviará un origen / maestro de una sucursal remota a una sucursal local llamada maestra, y una sucursal remota origen / desarrollo / nueva-característica se verificará en una sucursal local llamada desarrollar / nueva característica.

Esto fue introducido por @roostergx y @NickVolynkin mencionado cuando fue lanzado. Solo estoy documentando aquí para ayudar a la gente en el futuro.


Basado en esta respuesta SO: ¿Cómo puedo obtener el resultado de un comando de shell ejecutado usando una variable de Jenkinsfile (groovy)?

Utilicé esto y, finalmente, pude hacer que funcionara (el ejemplo siguiente supone una variable de rama de $Branch ):

stage(''Checkout'') { GIT_BRANCH_LOCAL = sh ( script: "echo $Branch | sed -e ''s|origin/||g''", returnStdout: true ).trim() echo "Git branch: ${GIT_BRANCH_LOCAL}" git branch: "${GIT_BRANCH_LOCAL}", credentialsId: ''...'', url: ''[email protected]:......git'' }


En una tubería, puedes hacerlo así:

// get arround a git scm anoying feature stage (''Bootstrap'') { sh "echo GIT_BRANCH_LOCAL=///"$GIT_BRANCH///" | sed -e ''s|origin/||g'' | tee version.properties" } stage(''Checkout'') { load(''version.properties'') checkout([$class: ''GitSCM'', branches: [[name: ''**'']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: ''LocalBranch'', localBranch: "${GIT_BRANCH_LOCAL}"]], submoduleCfg: [], userRemoteConfigs: [[url: ''https://github.com/webofmars/grails-website.git'']]]) }


Logré hacer eso con un par de pasos:

  1. Agregue Execute shell pre paso con estos:

    git_branch_local=$(echo $GIT_BRANCH | sed -e "s|origin/||g") echo GIT_BRANCH_LOCAL=$git_branch_local > build.properties

  2. Agregue un paso de Inject environment variables de build.properties para el archivo build.properties

entonces deberías tener una variable de entorno GIT_BRANCH_LOCAL que no tiene origin/


Me encontré con el problema hoy. La razón es que el complemento Jenkins git agregará "origen /" a cualquier nombre de rama que hayas proporcionado al parámetro de compilación GIT_BRANCH. Ver https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin

El plugin git establece varias variables de entorno que puedes usar en tus scripts: GIT_BRANCH - Nombre de la rama que se está utilizando actualmente, por ejemplo, "master" u "origin / foo"

Como resultado, cuando compila con el parámetro GIT_BRANCH = foo, Jenkins simplemente agregará "origen /" delante de él. Entonces, cuando lo hagas

git check out ${GIT_BRANCH}

en realidad estás haciendo

git check out origin/foo

Lo que puede hacer para evitar esto, es usar algo más en su parámetro de compilación, como GIT_BRANCH_NAME o lo que sea, simplemente no use GIT_BRANCH. En la configuración, elimine el parámetro GIT_BRANCH y agregue otro con el nombre GIT_BRANCH_NAME. Luego, en "Crear con parámetro", en GIT_BRANCH_NAME, especifica tu sucursal.


Me encontré con este problema también hoy. Parece ser que cuando cambio el valor de Check out to specific local branch , necesito eliminar el repositorio local en el servidor de compilación antes de activar una nueva compilación.


Publiqué un mensaje al grupo jenkins-ci ( https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/jenkinsci-dev/xuweZbwn9zE/BAWfs-ZeFAAJ ) sugiriendo una mejora en el plugin de Git Opción "Check Out to Local Branch". Por defecto, el plugin git verifica una cabeza separada. La sucursal local le permite especificar un nombre de sucursal específico. Cuando se configura, utilizando este método, el nombre de la sucursal local es exactamente como se especificó.

Si está usando Jenkins para hacer una versión maven, es obligatorio que el nombre de la sucursal local sea el mismo que el nombre de la sucursal remota. Vea la publicación en grupos de google para más información sobre esto.

Para abordar este requisito, he creado una solicitud de extracción ( https://github.com/jenkinsci/git-plugin/pull/381 ) con código y casos de prueba.

También creó un problema JIRA ( https://issues.jenkins-ci.org/browse/JENKINS-33202 ) para documentar el problema.

Si alguien necesita esta función, le recomiendo que la publique en la discusión grupal y vote por la JENKINS-33202.


Puede quitar el prefijo de la variable con bastante facilidad: ${GIT_BRANCH##origin/}

Aunque esta no es una solución muy general, es bastante simple y no he visto un repositorio clonado por Jenkins, que utilizaría algo más que el origin para el nombre remoto.

Actualización : en realidad, ${GIT_BRANCH#*/} funcionará para cualquier origen e incluso para las ramas que contienen barras inclinadas. El # hace un emparejamiento glob no codicioso, ## permite el emparejamiento codicioso. Ver el Manual de referencia de Bash para más detalles.


Si bien es cierto, como dice dtabuenc en un comentario a la respuesta de Jan Včelák, la sintaxis del intérprete de comandos no funcionará directamente en las macros del token, si está intentando obtener el nombre de la sucursal en un paso de compilación del Shell de ejecución (o similar), todavía puedes usar la misma idea.

TEMP_GIT_BRANCH=${GIT_BRANCH} MY_GIT_BRANCH="${TEMP_GIT_BRANCH#*/}"

funciona bien (y eso es válido POSIX, no se requiere bash).


Si lo comprueba como una sucursal local y luego usa $ {GIT_LOCAL_BRANCH} le da el nombre de la sucursal local (es decir, ''desarrollar'' en lugar de ''origen / desarrollar''. (Git Plugin versión 3.0.0)