我正在嘗試在詹金斯中發布一個項目並獲得主機未找到異常。
Caused by: java.lang.RuntimeException: java.net.UnknownHostException: XXXXXXXXXXXXXXX: nodename nor servname provided, or not known
at org.apache.maven.scm.provider.perforce.PerforceScmProvider.generateDefaultClientspecName(PerforceScmProvider.java:420)
at org.apache.maven.scm.provider.perforce.PerforceScmProvider.getClientspecName(PerforceScmProvider.java:395)
at org.apache.maven.scm.provider.perforce.command.checkout.PerforceCheckOutCommand.executeCheckOutCommand(PerforceCheckOutCommand.java:75)
at org.apache.maven.scm.command.checkout.AbstractCheckOutCommand.executeCommand(AbstractCheckOutCommand.java:82)
at org.apache.maven.scm.command.AbstractCommand.execute(AbstractCommand.java:59)
通讀原始碼,看起來異常是在這一行引發的:
InetAddress.getLocalHost().getHostName();
由於除了更改程式碼之外我不控制發布插件的源代碼,有什麼方法可以解決這個問題?我可以以某種方式設定我的等主機以強制來自“InetAddress.getLocalHost().getHostName()”的特定回應嗎?
答案1
我假設您的 XXXXXXXXXXXXXXX 正在掩蓋實際的非本地主機(或本地主機變體/別名)主機名稱。
如果您的電腦的主機名稱/IP 位址無法根據本機名稱解析器設定進行正向和反向查找,則可能會發生這種情況。 InetAddress.getLocalHost()
已知執行反向查找來解析本機。
執行該hostname
命令,並確保您的真實 IP 位址與 中的該名稱相符/etc/hosts
。可能會hostname
傳回 FQDN 主機名稱或別名/短主機名,且無法正向/反向尋找這些內容。
另一個問題可能是 IPv6 與 IPv4 的比較。
請注意,Jenkins JVM 將快取主機名稱查找,因此有一個小的測試程式來對 進行測試呼叫是值得的InetAddress.getLocalHost()
,否則您應該在每次測試配置變更後重新啟動 Jenkins。
請提供反饋/其他詳細信息,以便我改進這個答案。