2013-06-04 19 views
5

से निष्पादित करते समय उपयोगिता काम नहीं कर रही है हमारे पास एक यूनिक्स स्क्रिप्ट है जो इंटरैक्टिव निष्पादन के लिए उपयोगिता की अपेक्षा करता है। जब हम यूनिक्स सर्वर से चलते हैं तो यह स्क्रिप्ट अच्छी तरह से काम करती है।जेनकिंस

यदि हम इस स्क्रिप्ट को जेनकींस से चलाते हैं, तो यह काम नहीं कर रहा है।

नीचे स्क्रिप्ट

var="xxxxx" 
expect -c " 
    spawn sudo cp /abcd/sjws/config/obj.conf /abcd/sjws/config/obj.conf_jenkins 
    expect { 
    "Password:" { send $var\r;interact } 
    } 
    exit 
    " 

है जब हम जेनकींस

spawn sudo cp /abcd/sjws/config/obj.conf /abcd/sjws/config/obj.conf_jenkins 
Password: 
Password: 
Build step 'Execute shell' marked build as failure 
Finished: FAILURE 
+0

मुझे आश्चर्य है कि क्या समस्या है कि शैल अपेक्षित स्क्रिप्ट में $ var वैरिएबल का विस्तार कर रहा है: 'var var \ r'' भेजने के लिए $ var \ r' को बदलना \ var \ r \ "' –

उत्तर

0

से चलाने के नीचे उत्पादन होता है ऐसा लगता है कि जेनकींस इंटरैक्टिव आदेश मॉडल का समर्थन नहीं करता।

गैर-इंटरैक्टिव तरीके से पासवर्ड पास करने के लिए sshpass उपकरण का उपयोग करने का प्रयास करें।

install sshpass

$ sshpass -p "password" {your command} 
1

वर का उपयोग करें = 'xxxxx' var = "xxxxx" के बजाय। उममीद है कि इससे मदद मिलेगी।

7

चूंकि जेनकिंस इसे वास्तविक टर्मिनल से नहीं चलाते हैं, interact काम नहीं करता है, क्योंकि वहां वास्तव में कोई उपयोगकर्ता इंटरैक्शन नहीं हो सकता है।

आप

expect eof 
wait 
+0

धन्यवाद! मुझे बहुत समय बचाया। –

+0

यह तब काम करता था जब जेनकिन्स सेंटोस में चल रहा है लेकिन उबंटू पर नहीं चल रहा है। जब उबंटू पर होता है तो बिल्ड बस लटकता है। क्या आपको इसमें कोई अंतर्दृष्टि है? कृपया मुझे बताएं .. धन्यवाद –

+0

शायद किसी कारण से उबंटू में पैदा हुई प्रक्रिया बाहर नहीं निकलती है? हो सकता है कि पिछली मिशेल अपेक्षाओं के कारण, यह अभी भी इनपुट की प्रतीक्षा कर रहा है? –

0

यह सवाल बहुत के समान है के साथ interact की जगह ले सकता: Jenkins not waiting on call to a bash script with expect; उन समस्याओं के लिए, विशेष रूप से "su" उपयोगकर्ता को बदलने के लिए उपयोगिता का उपयोग करते समय, कृपया ध्यान रखें कि जैसे ही उपयोगकर्ता बदलता है, जेनकींस एसएसएच कनेक्शन बंद कर देता है। आप नए उपयोगकर्ता के साथ आदेश देना जारी नहीं रख सकते हैं। इस तरह के रूप में इस तरह के एक तरीका है कि आप कमांड भेज रहे हैं सीधे में अपनी स्क्रिप्ट डिजाइन,:

spawn su - username -c "yoursinglewordcommand" 

और फिर हमेशा की तरह उम्मीद लिपि (मैं भी सहभागिता कमांड के साथ सफल रहा था) के बाकी।