2012-06-21 5 views
11

У меня есть задача build.gradle, которая работает как чемпион в моем блоке dev при создании файла свойств, который записывает имя машины, на которой была сгенерирована сборка. Логика достаточно проста ...Почему InetAddress.getLocalHost(). GetHostName() возвращает значение, отличное от bash "hostname"?

def hostname = InetAddress.getLocalHost().getHostName(); 

На моем Dev поле это всегда производит такое же значение, как если бы я сделал имя хоста из Баш оболочки. .

bobk-mbp:DM_Server bobk$ hostname 
bobk-mbp.local 

На нашей Дженкинс CI сервер, однако, Баш имя хост возвращает одно, но мой призыв к InetAddress.getLocalHost() getHostName(); возвращает что-то еще. Что нужно изменить на машине дженкинсов, чтобы эти два возвращали одинаковое значение?

ответ

9

Предполагая, что вы находитесь на Linux, то команда выполняется имя хоста из o/s возвращает настроенное имя хоста ядра.

InetAddress.getHostName() выполняет обратный поиск по IP-адресу сервера, используя службу именования (DNS), настроенную в вашем O/S.

Если вам нужно имя хоста, которое понимает o/s, получение его из переменной окружения через System.getenv может быть самым простым вариантом. Это не вполне надежный способ сделать это, но этого может быть достаточно, без необходимости вникать в сетевой или системный администратор.

+1

Это в значительной степени. Еще проще, чем переменная окружения, обходит из градиента значение exec hostname («hostname» .execute(). Text). Работает на меня. Благодарю. –

+0

Мне пришлось использовать '" hostname ".execute(). Text.trim()', чтобы удалить символ новой строки. – friederbluemle

5

Из документации API для InetAddress.getHostName();

Если этот InetAddress был создан с именем хоста, это имя хоста будет запоминаться и возвращаться; в противном случае будет выполнен поиск обратного имени, и результат будет возвращен на основе настроенной системой службы поиска имен. Если требуется поиск службы имен, вызовите getCanonicalHostName.

Таким образом, вам может потребоваться настроить DNS на сервере Jenkins. Самый простой способ сделать это, чтобы редактировать/и т.д./хосты (я предполагаю, что ваш Дженкинс работает на Linux) и убедитесь, что он выглядит следующим образом:

127.0.0.1   localhost  localhost.localdomain 
<public IP address> <hostname>  <hostname>.<domain> 
+0

Хммм. Наши/etc/hosts очень похожи на [127.0.0.1 \t \t localhost.localdomain localhost], но вывод InetAddress.getHostName() - «ab». Я склоняюсь к тексту «hostname» .execute() и называет его хорошим. –

+1

Это фактически назад от желаемого порядка/etc/hosts, элемент canonical name (with domain) должен появиться перед именем хоста. http://man7.org/linux/man-pages/man5/hosts.5.html – NoUserException

Смежные вопросы