2011-04-05 11 views
8

Estoy usando el complemento de liberación maven en hudson con autoVersionSubmodules configurado en true para incrementar automáticamente la versión de desarrollo en los poms.Uso del complemento de liberación maven autoVersionSubmodules para incrementar la versión principal

Me pregunto si hay una manera de hacer que el complemento incremente la versión principal en lugar de la versión secundaria.

Actualmente, cuando estoy en la versión 1.1.0-snapshot, la próxima versión está configurada como 1.1.1-snapshot, pero idealmente me gustaría que cambie a 1.2.0-snapshot.

¿Alguna idea sobre cómo lograr esto?

Gracias.

Respuesta

5

El maven release plugin le pedirá los valores de la versión de lanzamiento para etiquetar y también para la próxima versión de desarrollo. Puede definir estos para evitar indicaciones; por lo general, los configuraría en la línea de comando con algo como mvn -DreleaseVersion=1.1.0 -DdevelopmentVersion=1.2.0-SNAPSHOT.

Sin embargo, si no se le solicita que seleccione la versión, entonces algo está eligiendo para usted. Si está utilizando el complemento de publicación M2 para Hudson, entonces creo que tiene opciones para seleccionar la versión, pero probablemente debería encontrar una forma de configurarlas explícitamente. Más detalles acerca de su configuración particular ayudaría.

+0

Gracias por su respuesta Zac. No quiero que solicite la versión, pero tampoco quiero tener que ir y cambiar el releaseVersion y la versión de desarrollo cada vez. Solo quiero ver si hay una manera de aumentar automáticamente la versión. Usar -DautoVesrionSubmodules aumenta la versión menor, pero necesito aumentar la versión principal. Quiero ir de 1.1.0 a 1.2.0 – Arya

+0

@Arya en realidad '-DautoVersionSubmodules' no selecciona automáticamente la versión para usted. Solo se asegura de que la versión que se especifica se aplique a todos los módulos (de lo contrario, se le solicitará cada uno). Repito, "algo está eligiendo para ti". Si es maven, no creo que sea el complemento de lanzamiento. Sospecho que hay algo en su configuración de Hudson para hacerlo. –

4

... si hay una manera de hacer que el complemento incremente la versión principal en lugar de la versión secundaria.

Actualmente, cuando estoy en la versión 1.1.0 a la instantánea de la próxima versión se establece a 1.1.1 a la instantánea pero idealmente me gustaría que cambie a 1.2.0 a la instantánea.

Lo que está describiendo aquí es que maven-release-plugin está incrementando su versión de corrección y desea que la versión menor se incremente. Donde la versión x.y.z significa [majorVersion].[minorVersion].[fixVersion].

La forma en que lo resolvió es de la siguiente manera:

  1. Crear el guión maravilloso que va a recoger la versión de su incremento pom.xml de la manera que usted está explicando y establezca el developmentVersion y releaseVersion como cadena Hudson parámetros.
  2. Crear un trabajo en Hudson
  3. Coloque el guión maravilloso en el espacio de trabajo de su trabajo
  4. En el trabajo establecer un "Ejecutar sistema de escritura maravilloso" construir paso - proporcionar la ruta al script Groovy
  5. En el conjunto de trabajos un paso de construcción "Invocar objetivos Maven de primer nivel" e invocar el comando de liberación de maven con las propiedades developmentVersion y releaseVersion.

Paso 1:

import hudson.model.* 

createReleaseAndDevelopmentVersions(); 

def createReleaseAndDevelopmentVersions() { 
    def POM_LOCATION = build.parent.builds[0].properties.get("envVars")['WORKSPACE'] + "/pom.xml"; 
    def SNAPSHOT_PART = "-SNAPSHOT"; 
    def projectVersion = findOutCurrentVersion(POM_LOCATION); 
    def versionParts = projectVersion.tokenize('.'); 
    def mayorVersionPart = versionParts[0]; 
    def minorVersionPart = versionParts[1]; 
    def fixVersionPart = versionParts[2]; 
    def snapshotPartIndex = fixVersionPart.indexOf(SNAPSHOT_PART); 
    boolean hasSnapshotPart = snapshotPartIndex != -1; 
    if (hasSnapshotPart) { 
     fixVersionPart = fixVersionPart.substring(0, snapshotPartIndex); 
    } 
    int minorVersion = minorVersionPart.toInteger(); 
    int fixVersion = fixVersionPart.toInteger(); 
    def newFixVersion = 0; 
    def newMinorRelVersion; 
    def newMinorDevVersion; 
    if (hasSnapshotPart) { 
     newMinorRelVersion = minorVersion; 
     newMinorDevVersion = minorVersion + 1; 
    } else { 
     //TODO: either throw an exception here or change the newMinorRelVersion newMinorDevVersion appropriately to suite your use-cases: 
      //throw new IllegalArgumentException("The pom at location " + POM_LOCATION + " contains the version " + projectVersion + " which is not a snapshot version (missing " + SNAPSHOT_PART + "). This is a released version and nothing should happen to it!"); 
    } 
    def releaseVersion = mayorVersionPart + "." + newMinorRelVersion + "." + newFixVersion; 
    def developmentVersion = mayorVersionPart + "." + newMinorDevVersion + "." + newFixVersion + SNAPSHOT_PART; 
    createJenkinsVariablesAndAddToCurrentJob(releaseVersion, developmentVersion); 
} 

def findOutCurrentVersion (POM_LOCATION) { 
    def thr = Thread.currentThread() 
    def build = thr?.executable 
    def projectVersionParam = "projectVersion" 
    def resolver = build.buildVariableResolver 
    def projectVersionParamValue = resolver.resolve(projectVersionParam) 
    return projectVersionParamValue 
} 
def createJenkinsVariablesAndAddToCurrentJob (releaseVersion, developmentVersion) { 
    def pa = new ParametersAction([ 
     new StringParameterValue("releaseVersion", releaseVersion), new StringParameterValue("developmentVersion", developmentVersion) 
    ]) 
    Thread.currentThread().executable.addAction(pa) 
} 

Paso 5 (el comando experto):

clean release:clean release:prepare release:perform -DreleaseVersion=${releaseVersion} -DdevelopmentVersion=${developmentVersion} 

Cheers,
Déspota

Cuestiones relacionadas