【问题标题】:Deploying maven artifacts without rebuilding部署 Maven 工件而不重建
【发布时间】:2018-01-26 03:29:48
【问题描述】:

我们正在使用声明式管道,最新的 Jenkins。构建在 docker slave 容器中执行,该容器具有 maven 和其他工具。我们当前的 Jenkinsfile 类似于:

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

Jenkins 经典模式有一个 Maven 集成插件,它提供了一个“将工件部署到 Maven 存储库”部分,它使用 Maven RedeployPublisher 仅发布工件。我正在寻找与此等效的管道,我认为 maven-pipeline-plugin 可以做到这一点,但找不到示例。任何指针表示赞赏!

【问题讨论】:

  • 您面临的问题是,在使用deploy(包括install 阶段)的情况下,maven 生命周期会运行所有步骤...问题是您使用的是哪种工具功能测试?为什么不使用 Maven 的集成测试阶段?
  • @khmarbaise 是的,安装阶段是我们想要避免的。功能测试也是基于 mvn,但出于其他原因必须独立于编译运行。
  • @vasya10 你解决问题了吗?
  • @filip 不是我们想要的方式。我们继续使用 mvn clean deploy 命令并跳过测试,是的,它重建但正确发布。

标签: maven jenkins-pipeline


【解决方案1】:

我偶然发现你的问题正在寻找同样的东西,对我有用的是:

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

当然,您需要将 war:war 更改为您要部署的工件的类型(例如 jar:jarear:ear)。我根据this answer 找到了这个,但它似乎与maven-war-plugin 以及maven-jar-plugin 相关,尽管war 目标中没有forceCreation 选项。

【讨论】:

  • 这样你只部署指定的工件?您将如何部署(不重新构建)多模块项目的所有工件(jar、zip、...)?
  • 恐怕这不适用于多模块项目。我的建议是在mvn clean install 之后使用mvn deploy -DskipTests(没有clean 阶段)。
猜你喜欢
  • 1970-01-01
  • 2011-12-26
  • 2013-08-13
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 2020-11-27
相关资源
最近更新 更多