Приложение Elastic beanstalk rails с git source и развертыванием hooks

4367
Divya Bhargov

Я хочу настроить Elastic Beanstalk для моего существующего приложения rails.

Мне удалось создать пример приложения foo.

Вот такие у меня вопросы

Мне нужно, чтобы развертывание происходило из моего репозитория git, а не с моего локального пути, где я развертываюсь. Как мне сделать это для примера приложения Foo.

Команда git aws.push, похоже, развернута на новом экземпляре ec2. Однако, это не повлияло на изменения в моем git-репозитории. Должен ли я сделать git push отдельно перед выполнением git aws.push? Обратите внимание, что моя ветвь впереди на 1 коммит, когда я делаю git-статус. Поддерживает ли aws отдельный репозиторий git? Как я могу заставить его использовать вместо этого мой репозиторий git?

[mymac:~/Projects/new/foo(master)]$ git aws.push Counting objects: 4949, done. Delta compression using up to 4 threads. Compressing objects: 100% (1115/1115), done. Writing objects: 100% (4949/4949), 14.11 MiB | 1.90 MiB/s, done. Total 4949 (delta 3800), reused 4944 (delta 3798) remote:  To https://AKIAJZT3WFY2WLO6CHQQ:20121127T030627Zf56675b2f4c9c731ca6f51b11d36a438e8bcee25c5171061ce5ac681495318c9@git.elasticbeanstalk.ap-southeast-1.amazonaws.com/v1/repos/617069/commitid/39396162666436346439656465313537613561343561626465643931393366623762386265303138/environment/6170692d656e76 * [new branch] HEAD -> master   [mymac:~/Projects/new/foo(master)]$ git status # On branch master # Your branch is ahead of 'origin/master' by 1 commit. # nothing to commit (working directory clean) 

Ниже приведен результат только git push.

[mymac:~/Projects/new/foo(master)]$ git push Counting objects: 5, done. Delta compression using up to 4 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 340 bytes, done. Total 3 (delta 2), reused 0 (delta 0) To git@github.com:xxxx/foo.git 885cc33..99abfd6 master -> master 

Отдельно мне нужно иметь ловушку развертывания before_symlink. Как я могу это сделать ?

3

2 ответа на вопрос

5
rhetonik

Из вашего вопроса не было ясно, если вы уже попробовали git aws.pushвариант. Вы можете отослать сообщение в блоге AWSBlog о развертывании приложений на основе стойки в AWS Elastic Beanstalk. Подводя итог, вы можете сделать это в следующие простые шаги:

  1. eb init
  2. eb start
  3. git aws.push

Это, конечно, требует загрузки инструментов командной строки AWS Elastic Beanstalk.

К слову, AWS Elastic Beanstalk еще не имеет интеграции с ловушками развертывания Git, но это довольно просто, если вы уже используете CI Server, такой как Jenkins. Github может очень хорошо интегрироваться с большинством серверов CI. Вы можете добиться git pushзапуска git aws.pushс вашего CI-сервера, добавив новое задание Jenkins с помощью пользовательских команд оболочки. Вы также можете выполнить тестовый жгут перед тем, как выложить новую сборку. Jenkins или Travis CI сделают всю работу за вас!

Что касается выполнения before_symlinkзадач типа, то способ работы AWS Elastic Beanstalk отличается от традиционного развертывания Capistrano. Он объединяет весь ваш код в исполняемый архив и просто копирует его на узлы с балансировкой нагрузки. Для выполнения before_symlinkподобных задач вы можете написать несколько пользовательских файлов конфигурации и поместить их .ebextensionsв корневой каталог вашего Git-репозитория. Я сделал это, добавив .ebextensions/symlink.configфайл. Вот пример кода для символической ссылки вашего database.ymlфайла на сервере.

container_commands: symlink-db: command: ln -sf /var/app/shared/database.yml $EB_CONFIG_APP_ONDECK/config/database.yml 

Обратите внимание, что я запускаю пользовательский AMI с /var/app/shared/каталогом, который, в противном случае, отсутствует при запуске ванильного контейнера Ruby. Кроме того, $EB_CONFIG_APP_ONDECKпеременная окружения содержит текущее имя каталога развертывания (обычно /var/app/ondeck), которое перемещается /var/app/currentпосле завершения развертывания и до перезапуска сервера Rails (Passenger), что делает его доступным для обслуживания запросов. Узнайте больше о настройке контейнеров AWS Elastic Beanstalk .

Надеюсь это поможет.

Привет, я отредактировал мой вопрос относительно git aws.push. Не могли бы вы взглянуть на это и сказать мне Divya Bhargov 11 лет назад 0
Я не уверен, что это лучший способ, но я всегда делал `git push ', за которым следовал' git aws.push`. Поскольку моя среда была настроена с помощью Jenkins CI, на моей машине разработки происходило `git push ', а с сервера CI -` git aws.push`. rhetonik 11 лет назад 0
Что касается расширений ... Есть ли способ отладить, почему моя команда не выполняется. Я пробовал символическую ссылку для database.yml, которую вы дали ... по какой-то причине символическая ссылка не была создана. Любые рекомендации по отладке были бы полезны. Я попытался запустить команду после развертывания, заменив $ EB_CONFIG_APP_ONDECK на / var / app / current и команда как таковая сработала. Divya Bhargov 11 лет назад 0
Я не знаю какой-либо техники отладки на данный момент. Я даже пытался найти некоторые из них, но не смог найти стандартных рекомендаций для этого. Насчет символической ссылки, просто подтверждаю, у вас есть каталог `/ var / app / shared` на экземпляре? Ручная символическая ссылка всегда будет работать. Вы проверяли значение переменной окружения `EB_CONFIG_APP_ONDECK`? Можете ли вы вставить вывод `echo $ EB_CONFIG_APP_ONDECK`? rhetonik 11 лет назад 0
Эй, сейчас все хорошо. У меня было еще одно уточнение. Я хочу запустить процесс только после того, как папка EB_CONFIG_APP_ONDECK была перемещена в текущую папку. Таким образом, это в основном процесс после развертывания. Как бы я это сделал? Наличие ebextensions делает все до того, как EB_CONFIG_APP_DECK будет переведен в текущий Divya Bhargov 11 лет назад 0
Не уверен насчет этого, но я думаю, что это можно сделать с помощью сервисов. http://docs.amazonwebservices.com/elasticbeanstalk/latest/dg/customize-containers.html#customize-containers-format-services rhetonik 11 лет назад 0
0
Oskar

Мне удалось интегрировать тестовые сборки Travis CI с развертываниями Amazon Beanstalk. Для этого мне пришлось автоматизировать инструменты eb, потому что текущая версия 2.5.1 работает только в интерактивном режиме, поэтому я отредактировал код инструментов EB в некоторых файлах python, а затем создал файл .travis.yml с соответствующими инструкциями для разверните приложение в AWS Beanstalk.

Вот ссылка на мой блог, который дает полное описание процесса:

http://www.sysadminops.com/amazon-beanstalk-and-travis-ci-integration/

Добро пожаловать в Superuser. Я умоляю вас не позволить рекламе вашего блога быть вашим единственным вкладом в этот сайт, каким бы ценным оно ни было. Mokubai 10 лет назад 2
Просто хедз-ап, ваша ссылка в конечном итоге приведет вас к спам-сайту. ПРЕДУПРЕЖДЕНИЕ любому, кто собирается щелкнуть по нему :) Andrew K 8 лет назад 1

Похожие вопросы