弹性豆茎“;git aws.push“;只有承诺的区别?

弹性豆茎“;git aws.push“;只有承诺的区别?,git,amazon-web-services,amazon-elastic-beanstalk,aws-cli,ebcli,Git,Amazon Web Services,Amazon Elastic Beanstalk,Aws Cli,Ebcli,我们正在github上存储我们的PHP项目 为了快速部署,我们使用.bat文件进行git,将更改推送到AWS Elastic Beanstalk云: "C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "git aws.push --environment envname" 我们在每次推送前都会做出承诺,正如预期的那样,它工作得非常完美 不幸的是,由于某些原因,有时它的速度非常快(只是推动PHP代码更改的差异),但有时它发送整个300mb

我们正在github上存储我们的PHP项目

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

"C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "git aws.push --environment envname"
我们在每次推送前都会做出承诺,正如预期的那样,它工作得非常完美

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

有没有办法只推改变差异的git?在发送之前,推送或准备git命令是否有其他参数?或者有什么方法可以告诉AWS EB从github存储库中提取最后一次提交


感谢您的帮助。

当您发布git aws.push时您的整个git存储库都被压缩并上传到Elastic Beanstalk,因此推送时间很长。这就是这个命令的实现方式。有一个很好的讨论和要求更改。
我不确定哪些文件在您的代码中如此重要,但一般来说,最好不要将它们存储在应用程序git中。
如果这些是媒体文件,请将它们存储在S3(或任何其他可通过web访问的地方)。
如果大部分文件都是git中的外部lib,那么您可以通过

我实施了一个变通方法,因为这是Amazon的一个bug

我在服务器上设置了一个git帐户(我使用了Gitlab、免费的私有存储库和无限的协作者),您可以使用任何您想要的(github、Gitlab、您的服务器)

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

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


通过这种方式,将git aws.push从EC2服务器推送到Elastic Beanstalk服务器速度非常快,无论它是推送所有内容还是只推送更改。

好的,在几个月的故障后,我解决了问题的原因

问题是,在这方面

aws.push
命令Elastic Beanstalk正在检查当前文件是否提交到git,或者是否在存储库之前。如果您的文件与上次git提交的文件相同,则EB只拉取差异,但是如果您的文件在上次git提交之前,则EB拉取整个文件夹

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

cls
git add .
git commit -a
git aws.push --environment myenvironment
pause
现在,如果您在运行这个.bat文件之前已经提交了,那么您将只上传差异。否则,在上传差异之前,将要求您发送git提交消息

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

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

工作起来很有魅力

编辑:

对于使用新独立eb cli的用户,代码将为:

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

我对此感到困惑,因为Elastic Beanstalk的应用程序版本不允许这么大的捆绑包。对周围的某个地方有一个严格的限制~400MB@Humdinger5Gb在这里是一个真实的值:)它实际上大约是300mb,但我们国家的互联网连接需要大约30分钟才能上传。为什么要投否决票?不管项目的重量是300mb还是5gb,问题都是一样的——如何防止完全回购推送而不是只推送更改?@Kainax I尝试同样的问题,有时git aws.push上传整个300mb(与我的情况相同)有时只是改变。关于媒体文件大小,实际上是动态生成的360度图像,每次3d艺术家改变模型时都在改变,因此它们在开发期间不断变化,每次改变都必须上传,所以目前手动S3 bucked上传对我们来说不是一个解决方案。如果我们找不到解决方案,我想我会通过自动S3上传扩展自定义imgs生成软件。这个答案是错误的,至少在Windows中,git aws.push是使用powershell实现的,它所做的是让用户和url在哪里推送,然后再进行正常的git推送。我认为,因为amazon是分布式的,URL在推送的地方不一样,它不会推送到同一个服务器,需要推送整个repo。你会接受这个信息作为回答吗?@JoseNobile嗨,谢谢你的提示。原因其实很明显,但这个问题的解决方案是什么?问题仍然悬而未决,也许有人知道如何解决它。