Elastic Beanstalk “git aws.push” 只承诺区别?

Posted

技术标签:

【中文标题】Elastic Beanstalk “git aws.push” 只承诺区别?【英文标题】:Elastic Beanstalk "git aws.push" only commited difference? 【发布时间】:2015-01-12 12:57:40 【问题描述】:

我们将 php 项目存储在 github 上。

为了快速部署,我们使用 .bat 文件进行 git 将更改推送到 AWS Elastic Beanstalk 云:

"C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "git aws.push --environment envname"

我们每次在推送之前都进行提交,并且它工作得非常完美,正如预期的那样。

不幸的是,由于某种原因,有时它的推送速度非常快(只是推送 PHP 代码更改的差异),但有时它会发送整个 300mb 的项目(包括所有媒体)。

有没有办法让 git push 只改变差异?也许在发送之前推送或准备 git 命令有任何其他参数?或者也许有一些方法可以告诉 AWS EB 从 github 存储库中提取最后一次提交?

感谢您的帮助。

【问题讨论】:

我对此感到困惑,因为 Elastic Beanstalk 的应用程序版本不允许这么大的捆绑包。大约 400MB 左右有硬性限制 @Humdinger 5Gb 在这里是一个实际值 :) 它实际上是 300mb 左右,但是,在我们国家的互联网连接下,上传大约需要 30 分钟。 为什么要投反对票? 300mb 或 5gb 的项目重量无关紧要,问题是一样的 - 如何防止完全 repo 推送而不是只推送更改? @Kainax 我尝试了同样的问题,有时 git aws.push 上传整个 300MB(与我相同),有时只上传更改。 【参考方案1】:

好的,经过几个月的麻烦,我解决了问题的原因。

问题出在

aws.push

命令 Elastic Beanstalk 正在检查您当前的文件是否已提交到 git 或它们是否在存储库之前。如果您的文件与最后一次 git 提交相同,那么 EB 只会提取差异,但如果您的文件在最后一次 git 提交之前,那么它会提取整个文件夹

为避免出现问题,我为 Windows 创建了一个 deploy.bat 文件,该文件尝试在 aws.push 命令之前提交更改:

cls
git add .
git commit -a
git aws.push --environment myenvironment
pause

现在,如果您在运行此 .bat 文件之前已经提交过,那么您将只上传差异。否则,在上传差异之前,系统会要求您提供 git commit 消息。

PS - 请注意,如果您再次尝试推送已经在 EB 上的版本,它也会尝试上传整个文件夹。

PSS - 如果由于任何原因您会看到 EB 试图拉取整个文件夹,只需关闭窗口,对源代码进行小的更改(如添加新行或注释),保存,提交更改到 git 并运行deploy.bat 文件。

像魅力一样工作!

编辑:

对于那些正在使用新的独立 eb cli 的人,代码将是:

cls
git add .
git commit -a
eb deploy your_environment_name
pause

【讨论】:

【参考方案2】:

我实施了一个解决方法,因为这是亚马逊的一个错误。

我在服务器中设置了一个 git 帐户(我使用了 Gitlab、免费的私人存储库和无限的合作者),你可以使用任何你想要的东西(github、gitlab、你的服务器)。

您和 git 服务器之间的过程是可靠的,您始终只推送更改。在 EC2 服务器中,我设置了一个连接到我的 git 服务器并从 EC2 服务器执行的 git 存储库(您可以使用配置文件 .ebextensions/*.config 或手动操作,我建议不要在所有实例中手动设置) git pull 和一个 git aws.push。

例如,您可以设置一个 Web Hook,以便在您执行 git push 时发出通知,然后自动执行 git pull 和 git aws.push。就我而言,我更喜欢决定何时使用 SSH 进行部署,而这并不总是在我将提交推送到我的 git 服务器时。

这样,从 EC2 服务器到 Elastic Beanstalk 服务器的 git aws.push 非常快,不管是推送所有内容还是只推送更改。

【讨论】:

【参考方案3】:

当您发出git aws.push 时,您的整个 git 存储库被压缩并上传到 Elastic Beanstalk,因此推送时间很长。这就是这个命令的实现方式。有一个很好的讨论和更改请求in this thread。 我不确定哪些文件在您的代码中如此重要,但通常最好不要将它们存储在应用程序 git 中。 如果这些是媒体文件,请将它们存储在 S3(或任何其他 Web 可访问的位置)中。 如果大多数文件是 git 中的外部库,您可以通过 EB pre-deploy script 预安装它们。

【讨论】:

关于媒体文件大小——实际上是动态生成的 360 度图像,每次 3d 艺术家更改模型时都会发生变化,因此它们在开发期间不断变化,每次更改都必须上传,所以目前手动 S3 bucked 上传不是我们的解决方案。如果我们找不到解决方案,我想我会通过自动 S3 上传扩展自定义 imgs-generation softmare。 这个答案是错误的,至少在 Windows 中,git aws.push 是使用 powershell 实现的,它的作用是获取用户和 url 推送的位置,然后执行正常的 git push。我认为,因为亚马逊是分布式的,并且 URL 与推送的地方不同,它不会推送到同一台服务器,需要推送整个 repo。您会接受此信息作为答案吗? @JoseNobile 您好,感谢您的提示。原因其实很明显,但是这个问题有什么解决办法呢?问题仍然悬而未决,也许有人知道如何解决它。

以上是关于Elastic Beanstalk “git aws.push” 只承诺区别?的主要内容,如果未能解决你的问题,请参考以下文章

elastic-beanstalk http请求超时

在 AWS Elastic Beanstalk 和 EKS 上部署了一个 laravel 应用程序 相同的数据库 RDS 为啥在 Elastic Beanstalk 中获得快速响应

AWS Elastic Beanstalk CLI 安装错误

text codepipeline + Elastic Beanstalk

text AWS Elastic Beanstalk

[AWS] Elastic Beanstalk