2011-04-05 3 views
8

hudson에서 autoVersionSubmodules가 true로 설정된 maven 릴리스 플러그인을 사용하여 자동으로 개발 버전을 증가시킵니다.maven 릴리스 플러그인을 사용하여 autoVersionSubmodules를 주 버전으로 변경

플러그인을 부 버전이 아닌 주 버전으로 증가시키는 방법이 있는지 궁금합니다.

현재 버전 1.1.0- 스냅 샷에있을 때 다음 버전은 1.1.1- 스냅 샷으로 설정되지만 이상적으로는 1.2.0- 스냅 샷으로 변경하고 싶습니다.

어떻게해야합니까?

감사합니다.

답변

5

maven release plugin은 릴리스 버전의 값과 다음 개발 버전의 값을 입력하라는 메시지를 표시합니다. 프롬프트를 피하기 위해이를 정의 할 수 있습니다. 대개는 명령 행에서 mvn -DreleaseVersion=1.1.0 -DdevelopmentVersion=1.2.0-SNAPSHOT과 같이 설정합니다.

그러나 버전을 선택하라는 메시지가 표시되지 않으면 무엇인가를 선택하게됩니다. 허드슨을위한 M2 Release Plugin을 사용하고 있다면, 당신에게 버전을 선택할 수있는 옵션이 있다고 생각하지만, 명시 적으로 설정하는 방법을 찾아야한다. 특정 설정에 대한 자세한 내용은 도움이 될 것입니다.

+0

감사 자크. 버전을 묻는 메시지를 표시하고 싶지는 않지만 releaseVersion 및 developmentVersion을 매번 변경해야 할 필요는 없습니다. 나는 버전을 자동으로 증가시키는 방법이 있는지보고 싶다. -DautoVesrionSubmodules를 사용하면 부 버전이 증가하지만 주 버전을 늘려야합니다. 나는 1.1.0에서 1.2.0로 가고 싶다. – Arya

+0

@Arya 실제로'-DautoVersionSubmodules'는 자동으로 버전을 선택하지 않는다. 지정된 버전이 모든 모듈에 적용되는지 확인합니다 (그렇지 않으면 각각에 대해 프롬프트가 표시됩니다). 나는 "무언가가 당신을 위해 선택합니다"라고 반복합니다. 그것이 maven 인 경우, 릴리스 플러그인이라고 생각하지 않습니다. 허드슨 구성에 무언가가 존재한다고 생각합니다. –

4

... 플러그인을 만드는 방법이있는 경우 보조 버전이 아닌 이 증가합니다.

현재 버전 1.1.0- 스냅 샷에있을 때 다음 버전은 에서 1.1.1- 스냅 샷으로 설정되지만 이상적으로는 1.2.0- 스냅 샷으로 변경하고 싶습니다.

여기서 설명하는 것은 maven-release-plugin이 수정 버전을 증가시키고 보조 버전을 증가시키기를 원한다는 것입니다. 버전 x.y.z[majorVersion].[minorVersion].[fixVersion]을 의미합니다.

내가 이것을 해결하는 방법은 다음과 같이이다 :

  1. 당신이 설명하는 방식으로 귀하의 pom.xml 증가 그것에서 버전을 선택합니다 그루비 스크립트를 만들고 허드슨 문자열로 developmentVersionreleaseVersion을 설정 매개 변수.
  2. 은 작업의 작업 공간 작업에
  3. 에서 허드슨에
  4. 놓습니다 그루비 스크립트 작업을 만들기 설정 "시스템 그루비 스크립트를 실행"단계를 구축 - 작업 세트에 그루비 스크립트
  5. 에 대한 경로를 제공 "Invoke top-level Maven targets"빌드 단계와 developmentVersionreleaseVersion 속성을 가진 maven release 명령을 호출하십시오.

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) 
} 

5 단계 (받는다는 명령) :

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

건배, 답변에 대한
군주

관련 문제