当前位置: 首页 > 知识库问答 >
问题:

如何将 Python 应用程序从 Jenkins 部署到亚马逊弹性豆茎?

夏飞跃
2023-03-14

我正在尝试从Jenkins工作以编程方式部署到Amazon Elastic Beanstek。在我的开发机器上,这很简单:

eb deploy $(AWS_ELASTIC_BEANSTALK_ENVIRONMENT)

在Jenkins,它应该像配置以下构建命令一样简单:

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 git@github.com: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

不清楚为什么会发生这种情况,因为当我在项目的本地副本上运行上述操作时,它工作正常。

错误消息似乎没有多大帮助。不清楚为什么在Jenkins的机器上找不到eb-cli。

因此,再次总结我的问题:我如何部署到来自Jenkins的Amazon Elastic Beanstalk?上面的做法是否正确,只是在细节上有误差?或者有没有更简单的方法?

共有3个答案

胡天佑
2023-03-14

我们突然遇到了这个问题,这可能相关,也可能不相关,但我想让任何可能再次遇到这个问题的人知道这个问题。eb-cli似乎略有变化,不允许全局设置凭据。

我们的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"
     }

以及我们的<code>配置。yml如下所示

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

移除< code>profile键可以解决这个问题...但是,这不允许从本地机器进行部署(除非有办法使用全局变量)

曹君墨
2023-03-14
匿名用户

我通过< code>ssh进入Jenkins机器,运行< code>eb init,然后比较生成的< code >来解决这个问题。elasticbeanstalk/config . yml 与我在上面使用的here-doc中的那个。这两者是不同的,因为我的开发机器和Jenkins机器上的安全配置文件不同。

我们可以重写该脚本,使其对不同的< code>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

请注意,我们使用< code > echo " 1 " | EB init myapp-region us-west-2 来选择默认环境,因为< code>eb init不将环境作为位置参数,然后使用< code>eb use myenv来选择我们想要的环境。

松英叡
2023-03-14

要更正找不到配置文件(eb-cli)错误,请将您用于部署到EB的凭据放入jenkins机器上的jenkins用户的~/. aws/config中。如果您在本地机器上构建部署,您应该能够直接从~/. aws/config本地提取文件。它看起来像这样:

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

 类似资料:
  • 我正在尝试在弹性豆茎上有一个节点js应用程序。在亚马逊 Linux 映像上,环境被创建并运行平稳。为了完成它,我遵循了AWS文档本身中的说明。它适用于单个实例。此外,使用Nginx并按照此处的信息终止了实例上的HTTPS该应用程序的根目录包含: <李>。ebextensions < li>index.js < li>package.json 通过按照 AWS 文档中给出的所有这些说明逐步创建环境并

  • 我是AWS的新手。试图将一个简单的flask应用程序部署到AWS。我没有问题,直到我包括熊猫套餐。 如果有人成功地部署了使用pandas到AWS的flask应用程序,请给出最好的方法。谢谢你。

  • 我正在把头撞到墙上,试图安装然后启用弹性豆茎的服务。我想做的是: > 在 安装一个服务,该服务指向 / 让Elastic Beanstek启动并保持服务的活动状态,如文件中指定的。 (参考:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html#customize-容器格式服务) 这是我

  • 我正在尝试将Symfony应用程序部署到Elastic Beanstek,但看起来URL重写不起作用。 使用在64位Amazon Linux 2上运行的平台PHP 7.4,文档根目录是/public。 .platform/nginx/conf.d/nginx.conf.conf 但是服务器找不到的路径(但适用于 如果我删除的注释标记(#),则无法找到它。 我在< code >/var/log/e

  • 我尝试创建新的环境,然后给出应用程序版本的s3桶路径,但它不起作用。(给出了一些错误,说“这只能在VPC中完成”)。

  • 我有一个用Python 2.7/Tornado编写的服务器,我正在尝试将其部署到AWS上。我遇到了AWS弹性豆茎,它看起来是一种非常方便的方法来部署我的代码。 txt文件中有一个tornado==4.4.2的条目。 我尝试添加一些日志语句来写入外部文件,但该文件没有被创建,这可能意味着应用程序甚至没有启动。 如果有人能提供一些在AWS-EB上部署龙卷风应用程序的步骤,或者我应该如何开始解决这个问题