remota - git remove tag
Construye solo la rama Git que ha sido empujada a (6)
Tengo un trabajo de Jenkins para construir la rama master
de mi repositorio de GitHub. Se dispara muy bien cuando presiona un compromiso para master
, y estoy muy feliz por ello.
También me gustaría tener un solo trabajo de Jenkins que pueda construir cualquier otra rama en este repositorio. Es decir, cada vez que presiono un compromiso en una rama (que no es master
), me gustaría tener este trabajo de Jenkins para construir esa rama, y solo esa rama.
El uso del complemento de solicitud de extracción de GitHub me obliga a crear una solicitud de extracción y combina mi confirmación con el master
. Me gustaría hacer esto sin tener que crear una solicitud de extracción, y solo compilar mi confirmación sin fusionarla con el master
.
Configurar el complemento Git para construir todas las ramas significa que cada vez que presiono para dominar, se construyen todas las ramas. Me gustaría construir solo la rama que ha sido modificada.
¿Es esto posible hacer en Jenkins?
Como se mentioned @ thatway_3, esto es posible con un complemento. El complemento del proyecto Multi-Branch al que se vincularon está en desuso, pero en su lugar puede usar el complemento multibranquio Pipeline
Si instala ese complemento y luego crea un nuevo trabajo de tipo "Pipeline Multibranch", puede configurarlo para rastrear un repositorio en particular. Entonces (¡correctamente!) Construirá todas las ramas desde allí.
Ver también: https://jenkins.io/blog/2015/12/03/pipeline-as-code-with-multibranch-workflows-in-jenkins/
Espero que esto ayude.
En realidad, parece haber una respuesta precisamente a esta pregunta en la página del complemento Jenkins GitHub:
Desencadenar una compilación cuando se empuja un cambio a GitHub
Estaba teniendo el mismo problema, así que configuré un proyecto ficticio para experimentar y encontré la solución. Y descubrió que sí, puedes construir solo la rama en la que se ha empujado.
La respuesta corta es utilizar un "Especificador de rama" . Por ejemplo, origin/feature**
.
Si está utilizando GitFlow y todas las ramas de sus características se nombran con una feature/
prefijo, entonces esta es la solución.
Y si tienes curiosidad, así es como lo descubrí.
Desde la configuración del repositorio configuré el servicio "complemento Github" con el https://<jenkin server>/github-webhook/
Jenkins https://<jenkin server>/github-webhook/
. Tenga en cuenta que, al menos para mí, lo que sucedió fue que, por algún motivo, después de presionar "prueba" , el mensaje de la carga útil que se envía nunca cambió para confirmar que se recibió / reconoció o algo. Tal vez no hay respuesta. Es confuso, pero de todos modos ...
Creé un nuevo trabajo de Jenkins y configuré el especificador de rama en blanco, que Jenkins establece automáticamente en **
.
Creé una característica de rama de feature/foo
y empujé en ella.
- La compilación 1 se disparó, pero en la rama
master
. - La compilación 2 también se activó en la
feature/foo
ramafeature/foo
.
Así que parece que con el especificador **
o en blanco, el complemento activará las compilaciones en todas las ramas de un repositorio siempre que haya un impulso para cualquiera de ellas.
Luego probé con refs/heads/feature/foo
patrón y presioné otro cambio en la rama feature/foo
.
- La compilación 3 se activó en la
feature/foo
ramafeature/foo
. - No se dispararon otras construcciones.
Algo bueno, pero esto es demasiado rígido. Nos obligaría a tener un trabajo de compilación para cada rama de función. Quería un trabajo de compilación para todas las ramas principales.
Luego probé un comodín con patrones refs/heads/feature/*/*
y presioné los cambios para feature/foo
.
- No se disparó ninguna construcción.
Luego probé con el especificador de rama refs/heads/feature//*/*
y presioné.
- No se disparó ninguna compilación
Luego vi la ayuda del campo "Especificador de rama" que se lee en la sección "Comodines":
La sintaxis es de la forma:
REPOSITORYNAME/BRANCH
. Además,BRANCH
se reconoce como una abreviatura de*/BRANCH
,*
se reconoce como comodín, y**
se reconoce como comodín que incluye el separador/
. Por lo tanto,origin/branches*
coincidiría conorigin/branches-foo
pero noorigin/branches/foo
, mientras queorigin/branches**
coincidirá conorigin/branches-foo
yorigin/branches/foo
.
Así que probé el origin/feature**
- La compilación 4 se activó en
origin/feature/foo
.
¡Eureka! Parece que no puedes usar comodines con las referencias (comenzando con refs/
), pero sí puedes con los nombres de las ramas reales (comenzando con origin/
).
Luego creé la feature/bar
rama y la presioné. Para verificar que solo se construirá éste y no otras ramas que también comiencen con la feature/
.
- La compilación 5 se disparó en el
origin/feature/bar
.
Parecía casi allí. Sólo necesitaba un par de pruebas más.
Entonces empujé otro cambio a origin/master
- No se construyó ningún edificio. ¡Genial!
Luego presioné otro cambio en feature/bar
, para probar que solo se construiría esta rama. A pesar del hecho de que el origin/master
también había sido empujado.
- La compilación 6 se activó en la
feature/bar
. - No hay otras construcciones disparadas.
Me parece bien.
Puede especificar fácilmente la rama en la configuración del trabajo:
En la sección Administración del código fuente, donde ya ha especificado la URL de su repositorio git, también tiene la opción de especificar las sucursales para construir . Simplemente, por favor, el nombre de su sucursal en lugar del maestro (que es el valor predeterminado).
Puedes ver el plugin de múltiples sucursales configurando con Jenkins. Obtener retroalimentación para cualquier rama de Jenkins es posible con ese método.
https://wiki.jenkins-ci.org/display/JENKINS/Multi-Branch+Project+Plugin
Espero que pueda ayudar.