6

पर अपडेट नहीं हो मैं एक git रेपो कि s3 से आवेदन की मौजूदा रिलीज के एक टारबॉल खींचती है और यह शुरूआत में एक Dockerfile/elastic-beanstalk एप्लिकेशन है। यह पहली बार काम करता है जब मैं तैनात करता हूं; डॉकर कंटेनर बनाया जाता है, और ऐप लॉन्च और सही ढंग से चलता है। ऐप में बदलाव करने के बाद समस्या आती है, टैरबॉल को s3 पर दोबारा अपलोड करें और eb deploy चलाएं।लोचदार-बीनस्टॉक डोकर एप्लिकेशन तैनाती

$ eb deploy 
INFO: Environment update is starting. 
INFO: Deploying new version to instance(s). 
INFO: Successfully built aws_beanstalk/staging-app 
INFO: Successfully pulled yadayada/blahblah:latest 
INFO: Docker container 06608fa37b2c is running aws_beanstalk/current-app. 
INFO: New application version was deployed to running EC2 instances. 
INFO: Environment update completed successfully. 

लेकिन एप्लिकेशन *.elasticbeanstalk.com पर अद्यतन नहीं किया है। मैं अनुमान लगा रहा हूं कि Dockerfile नहीं बदला है, डॉकर कंटेनर का पुनर्निर्माण नहीं करता है (और नवीनतम एप्लिकेशन टैरबॉल खींचें)। मैं एक पुनर्निर्माण को मजबूर करने में सक्षम होना चाहता हूं लेकिन eb उपकरण में ऐसा विकल्प प्रतीत नहीं होता है। मैं वेबसाइट कंसोल से पुनर्निर्माण को मजबूर कर सकता हूं, लेकिन जाहिर है कि स्वचालन के लिए कोई अच्छा नहीं है। मैं प्रत्येक परिवर्तन को git पर कर रहा हूं और मुझे उम्मीद थी कि eb इसका उपयोग यह जानने के लिए करेगा कि पुनर्निर्माण आवश्यक है लेकिन ऐसा कोई फर्क नहीं पड़ता है। क्या मैं गलत तरीके से डॉकर/लोचदार-बीनस्टॉक का उपयोग कर रहा हूं? आदर्श रूप में मैं git पर प्रतिबद्ध होना चाहता हूं और ऐप को स्वचालित रूप से पुनः इंस्टॉल करने के लिए बीनस्टॉक है।

उत्तर

0

मुझे आश्चर्य है कि क्या आप उपयोगकर्ता डेटा इनपुट का उपयोग करने का प्रयास कर सकते हैं जब आप बीनस्टॉक में अपने उदाहरण परिभाषित करते हैं? कुछ इस तरह सही बूट के अंत में बंद आग सकता है:

#!/bin/bash 
cd /app/dir/home 
sudo docker pull username/container 
... other things you may need to do ... 

अधिक है कि आप उपयोगकर्ता के डेटा स्क्रिप्ट और निष्पादनयोग्य के बारे में देख सकते हैं: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html

+0

