5

codedeploy मैं वर्तमान में Github और एडब्ल्यूएस Codedeploy के माध्यम से एक EC2 उदाहरण के लिए एक NodeJS आवेदन की तैनाती को स्वचालित करने की कोशिश कर रहा हूँ। मैंने here से जितनी जल्दी हो सके निर्देशों का पालन किया है, लेकिन मैंने अपने आफ्टरस्टॉल हुक इवेंट के साथ एक झटका लगाया है।NPM इस मुद्दे को एक NodeJS उदाहरण एडब्ल्यूएस का उपयोग कर की तैनाती

version: 0.0 
os: linux 
files: 
    - source: /backend 
    destination: /home/ec2-user/signal 
permissions: 
    - object:/
    pattern: "**" 
    owner: ec2-user 
    group: ec2-user 
hooks: 
    ApplicationStop: 
    - location: backend/app/deploy/stop.sh 
     timeout: 10 
     runas: ec2-user 
    BeforeInstall: 
    - location: backend/app/deploy/beforeinstall.sh 
     timeout: 1200 
     runas: ec2-user 
    AfterInstall: 
    - location: backend/app/deploy/afterinstall.sh 
     timeout: 1200 
     runas: ec2-user 
    ApplicationStart: 
    - location: backend/app/deploy/start.sh 
     timeout: 60 
     runas: ec2-user 
ValidateService: 
    - location: backend/app/deploy/validate.sh 
     timeout: 60 
     runas: ec2-user 

मैं बहुत तरह एडब्ल्यूएस CLI के माध्यम से तैनाती आह्वान:

यहाँ मेरी YML फ़ाइल है

aws deploy create-deployment --application-name Signal --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name Production --description "Deployment" --github-location repository=githubusername/repository,commitId=ABCD123 --ignore-application-stop-failures 

सब कुछ ठीक काम करता है, जब तक मैं AfterInstall चरण और मेरे 'afterinstall तक पहुँचते हैं। sh 'निष्पादित किया गया है। उस फ़ाइल इस तरह दिखता है:

#!/bin/bash 
cd /home/ec2-user/signal/app/ 
npm install 

और निम्न त्रुटि लॉग पैदा करता है, एक असफल तैनाती के कारण:

त्रुटि कोड: ScriptFailed

संदेश: निर्दिष्ट स्थान पर स्क्रिप्ट: बैकएंड उपयोगकर्ता EC2 उपयोगकर्ता के रूप में चलाने /app/deploy/afterinstall.sh बाहर निकलने के कोड के साथ विफल 127

LifecycleEvent - AfterInstall 
Script - backend/app/deploy/afterinstall.sh 
[stderr]/opt/codedeploy-agent/deployment-root/be9902d2-8af0-46fd-b186-23ead6bea5a4/d-SBW6YCLKC/deployment-archive/backend/app/deploy/afterinstall.sh: line 7: npm: command not found 

हालांकि, अगर मैं अपने EC2 उदाहरण में SSH, या तो अस्थायी निर्देशिका पर जाएँ:

/opt/codedeploy-agent/deployment-root/be9902d2-8af0-46fd-b186-23ead6bea5a4/d-SBW6YCLKC/deployment-archive/backend/app/deploy/ 

या

cd /home/ec2-user/signal/app/ 

और या तो स्वयं को चलाने के 'NPM स्थापित', या के माध्यम से मेरी स्क्रिप्ट चलाते हैं। /afterinstall.sh, फिर npm ठीक चलाता है।

कोडियोजित एजेंट के लिए चीजें अलग क्यों हैं? मैं 'रनस: ec2-user' का उपयोग कर रहा हूं, इसलिए मुझे लगता है कि इत्यादि इत्यादि हैं जैसे कि मैं ec2-user के रूप में बॉक्स में sshed किया गया है।

मैं क्या बेवकूफ बात गलत कर रहा हूं? कई, बहुत धन्यवाद।

+0

यह केवल हाइलाइट करने योग्य है क्योंकि त्रुटि संदेश लंबा है। अंतिम त्रुटि है: npm: कमांड नहीं मिला –

+0

मुझे लगता है कि यह 'ec2-user' के रूप में चल रहा है लेकिन आपकी लॉगिन स्क्रिप्ट जैसे '.bash_profile' और' .bashrc 'नहीं चला रहा है, इसलिए इसमें npm नहीं है पथ पर। –

+0

अपने afterinstall.sh – Chris

उत्तर

12

के रूप में सही रूप में mbaird और क्रिस द्वारा टिप्पणी में उल्लेख किया है - यह मैं अपने पथ निर्धारित किया है नहीं था कि था। तो एनपीएम, और नोड, और pm2 और ... सभी असफल रहा।

प्रयोग के माध्यम से, यह मैं इस प्रक्रिया को तैनात Codedeploy के हर कदम के साथ अपने पथ पैर जमाने की जरूरत दिखाई दिया। मेरी stop.sh/beforeinstall.sh/afterinstall.sh/start.sh के शीर्ष पर तो, मैं शामिल:

source /home/ec2-user/.bash_profile 

और जीवन अच्छा था। फिर मैं पीएम 2 के साथ अन्य मुद्दों में भाग गया, जो सही काम करने वाली निर्देशिका में नोड शुरू नहीं कर रहा था, लेकिन कोडेडियोजित स्क्रिप्ट के समान ट्विकिंग ने काम किया।

यह सभी अंधेरे में स्पष्ट था, लेकिन मैं मदद के लिए बहुत आभारी हूं। आप लोगों को धन्यवाद!

+1

क्या आप जिन बदलावों का उल्लेख करते हैं, उन्हें साझा करेंगे, क्योंकि ऐसा लगता है कि मैं वही खोज रहा हूं? – Galya

+1

यह सही उत्तर है। #!/Bin/bash को निकालना सुनिश्चित करें और इसे स्रोत पंक्ति से प्रतिस्थापित करें। मैंने उस दीवार पर दीवार के खिलाफ एक घंटे के लिए टक्कर लगी। –

-2

होस्ट एजेंट जड़ों का काफी हद तक पर्यावरण का उपयोग करता है। 127 का एक निकास कोड इंगित करता है कि ओएस को कुछ फ़ाइल नहीं मिल सकती है जिसे इसे स्क्रिप्ट लोड करने की आवश्यकता है (यह कुछ निष्पादित करने की आवश्यकता है जो इसे निष्पादित करने के लिए आवश्यक है)।

तो सबसे अच्छा होगा यकीन है कि NPM जड़ के लिए स्थापित किया गया है बनाते हैं।

के बाद से, मेजबान एजेंट स्रोतों/etc/जब एक सेवा के रूप में शुरू प्रोफाइल, आप भी कुछ भी आप वहां काम कर रहे NPM प्राप्त करने की आवश्यकता जोड़ सकते हैं।

+2

के शीर्ष पर 'स्रोत/path_to_bash_profile' डालें रूट के रूप में नोड को न चलाएं। –

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