Jenkins + Nexus - Parsing POM因Peer Not Authenticated而失败

时间:2015-01-15 15:22:33

标签: ssh jenkins nexus

不重复!我已经审查了具有类似标题的SO资源,但是这个问题似乎与Jenkins和ssh有关,而其他问题并没有涵盖这个问题。具体来说,这不是一个maven问题,这是Jenkins的问题。

解析我的POM时,Jenkins无法通过ssh连接到nexus(它正在寻找父POM到它正在处理的那个)。在此过程中(接近开始),maven本身不会读取POM - Jenkins(或其中一个插件)正在使用它来创建依赖树,以便可以在正确的情况下构建项目订购。我得到的错误是peer not authenticated

这是输出的相关位:

Parsing POMs
Failed to transfer Could not transfer metadata org.us.thing:thingy:2.0/maven-metadata.xml 
from/to nexus (https://nexus:2443/nexus/content/groups/public):
peer not authenticated

ERROR: Processing failed due to a bug in the code. Please report this to jenkinsci-users@googlegroups.com
java.lang.IllegalStateException: Failed to build parent project for org.us.thing:thingy:pom:2.0
    at org.apache.maven.project.MavenProject.getParent(MavenProject.java:381)
    at hudson.maven.MavenModuleSetBuild$PomParser.invoke(MavenModuleSetBuild.java:1325)

我已经使用javax.net.ssl.trustStore配置了一个信任存储,当maven运行构建时,通过Jenkins可以正常工作。我也认为Jenkins正在以某种方式关注它,因为不使用信任存储时出现的错误通常是不同的,但我不确定这是否真的如此。

我已将神器解析器配置为具有我的nexus网址和凭据的repo管理器。我还使用我的凭据为nexus域设置了“Credentails”条目。

那么,如何进行?我解决方案会很好,但我会满足于更多的面包屑。

2 个答案:

答案 0 :(得分:1)

由于Jenkins在解析POM之前无法连接到Nexus,这意味着POM中设置的信息无法提供足够的连接信息。凭证条目是一个很好的第一步。

Jenkins提供了一个提前设置此信息的选项。 config file provider插件允许您设置"外部"文件。这使您可以设置全局和用户Maven settings.xml。然后,在构建配置中,您可以添加构建步骤以使用该托管文件。我发现设置两件事很有帮助:

  1. Jenkins构建步骤以使用托管文件进行全局配置
  2. Maven步骤本身的高级设置中用户配置的托管文件。
  3. 这将外部化来自POM的所有连接信息,并消除了时序顺序问题。

答案 1 :(得分:1)

问题也可能是Maven Project Plugin中的错误。此插件尝试在运行maven作业之前解析构建步骤中的pom.xml。但是,该插件可能无法正确使用您配置的settings.xml或您的maven目标和选项(在我的情况下,它忽略了-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true)。

解决方法是在Jenkins中为您的项目配置预构建步骤,例如Pre-Step-> Invoke top level Maven target-> Goal:clean -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true。这个预构建步骤将下载必要的依赖项,以便maven项目插件可以在构建步骤中找到它们并且可以成功解析pom。