如何为Jenkins中的每个Slave节点配置Maven安装?

24

症状

如果我在Jenkins中创建一个Maven作业(新项目 => Maven项目,使用maven插件)并使用所有默认值运行它,我会收到以下错误:

Started by user anonymous
Building on master in workspace /var/lib/jenkins/jobs/job_name/workspace
ERROR: A Maven installation needs to be available for this project to be built.Either your server has no Maven installations defined, or the requested Maven version does not exist.
Finished: FAILURE

使用mvn命令可以在命令行中完美运行Maven。

不可接受的解决方法

有一个系统级别的Jenkins配置用于安装Maven:管理Jenkins => 配置系统 => Maven / Maven安装。如果我使用此Web UI添加Maven安装(通过在MAVEN_HOME中提供预安装路径/usr/share/maven),作业将会成功运行。

问题:为什么是全局Jenkins配置而不是特定于Slave的配置?

全局Jenkins配置没有意义:Maven是按Slave而非按Jenkins运行的。

Jenkins运行作业的Slave群组可能包含具有不同平台、操作系统和环境的Slave,这些不同版本的Maven安装在不同位置。

问题:如何针对每个Slave节点配置Maven安装?

在Slave节点上为整个系统设置类似于MAVEN_HOMEM2_HOME的环境变量到相同路径并不能起作用。

版本

Jenkins Master和Slave均为Linux主机。Jenkins版本:1.598

4个回答

22
假设您的从节点上已安装 Java 和 Maven :
  1. 转到“管理 Jenkins”->“管理节点”
  2. 单击要配置的节点上的“配置”图标
  3. 向下滚动到“节点属性”,并选中“工具位置”复选框
  4. 填写 Java 和 Maven 的选项。
现在应该可以正常工作(即使您已在主节点上配置了 Maven 安装)。

10
找不到节点属性。 - Yashdeep Hinge
不适用于内置节点。在那里,您需要按照另一个答案中所述前往“管理Jenkins”->“全局工具配置”。 - Echsecutor

10
对我来说,解决方案是前往“管理Jenkins”- >“全局工具配置”,并在那里设置maven。 您可以通过/configureTools访问此功能(例如:http://your-ip:8080/jenkins/configureTools )。
示例: Maven安装
  • 名称:my_maven_3.3.9
  • MAVEN_HOME:/usr/share/maven
其他常用工具的附加配置位于/configureTools:
Git安装
  • 名称:my_git_2.11.0
  • Git可执行文件路径:/usr/bin/git
JDK安装
  • 名称:my_jdk_1.8.0_161
  • JAVA_HOME:/opt/jdk/jdk1.8.0_161

1
如果您没有将Maven添加到主配置中,而是在每个从机上安装它,并且可能具有不同的环境变量(例如版本3.2.5),则应该注意。
M2_HOME=C:\apache-maven-3.2.5
M2=C:\apache-maven-3.2.5\bin
Path+=;C:\apache-maven-3.2.5\bin

那么每个 Jenkins 从节点都将使用具有本地设置的 Maven。


如果我在主机上不添加Maven,我是否仍然可以在Jenkins中创建Maven作业(新项目=> Maven项目)?这是一种特殊类型的作业,具有支持Maven参数的UI。 - uvsmtid
你需要创建一个自由风格的任务并调用Maven目标。 - giuspen
1
不幸的是,“Maven项目”类型的Jenkins作业是这个问题的原因。我已经使用了“自由风格”作业,并决定为那些需要它们的人提供熟悉的UI功能(包括Jenkins UI支持Maven Release插件)。我会投票支持需要解决方法的人,但不会接受。每个Jenkins Slave的Shell环境都可以装满运行任何脚本所需的所有先决条件。问题是,如果我们仍然需要在外部配置Maven,为什么Jenkins具有反直觉的Maven_per_Master_配置,而不是_per(可能不同的)Slave_配置。 - uvsmtid

-5
为了简单起见,只需使用我的公共Docker镜像。
docker push chiraggupta95/jenkinswithmvn:v1

如果你想自定义自己的图像,只需查看我的git仓库以获取完整的说明。
 https://github.com/chiraggupta95apr/jenkins

编程愉快 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接