Tenemos una tubería multibramch en jenkins.

Sé que uno puede verificar si una rama coincide con el nombre, p.

when {
    branch "master"
}

Lamentablemente, nuestra rama predeterminada no se llama master y el nombre de la rama predeterminada cambia regularmente.

¿Hay alguna manera de verificar si una rama determinada es la rama predeterminada sin verificar el nombre?

when {
    branch is default
}

¿o algo como esto?

¡Gracias de antemano!

1
dsghrg 11 feb. 2020 a las 11:37

2 respuestas

La mejor respuesta

Puede usar la API de su SCR para obtener la rama predeterminada. Dependiendo de qué SCR use, la llamada a la API será diferente.

En GitLab, puede consultar la API REST del proyecto y en la respuesta encontrarás un campo default_branch que contiene esta información

GET /projects/:id

En GitHub, puede consultar la API REST de repositorios y en la respuesta encontrará un campo default_branch que también contiene esta información.

GET /repos/:owner/:repo

Tenga cuidado con la respuesta de GitHub porque contiene 3 campos llamados default_branch, uno para el repositorio real, uno para el repositorio principal y el último para el repositorio de origen. Está buscando el que está en la raíz del json, que es el del repositorio que está consultando.

1
matus 11 feb. 2020 a las 12:04
git ls-remote -q --symref | head -1

Esta es una solución alternativa ya que Gitlab & co utiliza Remote HEAD para marcar la "rama predeterminada". Podemos obtener referencias remotas con "git ls-remote -q --symref".

La cabeza remota será la primera línea, por lo que podemos elegir la primera línea con la cabeza del tubo -1. Esto nos da el hash de la "rama predeterminada".

1
R.S 13 feb. 2020 a las 08:38