Я пытаюсь выпустить проект в Jenkins и получаю исключение «хост не найден».
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();
Поскольку я не контролирую исходный код для плагина релиза, кроме изменения кода, есть ли способ обойти эту проблему? Могу ли я настроить свои хосты etc каким-либо образом, чтобы принудительно получить определенный ответ от "InetAddress.getLocalHost().getHostName()"?
решение1
Я предполагаю, что ваш XXXXXXXXXXXXXXX скрывает фактическое, нелокальное имя хоста (или вариант/псевдоним локального хоста).
Это может произойти, если имя хоста/IP-адрес вашего компьютера не может быть просмотрен как в прямом, так и в обратном направлении в соответствии с настройками локального преобразователя имен. InetAddress.getLocalHost()
Известно, что он выполняет обратный поиск для разрешения локального хоста.
Запустите hostname
команду и убедитесь, что у вас есть запись, сопоставляющая ваш реальный IP-адрес с этим именем в /etc/hosts
. Возможно, hostname
возвращается либо полное доменное имя хоста, либо псевдоним/короткое имя хоста, и их нельзя просматривать напрямую/обратно.
Еще одной проблемой может быть IPv6 по сравнению с IPv4.
Обратите внимание, что JVM Jenkins кэширует поиск имен хостов, поэтому имеет смысл иметь небольшую тестовую программу для выполнения тестового вызова InetAddress.getLocalHost()
, в противном случае вам придется перезапускать Jenkins после каждого тестируемого изменения конфигурации.
Пожалуйста, предоставьте отзыв/дополнительную информацию, чтобы я мог улучшить этот ответ.