2015-10-13 7 views
5

करने के लिए मैं जबकि एडब्ल्यूएस कोड नियोजित का उपयोग कर की तैनाती में कुछ स्क्रिप्ट चलाने का प्रयास कर रहा हूँ, लेकिन वे कभी नहीं की वजह से होने स्क्रिप्ट को चलाने के लिए अनुमतियों नहीं करने के लिए चलाते हैं।एडब्ल्यूएस कोड नियोजित असफल स्क्रिप्ट कारण अनुमतियां

version: 0.0 
os: linux 
files: 
    - source:/
    destination: /var/www/html 
permissions: 
    - object: /var/www/html/codedeploy-scripts 
    owner: root 
    mode: 777 
    type: 
     - directory 
hooks: 
    ApplicationStop: 
    - location: codedeploy-scripts/application-stop 
     timeout: 300 
     runas: root 
    BeforeInstall: 
    - location: codedeploy-scripts/before-install 
     timeout: 300 
     runas: root 
    AfterInstall: 
    - location: codedeploy-scripts/after-install 
     timeout: 600 
     runas: root 
    ApplicationStart: 
    - location: codedeploy-scripts/application-start 
     timeout: 300 
     runas: root 
    ValidateService: 
    - location: codedeploy-scripts/validate-service 
     timeout: 300 
     runas: root 

codedeploy-स्क्रिप्ट एप्लिकेशन और अनुमतियाँ मैं फ़ोल्डर पर सेट तैयार हो जाओ नहीं है के साथ तैनात हो फ़ोल्डर:

यहाँ मेरी appspec.yml फ़ाइल है।

[[email protected] html]$ ls -al 
total 156 
drwxrwsr-x 7 ec2-user www 4096 Oct 13 16:36 . 
drwxrwsr-x 3 ec2-user www 4096 Oct 13 15:01 .. 
-rw-rw-r-- 1 ec2-user www 740 Oct 13 16:28 appspec.yml 
drwxr-sr-x 2 ec2-user www 4096 Oct 13 16:36 codedeploy-scripts 
... 

फ़ोल्डर में फ़ाइलें निष्पादन अधिकार है लगता है: फ़ोल्डर पर अनुमतियों हमेशा पाने के लिए रीसेट

[[email protected] alio]$ ls -al codedeploy-scripts 
total 28 
drwxr-sr-x 2 ec2-user www 4096 Oct 13 16:36 . 
drwxrwsr-x 7 ec2-user www 4096 Oct 13 16:36 .. 
-rwxr-xr-x 1 ec2-user www 343 Oct 13 16:28 after-install 
-rwxr-xr-x 1 ec2-user www 12 Oct 13 16:28 application-start 
-rwxr-xr-x 1 ec2-user www 12 Oct 13 16:28 application-stop 
-rwxr-xr-x 1 ec2-user www 889 Oct 13 16:28 before-install 
-rwxr-xr-x 1 ec2-user www 12 Oct 13 16:28 validate-service 

क्यों कोड अनुमतियाँ मैं में सेट के साथ नहीं तैनात हो जाता है ऐपस्पेक फ़ाइल। कोडेडियोजित-स्क्रिप्ट फ़ोल्डर में 777 अनुमतियां होनी चाहिए लेकिन यह कभी नहीं करती है।

2015-10-13 16:36:23 WARN [codedeploy-agent(9918)]: InstanceAgent::Plugins::CodeDeployPlugin::HookExecutor: Script at specified location: codedeploy-scripts/validate-service is not executable. Trying to make it executable. 

किसी भी मदद की सराहना की जाएगी:

यह त्रुटि मैं उन लिपियों से प्रत्येक के लिए /var/log/aws/codedeploy-agent/codedeploy-agent.log में मिलता है।

उत्तर

6

एजेंट निकाले गए संग्रह बंडल से सीधे स्क्रिप्ट निष्पादित कर रहा है, किसी भी मनमानी स्थानों से नहीं, जिसे आपने files अनुभाग का उपयोग करके कॉपी किया हो। आपको S3 या गिट रिपोजिटरी में अपने संग्रह में निष्पादन बिट सेट करने की आवश्यकता होगी।

  • /var/www/html को सभी फाइलों को कॉपी करें:

    क्या आप उसी रूप में है करता है।

  • /var/www/html/codedeploy-scripts 777 के लिए, लेकिन निर्देशिका ही नहीं की सामग्री पर निर्देशिका पर अनुमतियां सेट करें (appspec.yml reference देखें)। यह उमास्क से भी प्रभावित होगा, जिसे आप /etc/profile सेट कर सकते हैं।
  • संग्रह जड़ से जीवन चक्र की घटनाओं के लिए स्क्रिप्ट का प्रत्येक निष्पादित (के रूप में वे होते हैं)। तो अपने ValidateSerivce स्क्रिप्ट से /var/www/html/codedeploy-scripts/validate-service

नोट <deployment-archive-root>/codedeploy-scripts/validate-service नहीं से चल रहा है: ApplicationStop खास है क्योंकि यह पहले नया नया संग्रह बंडल डाउनलोड किया जाता है चलाता है।

+0

आह, हाँ, आदेश पर अमल Git में स्थापित करने के मुद्दे को तय की। धन्यवाद! – gprime

+0

यह इतना स्पष्ट नहीं था ... लेकिन भयानक .. धन्यवाद :) –

+0

@gprime गिट में execute कमांड सेट करके आपका क्या मतलब है? मुझे एक ऐसी समस्या का सामना करना पड़ रहा है जो अनुमतियों से संबंधित भी हो सकता है। यहां यह है - http://stackoverflow.com/questions/38616547/aws-codedeploy-deployment-throwing-stderr-could-not-open-input-file-at-after –

