Actualmente estoy mejorando el proceso de lanzamiento de nuestros proyectos en Jenkins (1.430).¿Cómo configurar un solo trabajo de Jenkins para realizar el proceso de liberación desde el tronco o las ramas?
empleos versión actual
Hoy en día, para un proyecto específico, tenemos un trabajo dedicado al proceso de lanzamiento. El procedimiento completo es el siguiente:
- El desarrollador que está a cargo de la liberación cambia manualmente la versión de todos los archivos pom.xml (de hecho usando
mvn versions:set -DnewVersion=2.0
) para deshacerse de la-SNAPSHOT
. - Luego, crea una etiqueta en SVN (http://my-svn-repo/project/tags/V_2_0 por ejemplo).
- Una vez que se ha creado esta etiqueta, inicia sesión en nuestro servidor Jenkins y comienza una compilación de versión.
- Esta construcción le preguntará qué etiqueta quiere usar para la compilación. El trabajo se configura como Parameterized build, con el parámetro List Subversion tags.
- Jenkins construirá los artefactos a partir de esta etiqueta y los implementará en nuestra instancia de Nexus.
- Una vez hecho esto, el desarrollador establece las versiones pom.xml en la nueva versión de desarrollo (es decir,
2.1-SNAPSHOT
).
La ventaja de este método es que solo tengo el trabajo de Jenkins, ya que la creación se basará solo en una etiqueta.
Sin embargo, este procedimiento implica demasiadas intervenciones humanas (cambios de pom.xml, confirmaciones, etiquetas, etc.).
Los nuevos trabajos de liberación
Ahora, yo uso el plugin de Maven liberación. He creado un trabajo que pide tres información para el usuario que inicia la construcción:
- la versión de la liberación (parámetro
releaseVersion
del plugin de liberación); - la versión de desarrollo, después del lanzamiento (parámetro
developmentVersion
del complemento de publicación); - el nombre de la etiqueta (parámetro
tag
del complemento de versión).
Este trabajo funciona bien, excepto por un punto: el trabajo se basa en el tronco o en una rama en SVN. Esto significa que si tengo 2 ramas (además del tronco), necesitaré crear 3 trabajos de liberación: uno por rama.
Una idea para mantener lo mejor de los dos mundos (es decir, usar mvn release, pero manteniendo 1 release job) para agregar un parámetro de compilación que le preguntará al usuario por la ruta del tronco/rama. Por lo tanto, en lugar de establecer http://my-svn-repo/project/trunk
(o http://my-svn-repo/project/branches/BRANCH_V1
) en la configuración del trabajo, estableceré http://my-svn-repo/project/$FROM_BRANCH
y le pediré al usuario que ingrese el parámetro FROM_BRANCH
.
El problema con esta solución es que el usuario tendrá que ingresar ya sea trunk
o branches/BRANCH_Vx
, lo que puede ocasionar errores.
Idealmente, me encantaría tener un parámetro de compilación que me dejó la elección de la rama (incluyendo el tronco), como las etiquetas lista Subversion parámetro existen para la elección de las etiquetas ...
Así que mi pregunta: ¿hay una mejor manera de configurar un trabajo de Jenkins que pueda funcionar en todas las sucursales?
Gracias.
Editar: He encontrado el Validating String Jenkins plugin que puede ser interesante para asegurar que el valor definido por el usuario respeta alguna expresión regular. Eso es útil en mi caso ...
También puede utilizar alguna modificación de mi respuesta aquí: http://stackoverflow.com/a/41632406/2886891 –