Jenkins无法在Jenkins Home外找到maven setting.xml文件。

4
我在CentOS服务器上运行了Jenkins,并尝试设置一个作业,在git项目上运行“mvn clean install”。由于我想为整个服务器使用全局maven存储库,所以我正在设置我的项目,使用位于Jenkins主目录之外的路径中的设置文件来运行maven:

enter image description here

运行构建时,Jenkins找不到该settings.xml文件:

...
[workspace] $ /var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/Maven_3.0.4/bin/mvn -f firma-digital-service/pom.xml -s /home/dcalderon/.m2/repository/settings.xml -X clean package
Apache Maven 3.0.4 (r1232337; 2012-01-17 03:44:56-0500)
Maven home: /var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/Maven_3.0.4
Java version: 1.8.0_121, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-123.4.2.el7.x86_64", arch: "amd64", family: "unix"
[INFO] Error stacktraces are turned on.
[ERROR] Error executing Maven.
java.io.FileNotFoundException: The specified user settings file does not exist: /home/dcalderon/.m2/repository/settings.xml
at org.apache.maven.cli.MavenCli.settings(MavenCli.java:681)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:193)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Build step 'Invoke top-level Maven targets' marked build as failure
Finished: FAILURE

当通过命令行运行Jenkins运行的完全相同的命令时,一切正常,这表明文件确实存在于服务器上。我做错了什么?这是否涉及用户限制问题?


当您在控制台上运行时,是否使用相同的settings.xml文件?该文件是否可被Jenkins用户读取? - triplem
  1. 是的,我使用 -s 参数指定了哪个 settings.xml 文件。
  2. 那我不确定,如何知道 Jenkins 是以哪个用户运行的?我使用 dcalderon 调用 sudo service start jenkins 命令。
- Daniel Calderon Mori
"ps -ef" 应该会告诉你哪个用户正在运行 Jenkins 进程。考虑到你是用 sudo 运行它的,我猜应该是 root 用户。你的错误信息非常明确,所以我建议检查 .m2 文件夹的权限,或者尝试对其进行 chmod a+x 操作,看看是否有帮助。(在我的 Ubuntu Linux 用户主目录中,“700” 目录下的内容 root 用户可以查看,所以我不确定这是否是你的问题。) - Ian Miller
通常 Jenkins 不以 root 用户身份运行。猜测这就是问题所在,该用户没有访问该文件的权限。 - triplem
在Jenkins中处理这个问题的最佳方法是使用配置文件提供程序插件,在那里定义适当的settings.xml文件,并从那里使用它,不要依赖于文件系统上的文件。 - khmarbaise
4个回答

3
作为一个扩展答案,在没有特定配置更改时,我们也可以在Jenkins配置中使用默认的maven设置,如下所述:
设置文件:使用默认的maven设置 全局设置文件:使用默认的maven全局设置
请参考以下链接查看Jenkins作业配置页面中的Maven设置:Maven Settings in Jenkins Job Configuration Page

1
将设置文件和全局设置文件更改为默认设置解决了我的问题。 - Seunara

0

0

Jenkins以jenkins用户身份运行,因此无法查看位于/home/dcalderon文件夹中的文件。


0
我正在使用脚本化流水线,在我的情况下,我添加/更新了位于/var/lib/jenkins/.m2/文件夹中的settings.xml文件。

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