Elastic Beanstalk“git aws.push”只提出差异?

时间:2014-11-15 02:15:34

标签: git amazon-web-services elastic-beanstalk aws-cli ebcli

我们将我们的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存储库中提取最后一次提交?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

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

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

通过这种方式,从EC2服务器到Elastic Beanstalk服务器的git aws.push非常快,无论是推送所有内容还是仅推送更改都无关紧要。

答案 2 :(得分:2)

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

问题在于

aws.push

命令Elastic Beanstalk正在检查您当前的文件是否已提交给git,或者它们是否位于存储库之前。如果你的文件与上一个git提交相同,那么EB只会带来差异,但如果你的文件超过最后一个git commit ,则,然后拉出整个文件夹!< / p>

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

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

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

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

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

像魅力一样!

编辑:

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

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