6

मैं जेनकिंस नौकरी से प्रोग्रामेटिक रूप से अमेज़ॅन लोचदार बीनस्टॉक पर तैनात करने की कोशिश कर रहा हूं।मैं जेनकींस से अमेज़ॅन लोचदार बीनस्टॉक में पाइथन एप्लिकेशन कैसे तैनात करूं?

eb deploy $(AWS_ELASTIC_BEANSTALK_ENVIRONMENT) 

जेनकींस पर, यह एक निर्माण आदेश के रूप में निम्नलिखित को विन्यस्त के रूप में सरल किया जाना चाहिए:: मेरे विकास मशीन पर, यह जितना आसान है

virtualenv env && source env/bin/activate && pip install awsebcli 
mkdir -p .elasticbeanstalk 
cat <<EOF> .elasticbeanstalk/config.yml 
branch-defaults: 
    master: 
    environment: myenv 
global: 
    application_name: myapp 
    default_ec2_keyname: null 
    default_platform: 64bit Amazon Linux 2014.09 v1.0.9 running Python 2.7 
    default_region: us-west-2 
    profile: eb-cli 
    sc: git 
EOF 
eb deploy myenv 

बहरहाल, यह निम्नलिखित का पता लगाने के साथ विफल :

[EnvInject] - Loading node environment variables. 
Building remotely on standard Amazon Linux 2014.09 AMI (i-d39710df) (x) in workspace /media/ephemeral0/jenkins/workspace/My_Job 
Fetching changes from the remote Git repository 
Fetching upstream changes from [email protected]:myapp.git 
Checking out Revision be45db94111f9ab49fe8031eb583307d2fb9921c (origin/master) 
[My_Job] $ /bin/sh -xe /tmp/hudson8633484437962332339.sh 
+ virtualenv env 
New python executable in env/bin/python2.7 
Not overwriting existing python script env/bin/python (you must use env/bin/python2.7) 
Installing Setuptools..................................................................................................................done. 
Installing Pip....................................................................................................................................done. 
+ source env/bin/activate 
++ deactivate nondestructive 
++ unset pydoc 
++ '[' -n '' ']' 
++ '[' -n '' ']' 
++ '[' -n /bin/sh -o -n '' ']' 
++ hash -r 
++ '[' -n '' ']' 
++ unset VIRTUAL_ENV 
++ '[' '!' nondestructive = nondestructive ']' 
++ VIRTUAL_ENV=/media/ephemeral0/jenkins/workspace/My_Job/env 
++ export VIRTUAL_ENV 
++ _OLD_VIRTUAL_PATH=/usr/local/bin:/bin:/usr/bin:/opt/aws/bin 
++ PATH=/media/ephemeral0/jenkins/workspace/My_Job/env/bin:/usr/local/bin:/bin:/usr/bin:/opt/aws/bin 
++ export PATH 
++ '[' -n '' ']' 
++ '[' -z '' ']' 
++ _OLD_VIRTUAL_PS1= 
++ '[' x '!=' x ']' 
+++ basename /media/ephemeral0/jenkins/workspace/My_Job/env 
++ '[' env = __ ']' 
+++ basename /media/ephemeral0/jenkins/workspace/My_Job/env 
++ PS1='(env)' 
++ export PS1 
++ alias 'pydoc=python -m pydoc' 
++ '[' -n /bin/sh -o -n '' ']' 
++ hash -r 
+ pip install awsebcli 
Requirement already satisfied (use --upgrade to upgrade): awsebcli in ./env/lib/python2.7/site-packages 
Downloading/unpacking setuptools>=7.0 (from awsebcli) 
    Running setup.py egg_info for package setuptools 

Requirement already satisfied (use --upgrade to upgrade): pyyaml>=3.11 in ./env/lib/python2.7/site-packages (from awsebcli) 
Requirement already satisfied (use --upgrade to upgrade): six==1.8.0 in ./env/lib/python2.7/site-packages (from awsebcli) 
Requirement already satisfied (use --upgrade to upgrade): cement==2.4 in ./env/lib/python2.7/site-packages (from awsebcli) 
Requirement already satisfied (use --upgrade to upgrade): python-dateutil>=2.2 in ./env/lib/python2.7/site-packages (from awsebcli) 
Requirement already satisfied (use --upgrade to upgrade): jmespath>=0.4.1 in ./env/lib/python2.7/site-packages (from awsebcli) 
Installing collected packages: setuptools 
    Found existing installation: setuptools 0.9.7 
    Uninstalling setuptools: 
     Successfully uninstalled setuptools 
    Running setup.py install for setuptools 

    Installing easy_install script to /media/ephemeral0/jenkins/workspace/My_Job/env/bin 
    Installing easy_install-2.7 script to /media/ephemeral0/jenkins/workspace/My_Job/env/bin 
