Эластичный бобовый стебель "git aws.push" только совершил разницу?

Мы храним наш PHP-проект на github.

Для быстрого развертывания мы используем файл.bat для изменений в облаке AWS Elastic Beanstalk:

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

Мы делаем коммит каждый раз перед push, и он работает просто идеально, как и ожидалось.

К сожалению, по какой-то причине, иногда это происходит очень быстро (просто увеличивая разницу в изменениях PHP-кода), но иногда он отправляет весь 300-мегабайтный проект (со всеми медиафайлами).

Есть ли способ сделать git push только изменив различие? Может быть, есть какие-то дополнительные параметры для команд push или подготовки git перед отправкой? Или, может быть, есть какой-то способ сообщить AWS EB, что он извлекает последний коммит из репозитория github?

Спасибо за любую помощь.

3 ответа

Решение

Хорошо, после нескольких месяцев неприятностей я решил причину проблемы.

Проблема в том, что на

aws.push

Команда Elastic Beanstalk проверяет, зафиксированы ли ваши текущие файлы в git или они находятся перед хранилищем. Если ваши файлы идентичны последнему git-коммиту, то EB извлекает только разницу, но если ваши файлы опережают последний git-коммит, то он тянет всю папку!

Чтобы избежать проблемы, я создал файл 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

Когда вы выпускаете git aws.push весь ваш git-репозиторий заархивирован и загружен в Elastic Beanstalk, отсюда и длительное время отправки. Вот как эта команда реализована. Там хорошая дискуссия и просьба об изменении в этой теме.
Я не уверен, какие файлы так много весят в вашем коде, но в целом лучше не хранить их в git приложения.
Если это медиа-файлы, сохраните их на S3 (или в любом другом доступном для Интернета месте). Если большинство файлов являются внешними библиотеками в вашем git, вы можете предварительно установить их с помощью сценария предварительной установки EB.

Я реализовал обходной путь, потому что это ошибка Amazon.

Я установил учетную запись git на сервере (я использовал Gitlab, бесплатные частные репозитории и неограниченное количество соавторов), вы можете использовать любую, какую захотите (github, gitlab, ваш сервер).

Процесс между вами и git-сервером надежен, вы всегда вносите изменения, всегда. На сервере EC2 я устанавливаю репозиторий git (вы можете использовать файл конфигурации.ebextensions/*. Config или делать вручную, я рекомендую вручную не устанавливать его во всех ваших экземплярах), который подключен к моему серверу git и с сервера EC2 выполнить git pull и git aws.push.

Например, вы можете настроить веб-хук для уведомления, когда вы делаете git push, а затем автоматически выполнять git pull и git aws.push. в моем случае я предпочитаю принимать решение при развертывании с использованием SSH, и это не всегда происходит, когда я отправляю коммиты на мой git-сервер.

Таким образом, сделать git aws.push с сервера EC2 на сервер Elastic Beanstalk очень быстро, не имеет значения, будет ли он выдвигать все или только изменения.

Другие вопросы по тегам