2012-06-21 9 views
11

私はビルドが生成されたマシンの名前を記録するプロパティファイルを生成する際に、私のdevボックス上のchampのように動作するbuild.gradleタスクを持っています。ロジックは、私はbashシェルからホスト名をしたかのように、これは常に同じ値を生成します...私のdevのボックスでInetAddress.getLocalHost()。getHostName()はbash "hostname"とは異なる値を返しますか?

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

十分に単純です。私たちのジェンキンスのCIサーバで

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

、しかし、bashのホスト名)は、一つのことを返しますが、のInetAddress.getLocalHost(と私のコールのgethostname();何か他のものを返します。これらの2つが同じ値を返すためには、何がJenkinsマシン上で変更する必要がありますか?

答えて

9

、hostnameコマンドを実行しますo/sからカーネルの設定されたホスト名を返します。

InetAddress.getHostName()は、O/Sで設定されているネーミングサービス(DNS)を使用してサーバのIPアドレスを逆引きしています。

o/sが理解しているようにホスト名が必要な場合は、System.getenv経由で環境変数から取得するのが最も簡単な方法です。これを行うには完全に堅牢な方法ではありませんが、ネットワークまたはシステム管理者を掘り下げる必要はありません。

+1

これはかなりです。環境変数よりも単純であっても、gradleからexecホスト名( "hostname" .execute()。text)へと砲撃されます。私のために働く。ありがとう。 –

+0

'' hostname ".execute()。text.trim()'を使用して末尾の改行文字を削除する必要がありました。 – friederbluemle

5

InetAddress.getHostName()のAPIドキュメントから。

このInetAddressがホスト名で作成された場合、このホスト名は記憶され、返されます。それ以外の場合は、逆名検索が実行され、システム構成の名前検索サービスに基づいて結果が返されます。ネームサービスのルックアップが必要な場合は、getCanonicalHostNameを呼び出します。

したがって、JenkinsサーバーでDNSを設定する必要があります。これを行う最も簡単な方法は、/ etc/hostsファイルを(私はあなたのジェンキンスさんは、Linux上で動作すると仮定している)、それはこのようになりますことを確認し編集することです:あなたは、Linuxにしていると仮定すると、

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

Hmmm。我々の/ etc/hostsは[127.0.0.1 \t \t localhost.localdomain localhost]のように見えますが、InetAddress.getHostName()の出力は "ab"です。私は "hostname" .execute()。textに傾き、それを良いものと呼んでいます。 –

+1

これは実際には/ etc/hostsの所望の順序から逆順になっていますが、(ドメインを持つ)正規名はhostnameの前に来なければなりません。 http://man7.org/linux/man-pages/man5/hosts.5.html – NoUserException

関連する問題