¿Cómo usar la fusión de precompilation de Jenkins solo para las sucursales que deseo fusionar?

Estoy leyendo https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin-AdvancedFeatures, que permite construcciones previas de twigs de características antes de enviar confirmaciones a la twig maestra, implementando de manera efectiva una compilation previa a la confirmación. queue de testing.

Dice debajo de Using Git, Jenkins and pre-build branch merging :

Configure su proyecto Jenkins y deje el campo 'branch' en el Git SCM en blanco. Esto hará que Jenkins considere cualquier cambio en cualquier twig para la construcción.

Luego, elija un nombre de twig particular como el objective de integración en la sección "Avanzado" (por ejemplo, "maestro" o "estable") y select "Fusionar antes de compilation".

Seleccione 'Empujar tags GIT de vuelta al repository de origen' de las acciones posteriores a la construcción (esto es necesario para actualizar su repository git centralizado con los resultados de la compilation).

Ahora, los desarrolladores nunca deben comprometerse directamente con su twig de integración (el 'maestro' o 'estable'). En su lugar, deben usar twigs de características o crear nuevas twigs remotas en la confirmación (por ejemplo: "git push origen HEAD: refs / heads / myNewFeature"). También puede configurar su repository de GIT para que solo acepte confirmaciones en la twig de integración de Jenkins.

Ya terminaste Los commits ahora se deben fusionar automáticamente con la twig de integración (fallarán si no se combinan limpiamente) y se generarán. Si la compilation tiene éxito, el resultado de la fusión se retrotraerá al repository remoto de git.

Ahora a menudo tengo twigs de características en las que me gustaría continuar desarrollando y solo las fusiono en master más adelante.

Por lo que yo entiendo, esta configuration se fusionará y empujará cualquier twig de características al master tan pronto como se construya.

(¿Cómo puede Jenkins respaldar mi caso de uso, crear todas las twigs de características, pero fusionarlas solo en master que yo quiero fusionar?

Tengo una cartera de compilation en la que solo quiero que la twig de desarrollo se fusione de nuevo a mi twig estable. Todos los demás no deberían fusionarse. La forma en que he resuelto esto es tener un trabajo separado para la fusión. Cuando se completa el trabajo de compilation, el trabajo 'fusionar' solo se activa si la variable de entorno GIT_BRANCH es igual a 'desarrollar'.

Jenkins no tiene un disparador condicional muy bueno que funcione de la manera que yo quiero. Aquí es cómo configuro mi trabajo de compilation para activar de forma condicional el paso de fusión.

  • Agregue un paso de compilation para eliminar un file llamado trigger.properties (utilizo el paso de compilation Ejecutar Shell)
  • Agregue un paso de compilation (plugin conditional-buildstep) Paso condicional (individual) para ejecutar si $ GIT_BRANCH es igual a "origen / desarrollo". Cuando es verdadero, ejecuta un command de shell para crear el file trigger.properties. (toque trigger.properties)
  • Agregue una acción de creación posterior (complemento de activación parametrizado) para activar mi trabajo de combinación cuando la creación sea estable. En la sección Parámetros del file de properties, complete el campo con "trigger.properties". Hay una opción "No activar si falta algún file", así que verifique eso.

Entonces, el process es que el file trigger.properties se elimina por primera vez para garantizar que una ejecución previa no entre en conflicto. Luego, verifique si la twig git está desarrollada. Si es así, vuelva a crear el file trigger.properties. El paso posterior a la creación requiere que el file exista para que se active el siguiente trabajo.

Ahora puede realizar los types de fusión que desee en un trabajo hecho para eso. También puede modificar este process para que más de una twig llegue a la tarea de fusión.

¿Has echado un vistazo al plugin commit confirmado previamente para Jenkins? https://wiki.jenkins-ci.org/display/JENKINS/Pretested+Integration+Plugin

Fue diseñado exactamente para el propósito que describiste.