当前位置: 首页 > 知识库问答 >
问题:

Jenkins管道中未设置Maven工具

卓胜
2023-03-14

我的 Jenkins 管道中有这个阶段:

   stage('Build') {
       def mvnHome = tool 'M3'
       sh '''for f in i7j-*; do
                 (cd $f && ${mvnHome}/bin/mvn clean package)
             done
             wait'''
   }

在Jenkins"管理Jenkins"全局工具配置中,我有一个名为M3的Maven安装,版本3.3.9

运行此管道时,<code>mvnHome</code>为空,因为我在日志中得到了以下信息:

+ /bin/mvn clean install -Dmaven.test.skip=true
/var/lib/jenkins/jobs/***SNIP***/script.sh: 3: /var/lib/jenkins/jobs/***SNIP***/script.sh: /bin/mvn: not found

我确实在Jenkins服务器上找到了一个路径/var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/M3,它可以工作,但我不希望在此脚本中使用到mvn的硬编码路径。

我该如何解决这个问题?

编辑:答案摘要,使用工具和Env

我的工作代码现在是:

   stage('Build') {
        def mvn_version = 'M3'
        withEnv( ["PATH+MAVEN=${tool mvn_version}/bin"] ) {
        sh '''for f in i7j-*; do
                (cd $f && mvn clean package -Dmaven.test.skip=true -Dadditionalparam=-Xdoclint:none  | tee ../jel-mvn-$f.log) &
              done
              wait'''
        }
   }

共有3个答案

洪弘壮
2023-03-14

使用这个结构怎么样:

withMaven(mavenOpts: MAVEN_OPTS, maven: 'M3', mavenLocalRepo: MAVEN_LOCAL_REPOSITORY, mavenSettingsConfig: MAVEN_SETTINGS) {
    sh "mvn ..."
}
齐承泽
2023-03-14

最简单的方法是使用工具指令:

pipeline {
  agent any
  tools {
    maven 'M3'
  }
  stages {
    stage('Build') {
      steps {
        sh 'mvn -B -DskipTests clean package'
      }
    }
  }
}

< code>M3是在全球工具配置中预配置的名称,参见文档:https://jenkins.io/doc/book/pipeline/syntax/#tools

芮琛
2023-03-14

您可以将Jenkins文件中的工具与工具with envsnippets一起使用。

应该是这样的:

def mvn_version = 'M3'
withEnv( ["PATH+MAVEN=${tool mvn_version}/bin"] ) {
  //sh "mvn clean package"
}
 类似资料:
  • 问题内容: 我刚刚安装了Jenkins 2.6(作为全新安装),但似乎找不到Maven安装选项。以前,我只能进入Jenkins配置,并且在Maven部分中可以选择并自动安装Maven。但是,这似乎对我不存在。 我已经安装了Maven集成插件。如何显示这些内容? 问题答案: 从Jenkins 2.x开始,您可以在Jenkins管理(Manage Jenkins)的“全局工具”条目下找到所有工具配置(

  • 我们试图切换到jenkins管道,但我在groovy/java的低水平阻止了我们建立一个共享库。 这里是我的共享库(位于bitbucket中git repo的{root}/src/com/pipeline.groovy中)我必须承认,我在这里做什么都不知道,因为我不知道包裹的定义 Jenkins的管道看起来 通过所有这些设置,我最终得到了错误: 我怀疑我的漂亮包裹的定义,但我坚持这样做。 非常欢迎

  • 问题内容: 我的项目有3个Maven模块,它们是由nodejs脚本构建的。 现在,我想与Jenkin和Nexus集成。我的Jenkin构建配置如下所示: 我还在“ 构建”* 部分的“ 提供配置文件 构建”步骤中添加了我的Maven ,但这没有用。Maven仍然失败,无法解析我的Nexus回购中的依赖项。 *** 在我的本地专家中,我为Nexus存储库和另一个存储库添加了一些配置。 你能把这种情况告

  • 我正在迁移jenkins工作流作业到新的基于模板的工作流作业。因为构建号被用作工作流生成的构建工件版本的一部分,所以我必须以大于旧工作流的数量开始新工作流的构建号。不幸的是,下一个构建号插件不适用于工作流管道。 有人知道这样做的好方法吗?

  • 我遇到了JENKINS-38706。由于它已经开放了一段时间,我正在努力解决这个问题。 我的问题是我正在运行一个多节点管道,其中一个节点是Windows从节点,具有255个字符路径限制。 因此,我正在尝试更改我的Windows从属阶段的工作区,而不是使用多分支管道使用的C:\jenkins\workspace\job-分支-随机字符,我正在尝试将其移动到c:\w\Jobs\分支。 它立即失效: 我

  • 在Jenkins脚本管道中,您可以像这样设置PATH env变量: 注意这里解释的路径MAVENhttps://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-withenv代码集环境变量: 要设置的环境变量列表,每个变量的形式为VARIABLE=value或VARIABLE=以取消设置其他定义的变量。您还可以使用语法PATH wh