Эластичный бобовый стебель "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 очень быстро, не имеет значения, будет ли он выдвигать все или только изменения.