2017-08-17 70 views
4

我們使用聲明式管道,最新的Jenkins。構建在一個docker slave容器中執行,它有maven和其他工具。我們目前Jenkinsfile類似於此:在不重建的情況下部署maven工件

stage('build') { steps { sh 'mvn clean install'} } 
stage('test') { /* functional tests using a different tool */ } 
stage('publish') { 
    steps { 
     // mvn clean deploy -DskipTests -DaltDeploymentRepository... (rebuilds, which we want to avoid, as its a multimodule project) 
     // withMaven(options:[artifactsPublisher()] { } ... (from maven-pipeline-plugin) 
    } 
} 

詹金斯經典模式有一個Maven插件的集成提供了一個部分「部署文物,Maven倉庫」,它採用的Maven RedeployPublisher只發布假象。我正在尋找一個相當於此的管道,我認爲maven-pipeline-plugin會這樣做,但無法找到一個例子。任何指針讚賞!

+0

你面臨的問題是,在使用包含'install'階段的'deploy'的情況下,maven生命週期運行所有步驟...問題是你正在使用什麼樣的工具進行功能測試?爲什麼不使用Maven的集成測試階段? – khmarbaise

+0

@khmarbaise是的,安裝階段是我們想要避免的。功能測試也是基於mvn的,但由於其他原因必須獨立於編譯運行。 – vasya10

+0

@ vasya10您是否設法解決問題? – filip

回答

2

我偶然發現了你的問題尋找同樣的東西,什麼工作對我來說是這樣的:

stage('Deploy') { 
    sh "'${mvnHome}/bin/mvn' war:war deploy:deploy" 
} 

當然,你需要改變戰爭:戰爭要在工件類型部署(如此jar:jarear:ear)。我發現這是基於this answer,但它似乎與maven-war-plugin以及maven-jar-plugin相關,但war目標中沒有forceCreation選項。

+0

用這種方法你只部署指定的工件?你將如何部署(不重建)多模塊項目的所有工件(jar,zip,...)? – filip

+0

恐怕這不適用於多模塊項目。我的建議是在'mvn clean install'後面使用'mvn deploy -DskipTests'(沒有'clean'階段)。 – bushi

相關問題