4

अधिक जानकारी के बिना, मैं क्यों अपनी स्क्रिप्ट की स्थापना आपकी समस्या का समाधान निष्पादन योग्य होने के लिए बात करने के लिए सक्षम नहीं होगा, लेकिन उसे स्वीकार जवाब आप को देख रहे थे लॉग बयान के अलावा और कुछ हल नहीं जाना चाहिए था।

लॉग को करीब से देख लें:

2015-10-13 16:36:23 WARN [codedeploy-agent(9918)]: InstanceAgent::Plugins::CodeDeployPlugin::HookExecutor: Script at specified location: codedeploy-scripts/validate-service is not executable. Trying to make it executable. 

यह केवल एक चेतावनी, नहीं एक त्रुटि है। कोड नियोजित एजेंट देखा है कि आपका validate_service.sh स्क्रिप्ट निष्पादन योग्य नहीं था और यह "कोशिश कर रहा यह निष्पादन योग्य बनाने के लिए"। अगर हम relevant Code Deploy agent code देखते हैं, तो आप देखेंगे कि एजेंट chmod +x स्क्रिप्ट स्वयं ही होगा।

जब आप निष्पादन योग्य होने के लिए अपनी स्क्रिप्ट निर्धारित करते हैं, आप केवल इस चेतावनी को खामोश कर दिया है, और यह कुछ और प्रभावित नहीं होना चाहिए था।L106 में कोड परिनियोजन एजेंट कोड पर वापस देखकर, यदि एजेंट आपकी स्क्रिप्ट निष्पादन योग्य बनाने में सक्षम नहीं था तो आपको अपने लॉग में कोई त्रुटि दिखाई देगी।

अनुमतियों पर आपके प्रश्न का उत्तर देने के लिए, आपके पास एक गलत कॉन्फ़िगर किया गया appspec.yml है। जब आप कहते हैं:

permissions: 
    - object: /var/www/html/codedeploy-scripts 
     owner: root 
     mode: 777 
     type: 
     - directory 

आप कोड नियोजित कह रहे हैं अनुमतियों 777 के लिए /var/www/html/codedeploy-scripts भीतर प्रकार "निर्देशिका" की सभी फाइलों को स्थापित करने के लिए।

codedeploy-scripts के तहत अपने लिपियों के सभी "फाइल" प्रकार के होते हैं (नहीं "निर्देशिका"), यही वजह है कि उनकी अनुमति सेट नहीं थे, और अनुमतियाँ केवल अंतर्गत फ़ाइलें के लिए लागू निर्देशिका आपके द्वारा निर्दिष्ट, यही वजह है कि है codedeploy-scripts निर्देशिका पर अनुमतियां सेट नहीं थीं। - वैकल्पिक

प्रकार:

यहाँ the AWS docs से appspec.yml अनुमति के type विकल्प का विवरण दिया गया है। निर्दिष्ट अनुमतियों को लागू करने के लिए वस्तुओं के प्रकार। इसे फ़ाइल या निर्देशिका में सेट किया जा सकता है। अगर फ़ाइल निर्दिष्ट है, तो अनुमतियां केवल उन्हीं फ़ाइलों पर लागू की जाएंगी जो प्रतिलिपि ऑपरेशन के बाद ऑब्जेक्ट में तुरंत निहित हों (और स्वयं को ऑब्जेक्ट न करें)। यदि निर्देशिका निर्दिष्ट है, तो अनुमतियों को कॉपी ऑपरेशन के बाद ऑब्जेक्ट के भीतर कहीं भी सभी निर्देशिकाओं/फ़ोल्डरों पर लागू किया जाएगा (लेकिन स्वयं को ऑब्जेक्ट नहीं करना)।

0

मैं जोनाथन टर्पी द्वारा उल्लिखित एक मुद्दे पर विस्तार करना चाहता हूं जो एक बहुत अजीब स्थिति बना सकता है।

डॉक्स से ApplicationStop पर:

यह तैनाती जीवन चक्र घटना से पहले ही आवेदन संशोधन डाउनलोड किया जाता है तब होता है। ... इस परिनियोजन जीवन चक्र घटना के लिए उपयोग की जाने वाली ऐपस्पेक फ़ाइल और स्क्रिप्ट पिछले सफलतापूर्वक तैनात आवेदन संशोधन से हैं।

  1. एक संशोधन असफल ApplicationStop स्क्रिप्ट अनुमतियों के साथ तैनात किया गया था:

अब इस स्थिति की कल्पना। तैनाती अभी भी ठीक हो गई क्योंकि पिछले संस्करण का उपयोग किया गया था।

  • एक नया संशोधन धक्का दिया गया है और एप्लिकेशनस्टॉप चरण में विफल रहता है (क्योंकि अब यह चरण 1 से बॉट स्क्रिप्ट निष्पादित करने का प्रयास करता है)।
  • आप अपनी गलती देखते हैं, कोड को ठीक करते हैं, एक नया संशोधन प्रकाशित करते हैं, लेकिन यह अभी भी एक ही त्रुटि के साथ विफल रहता है!
  • इस बिंदु पर नए कोड को तैनात करके त्रुटि को ठीक करना संभव नहीं है।

    1. तैनाती सेटिंग में सक्षम "उपेक्षा बंद करो विफलताओं" (उदा --ignore-application-stop-failures CLI ध्वज के साथ [1])
    2. मैन्युअल पिछले सफल स्थापना के रूट में फाइल अनुमति तय: आप केवल दो विकल्प हैं।

    यह किसी भी स्टॉप स्क्रिप्ट विफलताओं से संबंधित है, केवल पाठ्यक्रम की अनुमति नहीं।

    [1] https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html

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