EB 部署到多个环境

EB Deploy to multiple environments

我有相同的代码库(一个 git 存储库),我想上传到多个弹性 beanstalk 环境。有没有办法做到这一点,如果可以,我应该如何以可以推送到多个环境的方式设置我的存储库?

环境是站点的不同语言版本,我想在不同的 beantalks 中 运行。语言由环境参数设置。

回答我自己的问题。 AWS EB CLI 3+ 有一个很好的界面可以部署到多个环境。如果您将另一个环境添加到您的应用程序,您可以简单地使用

进行部署
eb deploy <environment-name>

您可以通过将如下配置添加到您的 .elasticbeanstalk/config.yml 文件,使 eb cli 引用来自不同分支的不同环境:

branch-defaults:
  main:
    environment: staging
  production:
    environment: production

在此示例中,当您从“main”分支 运行 eb deploy 时,它将部署到名为“staging”的环境中,而当您从“ production”分支,它将部署到名为“production”的环境中。

这种方法要求每个环境都有一个专用分支。将一个分支推送到多个环境,可以使用,在使用eb deploy命令时指定一个分支:

eb deploy <environment_name>

如果指定版本标签,则可以在其他 eb deploy 命令中使用该版本:

eb deploy my-first-env -l version-1 && eb deploy my-second-env --version version-1

如果您正在使用 git 并且每个环境都有一个分支:

git checkout master
eb use <environment-name>

git checkout staging
eb use <environment-name>

git checkout worker
eb use <environment-name>

那你就可以

eb deploy

这将部署到当前分支的定义环境。

在幕后,这设置了 /.elasticbeanstalk/config.yml

中的关联

尽管如此,您仍然可以从任何分支 eb deploy <environment-name>

无需上传相同的源代码,我几乎没有采取任何解决方法。首先我部署我的“主”环境,然后检查它的版本,最后将这个版本部署到第二个环境。也可以根据当前 git 分支修改为使用不同的环境。

使用相同源代码的 2 个不同环境(应用程序)的示例:

我的“主”环境config.yaml文件

branch-defaults:
  main:
    environment: environ1-prod
  dev:
    environment: environ1-dev
...
# this deploys environ1 based on config.yaml
eb deploy 

BRANCH="$(git rev-parse --abbrev-ref HEAD)"
APP_VERSION="$(eb status | sed -n 's/.*Version: //p')"

if [ "$BRANCH" = "main" ]; then
  eb deploy environ2-prod --version $APP_VERSION
elif [ "$BRANCH" = "dev" ]; then
  eb deploy environ2-dev --version $APP_VERSION
fi