2015-01-15 19 views
3

不重複!我已經用相似的標題回顧了SO資源,但是這個問題似乎與Jenkins和ssh有關,其他問題沒有涉及這個問題。具體來說,這不是一個maven問題,而是一個Jenkins問題。Jenkins + Nexus - 解析POM失敗,未驗證對等方

解析我的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 [email protected] 
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運行一個版本。我也認爲詹金斯以某種方式關注它,因爲在不使用信任存儲時出現的錯誤通常是不同的,但我不確定這是否真的如此。

我已經配置了一個工件解析器作爲一個repo管理器和我的聯繫網址和憑證。我也爲我的憑證設立了一個'Credentails'的聯繫網域。

那麼,如何繼續?我的解決方案會很好,但我會解決更多的麪包屑。

回答

1

由於Jenkins在解析POM之前未能連接到Nexus,這意味着POM中設置的信息不能提供足夠的信息來連接。憑據條目是一個很好的第一步。

Jenkins提供了一個選項來設置此信息。 config file provider插件允許你設置一個「外部」文件。這可讓您設置全局用戶和用戶Maven settings.xml。然後在您的構建配置中,您可以添加構建步驟以使用該託管文件。我發現它有助於建立兩件事情:

  1. 一個詹金斯生成步驟使用管理文件的全局配置
  2. 一個管理文件在Maven步驟本身的高級設置用戶配置。

這將來自POM的所有連接信息進行了外部化並排除了時序問題。

1

該問題也可能是Maven Project Plugin中的一個錯誤。此插件嘗試在您的Maven作業運行之前在構建步驟中解析pom.xml。然而,插件可能不會正確使用您配置的settings.xml或您的maven目標和選項(在我的情況下,它忽略了-Dmaven.wagon.http.ssl.insecure=true-Dmaven.wagon.http.ssl.allowall=true)。

解決方法是在Jenkins中爲您的項目配置預構建步驟,例如前臺 - >調用頂層Maven目標 - >目標:clean -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true。這個預編譯步驟將下載必要的依賴關係,以便maven項目插件可以在構建步驟中找到它們,並且可以成功解析pom。

+0

謝謝你的提示,我跑完全相同的問題,你的解決方法節省了我的一天。 – 2016-04-06 15:04:39