【问题标题】:Jenkins can't find maven setting.xml file outside Jenkins HomeJenkins 在 Jenkins Home 之外找不到 maven setting.xml 文件
【发布时间】:2017-06-13 17:54:30
【问题描述】:

我让 Jenkins 在 CentOS 服务器上运行,我正在尝试设置一个在 git 项目上运行 mvn clean install 的作业。由于我想为我的整个服务器使用全局 maven 存储库,因此我正在设置我的项目以使用 Jenkins 主页之外的路径中的设置文件运行 maven:

运行构建时,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 可读的文件是否正在运行?
  • 第一个问题:是的,我使用 -s 参数指定了哪个 settings.xml 文件。第二个问题:这是我不确定的,我怎么知道 Jenkins 正在运行哪个用户?我用 dcalderon 调用 sudo service start jenkins。
  • "ps -ef" 应该告诉你哪个用户正在运行 jenkins 进程。鉴于您使用 sudo 运行它,我猜它会是 root。您的错误消息非常明确,因此我将检查 .m2 文件夹的权限,并可能尝试对其进行 chmod a+x 以查看是否有帮助。 (不过,root 可以在 Ubuntu 上的我的 linux 用户家中查看 '700' 目录,所以我不确定这是你的问题。)
  • 通常 jenkins 不会以 root 身份运行。猜猜这就是问题所在,用户拥有对文件的 noch 访问权限。
  • 在 Jenkins 中处理此问题的最佳方法是使用配置文件提供程序插件并在那里定义适当的 settings.xml 文件并从那里使用它,不要依赖文件中的文件系统

标签: maven jenkins


【解决方案1】:

作为扩展答案,当配置没有具体更改时,我们也可以说在 Jenkins 配置中使用 maven 的默认设置,如下所述:

设置文件:使用默认的 Maven 设置 全局设置文件:使用默认的 Maven 全局设置

【讨论】:

  • 将设置文件和全局设置文件更改为默认设置解决了我的问题。
【解决方案2】:

您可以使用这个插件 - https://wiki.jenkins-ci.org/display/JENKINS/Config+File+Provider+Plugin 来管理 settings.xml。

只需使用此插件为您的项目提供相关文件即可。

谢谢,莫尔

【讨论】:

    【解决方案3】:

    Jenkins 以 jenkins 用户身份运行,因此它看不到位于 /home/dcalderon 文件夹中的文件

    【讨论】:

      猜你喜欢
      • 2018-01-28
      • 1970-01-01
      • 2019-06-24
      • 2015-12-12
      • 2016-12-16
      • 1970-01-01
      • 2018-02-22
      • 1970-01-01
      • 2014-03-11
      相关资源
      最近更新 更多