2012-10-30 18 views
8

में विफल रहा है मुझे एक जेनकींस बिल्ड मिला है जो एक पोस्ट-बिल्ड एक्शन के रूप में कैपिस्ट्रानो तैनाती चलाता है।जेनकींस के माध्यम से कैपिस्ट्रानो के माध्यम से तैनाती - एसएसएच प्रमाणीकरण

कंसिस्ट्रानो कार्य को कंसोल से जेनकिंस उपयोगकर्ता के रूप में चलाना बिल्कुल ठीक काम करता है और पासवर्ड प्रॉम्प्ट के बिना (मैंने पहले निर्माण और स्टेजिंग सर्वर दोनों पर एसएसएच कुंजी सेट की हैं)। हालांकि, जेनकींस के माध्यम से एक ही स्क्रिप्ट चलाते समय, मुझे अचानक एक पासवर्ड प्रॉम्प्ट मिलता है और निर्माण बाद में विफल रहता है (कोई टीटीई मौजूद नहीं है)।

[workspace] $ /bin/sh -xe /tmp/hudson7321493219694918714.sh 
Performing Post build task... 
Match found for : : True 
Logical operation result is TRUE 
Running script : cap _2.13.4_ deploy 
[workspace] $ /bin/sh -xe /tmp/hudson1545664641721322948.sh 
+ cap _2.13.4_ deploy 
    * executing `deploy' 
    * executing `deploy:update' 
** transaction: start 
    * executing `deploy:update_code' 
    triggering before callbacks for `deploy:update_code' 
[32m--> Updating code base with checkout strategy[0m 
    executing locally: "git ls-remote [email protected]:my_project.git master" 
    command finished in 1200ms 
    * executing "git clone -q [email protected]:my_project.git /var/www/staging/my_project/releases/20121029223619 && cd /var/www/staging/my_project/releases/20121029223619 && git checkout -q -b deploy 1fb11d669a6cb5a714d077162305dfcfaba82f01 && (echo 1fb11d669a6cb5a714d077162305dfcfaba82f01 > /var/www/staging/my_project/releases/20121029223619/REVISION)" 
servers: ["my.staging-server.com"] 
Password: stty: standard input: Inappropriate ioctl for device 
stty: standard input: Inappropriate ioctl for device 
stty: standard input: Inappropriate ioctl for device 

*** [deploy:update_code] rolling back 
    * executing "rm -rf /var/www/staging/my_project/releases/20121029223619; true" 
    servers: ["my.staging-server.com"] 
** [deploy:update_code] exception while rolling back: Capistrano::ConnectionError, connection failed for: my.staging-server.com (Net::SSH::AuthenticationFailed: not-specified) 
connection failed for: my.staging-server.com (Net::SSH::AuthenticationFailed: not-specified) 
POST BUILD TASK : FAILURE 

यह जब शायद जेनकींस के माध्यम से चल मेरी SSH कुंजी को लेने नहीं करता है रूबी की तरह दिखता है (Net::SSH::AuthenticationFailed: not-specified)?

क्या किसी को पता है कि यहां क्या गलत हो रहा है?

+0

जेनकिन्स प्रोजेक्ट के वर्कस्पेस में /tmp/hudson*.sh में जेनरेट करता है, जो सटीक उसी शेल स्क्रिप्ट को चलाता है क्योंकि उपयोगकर्ता जेनकींस पूरी तरह से ठीक काम करता है। यह भी अजीब बात यह है कि सर्वर के लिए एसएसएचइंग ठीक काम करता है, लेकिन फिर गिट (क्लिट लक्ष्य के रूप में उसी रिमोट मशीन पर गिट सर्वर) से क्लोनिंग विफल रहता है (केवल जेनकिन्स बिल्ड में चलाने पर)। मैं उलझन में हूं। – Burgi

+0

मुझे लगता है कि जेनकिन्स "रूट" के रूप में चलता है, इसलिए "टोपी" कमांड को पर्यावरण जानकारी प्रिंट करने के लिए अपनी स्क्रिप्ट में "env | sort" डालें, ताकि आप देख सकें कि उपयोगकर्ता कौन है। मैं अब एक ही मुद्दे पर काम कर रहा हूं। अगर मैं कुछ लेकर आया तो मैं आपको बता दूंगा। – Harmon

+1

कौन सा उपयोगकर्ता आपकी Capistrano स्क्रिप्ट कनेक्ट कर रहा है? यदि आप निर्दिष्ट नहीं करते कि आप किसके साथ कनेक्ट करते हैं तो यह एक अलग उपयोगकर्ता के रूप में "गिट क्लोन" चला रहा है। यह उस उपयोगकर्ता के लिए डिफ़ॉल्ट होगा जो तैनाती होस्ट से कैप स्क्रिप्ट चलाता है। उदाहरण के लिए, यह हमारा सेटअप है: 'सर्वर "# {deploy_user} @ # {hostname}",: ऐप,: डीबी,: प्राथमिक => सत्य' और' सेट: deploy_user, ENV ['USER'] '। – Harmon

उत्तर

5

हम यह करने के लिए कुछ इसी तरह में भाग गयी। यह संभव है कि जेनकींस के लिए लॉगिन शेल में पहले से ही एक एसएसएच एजेंट स्वचालित रूप से चल रहा हो, लेकिन संदर्भ जो जेनकींस आपके तैनाती के लिए उत्पन्न होता है, वह नहीं है।

अपने जेनकींस स्क्रिप्ट के भीतर मैन्युअल रूप से इसे प्रारंभ करने का प्रयास करें:

# Start the ssh agent. Evaling the output will set the relevant environment 
# variables 
eval `ssh-agent` 

# Add the default keys like id_rsa and id_dsa (or explicitly specify your key, 
# if it's not a default) 
ssh-add 

# Your normal deploy script here 

# Save the return value of your script 
RETVAL=$? 

# Clean up 
kill $SSH_AGENT_PID 

# Exit the script with the true return value instead of the return value of kill 
# which could be successful even when the capistrano portion of the build has 
# crashed 
exit $RETVAL 

आशा यह आपके लिए काम करता है! शैल परेशान हैं।

+0

यह तय है। धन्यवाद! –

0

दुर्भाग्य से मैं यह केवल स्थानीय रूप से सहेजा एक दूसरे के साथ cap deploy निष्पादित करने से पहले मूल deploy.rb की जगह द्वारा हल जहाँ मैं set :password, "sshpassword"

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