Successfully installed setuptools 
Cleaning up... 
+ mkdir -p .elasticbeanstalk 
+ cat 
+ cat .elasticbeanstalk/config.yml 
branch-defaults: 
    master: 
    environment: myenv 
global: 
    application_name: myapp 
    default_ec2_keyname: null 
    default_platform: 64bit Amazon Linux 2014.09 v1.0.9 running Python 2.7 
    default_region: us-west-2 
    profile: eb-cli 
    sc: git 
+ eb deploy myenv 
ERROR: The config profile (eb-cli) could not be found 
Build step 'Execute shell' marked build as failure 
Finished: FAILURE 

क्यों इस के बाद से जब मैं अपने प्रोजेक्ट की स्थानीय प्रतिलिपि यह ठीक काम करता है पर इसके बाद के संस्करण चलाने होता है यह स्पष्ट नहीं है।

त्रुटि संदेश बहुत मदद नहीं प्रतीत होता है। यह स्पष्ट नहीं है कि जेनकिन्स मशीन पर ईबी-क्ली क्यों नहीं मिल पाएगी।

तो फिर से मेरा प्रश्न सारांशित करने के लिए: मैं जेनकींस से अमेज़ॅन लोचदार बीनस्टॉक पर कैसे तैनात करूं? क्या उपर्युक्त दृष्टिकोण सही है, लेकिन विवरण में त्रुटियों के साथ? या क्या पूरी तरह से कुछ आसान तरीका है?

उत्तर

2

मैं ssh द्वारा इस का समाधान जेनकींस मशीन में ing, eb init चल रहा है, और फिर यहाँ-डॉक मैं ऊपर उपयोग कर रहा था में से एक के साथ उत्पन्न .elasticbeanstalk/config.yml की तुलना। जेनकिंस मशीन बनाम मेरी विकास मशीन पर विभिन्न सुरक्षा प्रोफाइलों के कारण दोनों अलग थे।

हम इस स्क्रिप्ट को फिर से लिखने कर सकते हैं इस तरह अलग अलग config.yaml फ़ाइलों के खिलाफ और अधिक मजबूत होने के लिए:

virtualenv env && source env/bin/activate && pip install awsebcli 
echo "1" | eb init myapp --region us-west-2 && eb use myenv && eb deploy myenv 

ध्यान दें, हम eb init के बाद से एक डिफ़ॉल्ट वातावरण को चुनने के लिए एक स्थितीय तर्क के रूप में पर्यावरण नहीं ले और उसके बाद का उपयोग करता है echo "1" | eb init myapp --region us-west-2 का उपयोग हम चाहते हैं पर्यावरण का चयन करने के लिए eb use myenv

11

config profile (eb-cli) could not be found त्रुटि को सही करने के लिए, अपने जेनकींस उपयोगकर्ता पर अपने जेनकींस उपयोगकर्ता के लिए ~/.aws/config में ईबी पर तैनात करने के लिए उपयोग किए जाने वाले प्रमाण-पत्र को छोड़ दें। यदि आपने स्थानीय मशीन पर अपनी तैनाती का निर्माण किया है, तो आप फ़ाइल को स्थानीय रूप से ~/.aws/config से सीधे खींच सकते हैं। यह इस तरह दिखेगा:

[profile eb-cli] 
aws_access_key_id = (for your IAM user) 
aws_secret_access_key = (for your IAM user) 
0

हम नीले रंग से बाहर इस मुद्दे में भाग गया, इस या प्रासंगिक नहीं हो सकता है, लेकिन मैं यह किसी को भी है कि इस भर में फिर से चला सकता है के लिए वहाँ बाहर निकलना चाहता था। ऐसा लगता है कि ईबी-क्ली थोड़ा बदल गया है और क्रेडेंशियल्स को विश्व स्तर पर सेट करने की अनुमति नहीं देगा।

हमारे JenkinsFile इस

withCredentials([[$class: 'AmazonWebServicesCredentialsBinding', 
credentialsId: 'iam-creds']]) { 
     sh "pip install awsebcli --upgrade --user" 
     sh "~/.local/bin/eb use my-application" 
     sh "~/.local/bin/eb deploy --verbose" 
    } 

तरह लग रहा है और हमारे config.yml लग रहा है इस

global: 
    application_name: my-application 
    default_ec2_keyname: application-keyname 
    ... 
    profile: eb-cli 
    sc: git 
    workspace_type: Application 

तरह हटाने के profile प्रमुख मुद्दा हल करती है ... बहरहाल, यह अनुमति नहीं देता है स्थानीय मशीन से की तैनाती (जब तक ग्लोबल्स का उपयोग करने का एक तरीका है)

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