如何在 Jenkins 中为每个从属节点配置 Maven 安装?

How to configure Maven installation in Jenkins per individual Slave node?

症状

如果我使用所有默认值和运行 它,我得到这个错误:

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

Maven 运行 仅需 mvn.

即可从命令行完美运行

不可接受的解决方法

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

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

全局 Jenkins 配置没有意义:Maven 运行 每个从属,而不是每个 Jenkins。

Jenkins 运行作业中的 Slaves zoo 可能包含具有各种平台、操作系统和环境的 Slaves,其中不同版本的 Maven 安装在不同的位置。

问题:如何为每个从属节点配置 Maven 安装?

MAVEN_HOME and M2_HOME 等环境变量设置为从属节点上整个系统的相同路径无效。

版本

Jenkins Master 和 Slave 都是 Linux 主机。詹金斯版本:1.598

如果您不将 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 slave 将只使用具有本地设置的 Maven。

假设您已经 Java 并且在您的从站上安装了 Maven:

  1. 转到管理 Jenkins -> 管理节点
  2. 单击要配置的节点上的配置图标
  3. 向下滚动到 'Node Properties' 并勾选 'Tool Locations' 复选框
  4. 填写 Java 和 Maven 的选项。

它现在应该可以工作了(即使您已经在 master 上配置了 Maven 安装)。

对我来说,解决方案是转到管理 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

为简单起见,使用我的 public docker 图片

docker push chiraggupta95/jenkinswithmvn:v1

如果您想自定义自己的图像,请查看我的 git 存储库以获取完整说明。

 https://github.com/chiraggupta95apr/jenkins

快乐编码:)