2017-06-16 45 views
0

問題

Maven的解釋:詹金斯行家拆分版本範圍

versions:update-parent -N -DallowSnapshots=true -DparentVersion=[1.8.0,1.9.0) 

爲:

versions:update-parent -N -DallowSnapshots=true '-DparentVersion=[1.8.0' '1.9.0)' 

我想在Jenkinsfile管道運行Maven像這樣(加換行可讀性,這全部在一行上):

sh "mvn release:clean release:prepare -X 
-DcheckModificationExcludeList=pom.xml,pom.xml.versionsBackup 
-Dresume=false 
-DpreparationGoals=\'clean install -Dmaven.test.failure.ignore=true' 
-Darguments=\'-Dbuild.phase.beforeDeploy -DskipTests=true\' 
-DcompletionGoals=\'versions:update-parent -N -DallowSnapshots=true -DparentVersion=[1.8.0,1.9.0)\' 
[email protected]{project.groupId}[email protected]{project.artifactId}[email protected]{project.version}" 

當Maven開始執行完成目標部分時,它會分割版本範圍,將其視爲2個單獨的參數並以錯誤退出。相關日誌片段:

[INFO] Executing goals 'versions:update-parent -N -DallowSnapshots=true -DparentVersion=[1.8.0,1.9.0)'... 
[DEBUG] Using ${maven.home} of: '/home/jenkins/tools/hudson.tasks.Maven_MavenInstallation/mvn-3.2.5'. 
[DEBUG] Executing: /bin/sh -c cd /home/jenkins/workspace/ife-jen-maven-runner_master-6CIUKZ3STQA5HR4E2RYGZ5GBNFZPFT7UYLMWJ5EMFIBJ6ATW7RUA/appdir && /home/jenkins/tools/hudson.tasks.Maven_MavenInstallation/mvn-3.2.5/bin/mvn -X -D maven.repo.local=/home/jenkins/.m2/repository -s /tmp/release-settings1714400534004224741.xml -D skipTests=true -D build.phase.beforeDeploy=true -P nexus versions:update-parent -N -DallowSnapshots=true '-DparentVersion=[1.8.0' '1.9.0)' 

[INFO] [DEBUG] === REACTOR BUILD PLAN ================================================ 
[INFO] [DEBUG] Project: my-project:pom:6.4.123-SNAPSHOT 
[INFO] [DEBUG] Tasks: [versions:update-parent, 1.9.0)] 

INFO] [ERROR] Unknown lifecycle phase "1.9.0)". You must specify a valid lifecycle phase... 

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.3:prepare (default-cli) on project grin-colis: Maven execution failed, exit code: '1' -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.5.3:prepare (default-cli) on project grin-colis: Maven execution failed, exit code: '1' 
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216) 

你有沒有遇到類似的問題?你是怎麼處理的?

設置

構建是在Linux多克爾從屬運行(容器沒有被詹金斯管理)。

版本
  • 詹金斯2.46.1
  • 管道2.5
  • Maven的集成插件2.16
  • 集裝箱JDK的OpenJDK 1.8.0_121
  • 工作JDK的Oracle JDK 6u45(Java 6中要求的項目,使用自動安裝選項並在Jenkinsfile工具部分聲明)
  • Maven 3.2.5
  • 的Maven插件版本2.4(POM中聲明)
+0

單引號符號使用不收集,是'-DparentVersion =「[1.8.0 1.9.0)」' –

+0

的第一件事,我不不明白的是,如果你使用Maven-release-plugin,爲什麼要使用versions-maven-plugin?你爲什麼重新定義「準備目標」和「完成目標」?有什麼需要在發佈過程中更新父母? – khmarbaise

+0

@khmarbaise我不是發佈過程本身的作者。我只能將它移植到Jenkins管道,最好儘可能少地改變它。 –

回答

0

原來,罪魁禍首是最新的版本(2.5.3 )的maven-release-plugin。我尚未測試新版本(2.3.x,2.4.x)是否可行。

運行在項目的這個配置幫助:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-release-plugin</artifactId> 
    <version>2.2.2</version> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.maven.scm</groupId> 
      <artifactId>maven-scm-provider-gitexe</artifactId> 
      <version>1.9.5</version> 
     </dependency> 
    </dependencies> 
</plugin> 
0

你可能想將這些參數代入式(逃脫)報價:

sh "mvn release:clean release:prepare -X 
-DcheckModificationExcludeList=pom.xml,pom.xml.versionsBackup 
-Dresume=false 
-DpreparationGoals=\'clean install -Dmaven.test.failure.ignore=true' 
-Darguments=\'-Dbuild.phase.beforeDeploy -DskipTests=true\' 
-DcompletionGoals=\'versions:update-parent -N -DallowSnapshots=true -DparentVersion=\"[1.8.0,1.9.0)\"\' 
[email protected]{project.groupId}[email protected]{project.artifactId}[email protected]{project.version}" 
+0

使用這種格式'-DcompletionGoals ='版本後:update-parent -N -DallowSnapshots = true -DparentVersion = \「[1.8.0,1.9.0)\」''結果是'[INFO]執行目標的版本:update-parent -N -DallowSnapshots = true -DparentVersion =「[1.8.0,1.9.0)'...錯誤轉換Commandline.'如果我用快速單引號替換轉義的雙引號,我得到一個shell錯誤'語法錯誤:「)」意外「 –