我们将我们的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存储库中提取最后一次提交?
感谢您的帮助。
答案 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文件: 现在,如果你在运行这个.bat文件之前已经提交了,那么你只会上传差异。否则,在上传差异之前,系统会要求您提供git commit消息。 PS - 请注意,如果您尝试再次推送已经在EB上的版本,它还会尝试上传整个文件夹。cls
git add .
git commit -a
git aws.push --environment myenvironment
pause
像魅力一样!
编辑:
对于使用新的独立eb cli的用户,代码为:
cls
git add .
git commit -a
eb deploy your_environment_name
pause