AWS Elastic Beanstalk + Git 子模块

Posted

技术标签:

【中文标题】AWS Elastic Beanstalk + Git 子模块【英文标题】:AWS Elastic Beanstalk + Git Submodules 【发布时间】:2013-08-16 01:00:45 【问题描述】:

我正在使用 Amazon 的 Elastic Beanstalk 通过 Git 部署我的应用程序,并且我的 Git 中有子模块。当然,当我查看子模块的数据应该在的目录时,什么都没有,因为子模块还没有被初始化。

显然 Elastic Beanstalk 不支持子模块。它是否正确?如果是这样,我如何说服 Git 让我拥有子模块的功能,但在我推送主 repo 时仍然上传子模块的所有代码?

【问题讨论】:

【参考方案1】:

如果您使用 CodePipeline,有一种方法可以使用 CodeBuild 获取所有子模块并自动将此工件提供给 Elastic Beanstalk:https://medium.com/@cristiano.ventura/working-with-git-submodules-in-codepipeline-83e843e5d0a

【讨论】:

【参考方案2】:

如果您只需确保 Git 安装在 Customizing and Configuring AWS Elastic Beanstalk Environments 使用的 AMI 上,Elastic Beanstalk 确实支持子模块。你可以通过在你的 git repo 中提供一个配置来做到这一点:

创建一个扩展名为.config(例如myapp.config)的配置文件,并将其放在你的git repo的.ebextensions***目录中

在该文件中,指定依赖项:

   packages: 
      <name of package manager>:
         <package name>: <version>

例如:

   packages:
      yum:
         git: []

确保将 name of package manager 与您正在使用的 AMI 匹配,例如,yum 用于 Amazon Linux,apt 用于 Ubuntu。

您可能需要调整构建脚本来初始化子模块,因为 EB 不会为您这样做

提交、推送和部署并开始

【讨论】:

【参考方案3】:

如果您使用通过 pip 安装的 awsebcli,那么这可能会对您有所帮助。

我们在 PyPi 上找到了the source code for AWS-EB client 3.10.1。

问题在于在压缩项目的源代码以将其上传到 AWS 时如何处理 git repos。如果您的 AWS 项目不使用 git,则整个项目目录(包括您可能在其中的子目录下的任何其他 git 模块)将被压缩并发送到 AWS。如果您使用 git,则除子模块之外的所有签入或暂存代码都将被压缩并发送到 AWS。跳过 Git 子模块。

我们通过更改行为来解决此问题,以便将子模块也添加到压缩存档中。您可以在我们的 git repo 上的 github.com/uppercasebrands/awsebcli-3.10.1/compare/eb-deploy-submodule 查看修复,该 repo 是从原始 PyPi 包创建的。

您可以使用 pip 安装现在支持子模块的固定 awsebcli-3.10.1:

pip install --upgrade git+https://github.com/uppercasebrands/awsebcli-3.10.1.git@eb-deploy-submodule

【讨论】:

【参考方案4】:

哪个容器? Java、Ruby 等?

有不同的部署工具,您不只是受困于 aws 提供的命令行 eb。我一直在研究一个 config/rake gem(使用eb_deployer),我很快就会发布它,它只使用一个 zip 文件,而不是一个 git push,这样就可以了。你也可以试试ebs-deploy。

【讨论】:

我正在使用节点。不过,这是一个很好的观点,很有趣。我还在考虑在安装后运行一个节点构建脚本,这可能是我最终要做的。 我终于完成了宝石。有关想法,请参阅 github.com/alienfast/elastic-beanstalk。

以上是关于AWS Elastic Beanstalk + Git 子模块的主要内容,如果未能解决你的问题,请参考以下文章

AWS Elastic Beanstalk .ebextensions 文件创建不起作用(apache 配置)

如何设置运行 Django 的 AWS Elastic Beanstalk Docker 平台?

具有相同 .gitignore 的 AWS Elastic Beanstalk 和 Github

AWS Elastic Beanstalk 和 JAVA_OPTS

AWS Add Key Pair to Elastic Beanstalk Instance 给EB实例加密钥

AWS Elastic Beanstalk:通过缓存避免在 EB 应用程序更新时重新下载应用程序的静态文件