Elastic Beanstalk:将分支部署到环境

Posted

技术标签:

【中文标题】Elastic Beanstalk:将分支部署到环境【英文标题】:Elastic Beanstalk: Deploy branch to env 【发布时间】:2016-04-20 15:05:47 【问题描述】:

我正在考虑将自定义托管 Rails 应用程序迁移到 Elastic Beanstalk。

我创建了一个简单的 Rails 应用程序并设法将其部署到 Elastic beanstalk 上。还有一些事情我仍然没有得到:

    如何将分支或特定代码部署到我的应用? 部署的版本是来自上次提交还是我当前的工作区? 在 Beanstalk 上处理部署时的最佳做法是什么?

亚马逊有这个文档 (link),但它似乎已被弃用,我不知道如何在当前版本上执行此操作

elad:...$ eb --version EB CLI 3.7 (Python 2.7.1)

【问题讨论】:

【参考方案1】:

考虑他们的选择的人可以看看AWS Code Pipeline。您定义特定的 GitHub 存储库分支。如果您将更改推送到该分支,代码管道会检测到它并启动管道进程。

这与 Elastic Beanstalk 相关,因为在代码管道的第 4 步中,您可以部署到 AWS Elastic Beanstalk(以及其他)。

【讨论】:

【参考方案2】:

我不确定我的解决方案是否是最佳实践,我只是在这里展示,欢迎所有 cmet 讨论。

    如何将分支或特定代码部署到我的应用?
Beanstalk 支持使用EB command line 部署当前分支的最后一次提交(实际上是先上传到S3) 从压缩文件部署,之后该文件实际上也更新到 S3 这是 Beanstalk 控制台中您的环境设置中的内容

    部署的版本是来自上次提交还是我当前的工作区?
自上次提交

3.在 Beanstalk 上处理部署的最佳实践是什么?

我的解决方案 #1: 定义将哪个分支部署到特定环境

.elasticbeanstalk/config.yml

# .....
branch-defaults:
  develop:
    environment: mercury-dev-staging
  master:
    environment: mercury-dev
# .....

依靠这个配置,我总是切换到develop 分支部署到mercury-dev-staging 环境,master 一个用于mercury-dev。这将避免一些错误,例如将develop 分支部署到生产环境

我的解决方案#2:定义一些别名命令以便快速部署:

~/.bash_profile(我使用的是 MacOS)

alias deploy_production="eb deploy mercury-dev;"
alias deploy_staging="eb deploy mercury-dev-staging;"

现在我只需键入deploy_staging 进行分阶段部署,这很方便但有风险,因为您可能会将开发功能部署到生产环境。

【讨论】:

我使用选项 1。我喜欢它的简单性。 @Clarkie:有其他解决方案的想法吗? @hieuPham 谢谢。我与 BeanStalk 战斗了几天,并认为它不够好 - 至少对于托管 Rails 应用程序而言。缺少 RVM / RBenv 或 gem 管理即使是小型 Rails 应用程序也会产生很多问题......对 AWS 来说太糟糕了,我非常失望。

以上是关于Elastic Beanstalk:将分支部署到环境的主要内容,如果未能解决你的问题,请参考以下文章

将 Laravel 应用程序从 GitHub 分支自动部署到 AWS EC2 或 Elastic Beanstalk

同时部署到 Amazon Elastic Beanstalk 上的多个环境

将 react 应用的 docker 镜像部署到 Elastic beanstalk

将 Python 和依赖项部署到 Elastic Beanstalk

将 Django 部署到 Elastic Beanstalk,迁移失败

将映像从 aws ecr 部署到 aws elastic beanstalk