2014-11-15 2 views
3

Мы храним наш PHP-проект на github.Эластичный бобовый стебель «git aws.push» только отличился?

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

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

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

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

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

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

+0

Я запутался это потому, что версия приложения Elastic Beanstalk не допускает расслоения, что большое , Существует жесткий предел где-то около ~ 400MB –

+0

@ Humdinger 5Gb - это реальное значение здесь :), это на самом деле около 300 Мб, но все же, с нашим интернет-соединением в нашей стране требуется около 30 минут, чтобы загрузить это. – Kainax

+0

Почему downvote? Не имеет значения, насколько вес проекта 300mb или 5gb, вопрос один и тот же. Как предотвратить полный отказ репо вместо того, чтобы нажимать только изменения? – Kainax

ответ

2

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

Проблема заключается в том, что на

aws.push 

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

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

Работает как очарование!

Edit:

Для тех, кто использует новый автономный Е.Б. CLI, код будет:

cls 
git add . 
git commit -a 
eb deploy your_environmant_name 
pause 
2

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

+0

Спасибо за ссылку, я проголосую за это. Что касается «git aws.push» - это (на самом деле) не всегда действует так, в моем случае, полный контент толчок происходит только в ~ 10% от толчков. Все остальные 9/10 толкают рабочую решетку (только сдвиги git сдвинуты). – Kainax

+0

Что касается размера файлов мультимедиа - это фактически динамически генерируемые 360-градусные изображения, которые меняются каждый раз, когда 3D-художники меняют модели, поэтому они постоянно меняются во время разработки и должны быть загружены при каждом изменении, поэтому в настоящее время ручная загрузка S3 без загрузки решение для нас. Если мы не найдем решение, я думаю, что я буду распространять специальное программное обеспечение imgs-поколения с автоматической загрузкой S3. – Kainax

+0

Этот ответ неверен, по крайней мере, в Windows, git aws.push реализуется с помощью powershell, и это то, что делает пользователь и URL-адрес, куда нажать, и после того, как он делает обычный git-push. Я думаю, потому что amazon распределен, и URL-адрес не то же самое, когда push, он не нажимает на тот же сервер и не требует нажатия всего репо. Вы приняли бы эту информацию в качестве ответа? –

2

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

Я установил учетную запись 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-сервер.

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

Смежные вопросы