从同一个 git 存储库部署到具有不同环境变量的弹性 beanstalk 上的不同环境

Posted

技术标签:

【中文标题】从同一个 git 存储库部署到具有不同环境变量的弹性 beanstalk 上的不同环境【英文标题】:Deploying to different environments with different env variables on elastic beanstalk from the same git repository 【发布时间】:2018-08-13 13:22:30 【问题描述】:

管理具有多个环境分支的 git 存储库的环境变量配置文件的最佳做法是使用“eb deploy”部署到 Elastic Beanstalk 上的不同环境?

我有一个带有 prod 和 dev 分支的 git 存储库,EB 设置了 prod 和 dev 环境,以及每个 env 的环境配置文件(用于 prod 的 env.config,用于 dev 的 env_dev.config)。 env 文件在 .gitignore 中,但不在 .ebignore 中,因此它们不在源代码控制中,而是部署到 EB。

如何设置以便 env.config 仅部署到生产环境,而 env_dev.config 仅部署到开发环境?我询问了 AWS 支持,他们说没有办法在环境级别设置条件来告诉它要包含什么配置文件。

另一个想法是在每个分支中都有一个 .ebignore 文件,忽略另一个分支的 env.config 文件,但是当我将开发分支合并到生产时,这个文件也会出现。

【问题讨论】:

你有什么好运的工作吗?我们现在遇到了同样的问题。 我最终做的不是使用弹性 beanstalk 环境作为开发服务器,我只是使用一个普通的 EC2 实例,我使用远程 FTP 包连接到 Atom 上。我正在使用 Laravel,所以我的 env 变量来自 .env ,它刚刚与应用程序一起上传到我的 EC2 实例。 【参考方案1】:

您可以使用 ebextensions 的 container_commands 来实现此目的:

    以某种方式获取ENVIRONMENT 环境变量。

    创建一个.ebextension container command 基本上将source 获取正确的文件。 .ebextension 文件,例如 env_sourcer.config,如下所示:

    container_commands:
      if [ $ENVIRONMENT == 'PRODUCTION' ]; then source ./env.config; else source ./env_dev.config; fi
    

【讨论】:

以上是关于从同一个 git 存储库部署到具有不同环境变量的弹性 beanstalk 上的不同环境的主要内容,如果未能解决你的问题,请参考以下文章

具有多个部署的单个 Jenkins 作业

EB 部署到多个环境

意外从具有不同提交历史的远程仓库中提取后访问较旧的 Git 提交

从 git 存储库创建补丁或差异文件并将其应用到另一个不同的 git 存储库

使用 capistrano 从不同的 git 分支进行部署

Jenkins:一个项目的多个Git存储库