ऐसा लगता है कि बीनस्टॉक उपयोगकर्ता डेटा का समर्थन नहीं करता है - कम से कम [इस] के अनुसार (http://stackoverflow.com/questions/8412231/how-do-i-pass-userdata-to-a-beanstalk -इंस्टेंस-साथ-क्लाउडफॉर्मेशन) और [यह] (https://forums.aws.amazon.com/thread.jspa?threadID=81687)। –

5

कि सीआई के लिए डोकर का उपयोग कर के साथ समस्या यह है कि यह नहीं करता है एक स्क्रिप्ट की तरह कार्य नहीं करता है कि यह तब तक पुनर्निर्माण नहीं करेगा जब तक कि Dockerfile परिवर्तन न हो। तो आपको Dockerfile की बजाय स्टार्टअप रैपर स्क्रिप्ट में हर बार पुनर्निर्मित करने की आवश्यकता है। इसलिए मैंने उस भाग को स्थानांतरित किया जो एप्लिकेशन टैरबॉल को एक स्क्रिप्ट में डाउनलोड करता है जो Dockerfile कंटेनर पर इंस्टॉल करता है। फिर जब कंटेनर शुरू होता है तो टैरबॉल डाउनलोड और अनपॅक किया जाता है और केवल तभी असली एप्लिकेशन शुरू हो सकता है। यह काम करता है, और पुनः तैनाती अब अपेक्षित काम करता है। यह प्रक्रिया को डीबग करने के लिए थोड़ा सा उत्तेजित है और मुझे राय है कि सीआई के लिए ईबी के साथ डॉकर का उपयोग करना हैक का थोड़ा सा है।

+1

मुझे एक ही समस्या है। मेरे वेब ऐप को फिर से तैनात करें लेकिन यह अपडेट नहीं है। क्या आप इसे ठीक करने के तरीके के बारे में अधिक सटीकता प्रदान कर सकते हैं? फिलहाल मेरे डॉकरफाइल ने .sh स्क्रिप्ट को कॉल किया जो मेरा वेब सर्वर चलाता है –

0

आप शायद read this first हम क्या कर रहे हैं के बारे में हमारे स्थानीय git भंडार में हमारे स्थानीय साइट के लिए और how to push it ElasticBeanstalk अप करने के लिए साइट को लाइव बनाने के लिए की एक बेहतर समझ पाने के लिए करना चाहिए।

नामक हमारी साइट की जड़ में फ़ोल्डर खोजें या बनाएं .elasticbeanstalk।जोड़ें और

ElasticBeanstalk के लिए सब कुछ करने के लिए प्रतिबद्ध

config

[global] 
ApplicationName=YourApplicationNameFromAWSConsole 
AwsCredentialFile=.elasticbeanstalk/aws_credentials 
DevToolsEndpoint=git.elasticbeanstalk.us-east-1.amazonaws.com 
EnvironmentName=EnvironmentNameFromAWSConsole 
Region=us-east-1 

aws_credentials

[global] 
AWSAccessKeyId=AKIAxxxxxxxxxxxxxxxxxxxxx 
AWSSecretKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
के बजाय

eb deploy उपयोग git aws.push:
उस फ़ोल्डर के अंदर हम दो फ़ाइलों बनाती हूँ

git add *.* 
git commit -m "Adding AWS Configs" 
git aws.push 
0

टीएलडीआर: आप होस्ट डायरेक्टरी के बिना कंटेनर डायरेक्टरी का उपयोग कर रहे हैं या आपको --no-cache = true flag के साथ बनाने के लिए 03build.sh को अपडेट करने की आवश्यकता हो सकती है।

बाद में एक बजाना घंटे बाद, मैंने अंततः इसे अपने उपयोग के मामले के साथ तय किया। मैं डॉकर के साथ एडब्ल्यूएस में निरंतर एकीकरण/निरंतर वितरण समाधान बनाने के लिए कोडकॉमिट, कोडबिल्ड और लोचदार बीनस्टॉक चलाने के लिए कोडपिपलाइन का उपयोग कर रहा हूं। जिस मुद्दे में मैंने भाग लिया था वह कोडबिल्ड सफलतापूर्वक एडब्ल्यूएस ईसीआर (ईसी 2 कंटेनर रजिस्ट्री) में नई डॉकर छवियों का निर्माण और प्रकाशन कर रहा था और ईबीएस नई छवि को सही ढंग से खींच रहा था, लेकिन फिर भी डॉकर छवि सर्वर पर अपडेट नहीं हो रही थी।

ईबीएस डॉकर छवि कैसे बनाता है की पूरी प्रक्रिया का निरीक्षण करने के बाद (वास्तव में एक महान लेख here, part 1 और here part 2 है जो एक सिंहावलोकन देता है), मैंने इस मुद्दे की खोज की।

लेख में जोड़ने के लिए, ईसीएस में ईसीएस में 3-चरण की प्रक्रिया है जो डॉकर छवियों को तैनात करने के लिए स्पून-अप है।

  1. पूर्व
  2. अधिनियमित
  3. पद

यह 3 चरण की प्रक्रिया बैश फ़ाइलों को क्रियान्वित कर रहे हैं जो /opt/elasticbeanstalk/hooks/appdeploy/ में स्थित हैं का एक क्रम है।

पूर्व चरण होते हैं निम्नलिखित शेल स्क्रिप्ट:

  1. 00clean_dir.sh - डाउनलोड स्रोत - निर्देशिका जहां स्रोत डाउनलोड किया जाएगा साफ, डोकर कंटेनर और छवियों (जैसे सफाई)
  2. 01unzip.sh को हटा एस 3 से और
  3. 02loopback-check.sh यह unzips - सत्यापन होता है आप डोकर लूपबैक सेटिंग सेट
  4. 03build.sh नहीं है - यह जहां जादू होता है जहां EC2 अपने Dockerfile या Dockerrun से अपने डोकर छवि का निर्माण होगा। aws.json। बहुत परीक्षण के बाद, मुझे एहसास हुआ कि यह निर्माण स्क्रिप्ट मेरी अद्यतन छवि का निर्माण कर रही थी, लेकिन मैंने इस स्क्रिप्ट को डॉकर बिल्ड पर --no-cache ध्वज को शामिल करने के लिए संशोधित किया।

अधिनियमित चरण वह जगह है जहां मेरा कैशिंग समस्या वास्तव में होती थी। अधिनियमित चरण के होते हैं:

  1. 00run.sh - यह वह जगह है जहाँ डोकर रन छवि है कि वातावरण चर और अपने Dockerrun.aws.json में सेटिंग के आधार पर पूर्व के चरण में जनरेट किया गया था के खिलाफ मार डाला जाता है।यह मेरे लिए कैशिंग मुद्दे पैदा कर रहा था।
  2. 01flip.sh - वर्तमान एप्लिकेशन के तहत करने के लिए एडब्ल्यूएस-मचान और अन्य सामग्री का एक बहुत से कनवर्ट करता

जब मैं छवि है कि पूर्व के चरण में जनरेट किया गया था, 03build.sh से डोकर रन पर अमल होगा, मैं करूंगा मेरे अद्यतन परिवर्तन देखें। हालांकि, जब मैं 00run.sh खोल स्क्रिप्ट निष्पादित करता हूं, तो पुराने परिवर्तन प्रकट होंगे। डोकर रन कमांड की जांच के बाद, यह

`Docker command: docker run -d -v null:/usr/share/nginx/html/ -v /var/log/eb-docker/containers/eb-current-app:/var/log/nginx ca491178d076` 

को क्रियान्वित किया गया था -v null:/usr/share/nginx/html/ क्या यह तोड़ने गया था और यह अद्यतन करने के लिए नहीं पैदा कर रहा है। ऐसा इसलिए हुआ क्योंकि मेरी Dockerrun.aws.json फ़ाइल संदर्भित मेजबान स्थान के बिना

"Volumes": [ 
    { 
     "ContainerDirectory": "/usr/share/nginx/html/" 
    } 
    ], 

था। नतीजतन, मैंने किए गए भविष्य में किए गए किसी भी बदलाव को अपडेट नहीं किया।

मेरे समाधान के लिए, मैंने अभी "Volumes" सरणी को हटा दिया है क्योंकि मेरी सभी फाइलें डॉकर छवि में निहित हैं जो मैं ईसीआर पर अपलोड करता हूं। नोट: आपको 03build.sh पर भी --no-cache जोड़ने की आवश्यकता हो सकती है।

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