Automatizando el flujo de trabajo de liberación de Git con el trabajo de CI

Tengo la siguiente configuration de desarrollo:

  • Proyectos de Git alojados en un GitLab alojado en uno mismo
  • GitLab CI ejecuta trabajos en ciertas twigs cada vez que presiono (compilation, testing y código de pelusa, por ejemplo)

Hasta aquí todo bien. Pero ahora, quiero automatizar ciertas tareas de git. Por ejemplo, supongamos la siguiente estrategia de lanzamiento hipotética para mis lanzamientos menores:

  • En la twig de desarrollo, elimine la versión -SNAPSHOT del file de versión ( package.json , pom.xml … depende del proyecto), luego confirme
  • Combinar dev en master y labelr la fusión commit vX.YZ
  • En dev, topa la versión menor y -SNAPSHOT con -SNAPSHOT , luego confirma
  • Activar un script de deployment (o tener un trabajo de deployment de CI que se desencadena en GitLab CI cada vez que se empuja una label vX.YZ al dominio)

¿Cómo integraría este script de lanzamiento en mi configuration de CI?

Sé que Jenkins puede hacer tales cosas, y tengo una instancia de Docker ejecutándose. También pensé que podría definir un guión en GitLab CI que hace el trabajo y empuja los cambios al repository de Git usando una tecla de implementación.

Lo importante que quiero lograr es tener versiones administradas automáticamente. Por esa razón, actualmente tengo un script de nodo que toma como input la versión actual -SNAPSHOT y emite la versión de lanzamiento y la próxima versión de SNAPSHOT de desarrollo, calculada automáticamente. Sé que npm y maven tienen commands como nom version patch minor pero quiero administrar la versión de la versión yo mismo (y no delegarla en el administrador de dependencies).

Terminé usando Jenkins, junto con el plugin Git, el plugin Reactive Choice y una biblioteca personalizada para get / configurar la versión automáticamente dependiendo del tipo de proyecto (proporcionado al trabajo de Jenkins como parámetro de solo lectura). El script de lanzamiento se implementa como un script de shell.