15

ビルドが生成されたマシンの名前を記録するプロパティ ファイルを生成する際に、私の開発ボックスでチャンピオンのように機能する build.gradle タスクがあります。ロジックは非常に単純です...

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

私の開発ボックスでは、これは、bash シェルからホスト名を実行した場合と常に同じ値を生成します。

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

ただし、jenkins CI サーバーでは、bash ホスト名は 1 つのものを返しますが、InetAddress.getLocalHost().getHostName(); への呼び出しは 1 つです。何か他のものを返します。これら2つが同じ値を返すようにするには、jenkinsマシンで何を変更する必要がありますか?

4

2 に答える 2

14

Linuxを使用しているとすると、o / sから実行されたhostnameコマンドは、カーネルの構成済みホスト名を返します。

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

o / sが理解できるホスト名が必要な場合は、System.getenvを介して環境変数からホスト名を取得するのが最も簡単なオプションです。これを行うための完全に堅牢な方法ではありませんが、ネットワークやシステム管理者を詳しく調べる必要がなくても十分な場合があります。

于 2012-06-21T19:02:17.197 に答える
8

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

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

そのため、Jenkins サーバーで DNS を構成する必要がある場合があります。これを行う最も簡単な方法は、/etc/hosts を編集して (Jenkins が Linux で実行されていることを前提としています)、次のようになっていることを確認することです。

127.0.0.1           localhost       localhost.localdomain
<public IP address> <hostname>      <hostname>.<domain>
于 2012-06-21T18:56:00.310 に答える