Jenkins+Nexus - 解析 POM 失败,对等方未经过身份验证



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

在解析我的 POM 时,Jenkins 无法通过 ssh 连接到 nexus(它正在寻找它正在处理的父 POM)。在这个过程的这一点上(接近开始),pom 不是由 maven 本身读取的——它被 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 以某种方式关注它,因为不使用信任存储时遇到的错误通常是不同的,但我不确定这是否真的是真的。

我已使用我的联结 URL 和凭据将项目解析器配置为存储库管理器。我还用我的凭据为nexus域设置了一个"Credentails"条目。

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

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

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

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

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

  1. 使用托管文件进行全局配置的 Jenkins 构建步骤
  2. Maven 步骤本身的高级设置中用户配置的托管文件。

这将来自POM的所有连接信息外部化,并摆脱了时序问题。

最新更新