2012-06-21 16 views
11

मेरे पास एक build.gradle कार्य है जो मेरे देव बॉक्स पर एक चैंप की तरह काम करता है जो एक प्रॉपर्टी फ़ाइल तैयार करता है जो उस मशीन के नाम को रिकॉर्ड करता है जिस पर निर्माण उत्पन्न हुआ था। तर्क के रूप में अगर मैं bash खोल से होस्ट नाम किया था यह हमेशा एक ही मूल्य का उत्पादन काफी सरल है ...InetAddress.getLocalHost()। GetHostName() bash "hostname" से अलग मान क्यों देता है?

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

मेरी देव बॉक्स पर। ।

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

हमारे जेनकींस सीआई सर्वर पर, तथापि, बैश होस्ट नाम एक बात दिखाए, लेकिन InetAddress.getLocalHost() करने के लिए अपने कॉल getHostName(); कुछ और देता है। इन दोनों को एक ही मूल्य लौटने के लिए जेनकींस मशीन पर क्या बदलाव करने की आवश्यकता है?

उत्तर

9

मान लिया जाये कि आप लिनक्स पर कर रहे हैं, होस्टनाम कमांड निष्पादित ओ/एस से कर्नेल के कॉन्फ़िगर किए गए होस्टनाम को लौटाता है।

InetAddress.getHostName() आपके ओ/एस में कॉन्फ़िगर नामकरण सेवा (DNS) का उपयोग कर सर्वर के आईपी पते पर एक रिवर्स लुकअप कर रहा है।

यदि आपको ओएस द्वारा समझा गया होस्टनाम की आवश्यकता है, तो इसे System.getenv के माध्यम से पर्यावरण चर से प्राप्त करना सबसे आसान विकल्प हो सकता है। यह ऐसा करने का एक पूरी तरह से मजबूत तरीका नहीं है लेकिन यह नेटवर्क या सिस्टम व्यवस्थापक में जाने की आवश्यकता के बिना पर्याप्त हो सकता है।

+1

यह बहुत अधिक है। पर्यावरण परिवर्तनीय से भी सरल, मेजबाननाम ("होस्टनाम" .execute() टेक्स्ट को निष्पादित करने के लिए ग्रेडल से बाहर खोल रहा है। मेरे लिये कार्य करता है। धन्यवाद। –

+0

मुझे पिछला न्यूलाइन कैरेक्टर हटाने के लिए 'होस्टनाम ".execute()। Text.trim()' का उपयोग करना पड़ा। – friederbluemle

5

InetAddress.getHostName() के लिए एपीआई दस्तावेज़ से;

यदि यह इंट एड्रेस होस्ट नाम के साथ बनाया गया था, तो इस होस्ट का नाम याद और वापस कर दिया जाएगा; अन्यथा, एक रिवर्स नाम लुकअप किया जाएगा और परिणाम सिस्टम कॉन्फ़िगर किए गए नाम लुकअप सेवा के आधार पर वापस कर दिया जाएगा। यदि नाम सेवा की लुकअप की आवश्यकता है, तो GetCanonicalHostName पर कॉल करें।

तो आपको जेनकिंस सर्वर पर DNS को कॉन्फ़िगर करने की आवश्यकता हो सकती है। यह करने के लिए सबसे आसान तरीका है संपादित करने के लिए/etc/hosts (मैं अपने जेनकींस लिनक्स पर चलता है यह सोचते हैं रहा हूँ) और यकीन है कि यह इस तरह दिखता है बनाने के है:

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" है। मैं "होस्टनाम" की तरफ झुका रहा हूं .execute() टेक्स्ट और इसे अच्छा कह रहा हूं। –

+1

यह वास्तव में/etc/hosts के वांछित क्रम से पिछड़ा है, कैनोनिकल नाम (डोमेन के साथ) तत्व होस्टनाम से पहले आना चाहिए। http://man7.org/linux/man-pages/man5/hosts.5.html – NoUserException

संबंधित मुद्दे