4

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

谢谢你的帮助。

4

3 回答 3

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 非常快,无论是推送所有内容还是只推送更改。

于 2015-04-13T02:50:16.543 回答
2

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

于 2014-11-16T09:22:25.320 回答
2

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

问题是在

aws.push

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

为避免出现问题,我为尝试在 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 并运行 deploy.bat再次归档。

奇迹般有效!

编辑:

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

cls
git add .
git commit -a
eb deploy your_environment_name
pause
于 2015-07-11T19:42:50.930 回答