2013-02-27 3 views
1

У меня есть репозиторий git, содержащий простое веб-приложение. Веб-приложение запускается как типичное приложение Scala (я использую нефильтрованное, чтобы быть конкретным). Другими словами, я могу запустить веб-приложение на производстве с помощью «sbt start».Автоматическое развертывание сайта с Git и Sbt

Я хотел бы иметь более простой способ развертывания обновлений для веб-приложения. Я создаю сборку, копируя ее на сервер, вручную останавливая старый сервер и запуская новый экземпляр сервера.

Мое мышление состоит в том, чтобы иметь новый удаленный репозиторий web, который толкает непосредственно на производственный сервер. Затем я могу добавить крюк post-receive в репозиторий git, который убивает старый сервер и запускает новый.

Является ли это разумной настройкой для автоматического развертывания? Есть ли какие-либо инструменты, которые помогут сделать это с помощью sbt и git?

ответ

1

Да, ваше решение подходит для простых случаев. Но он плохо масштабируется, потому что, когда ваше программное обеспечение становится более сложным, вам нужно сменить крючки на императив.

Взгляните на один из Continuous Integration servers (Jenkins или Travis - хорошие моменты для начала). Использование CI-серверов позволяет использовать декларативный подход, когда вы просто укажете нужные результаты. Сервер CI позаботится о большинстве ваших задач: извлечение последнего кода из репо, его создание, тестирование, упаковка, развертывание, отправка электронной почты. Кроме того, это будет полезно при работе с командой в параллельных филиалах. Подведение итогов: CI обеспечивает масштабируемость для вашего процесса сборки, когда возрастающая сложность вашей кодовой базы не мешает вам развертывать.

0

https://rubygems.org/gems/git-runner

Это рубин драгоценный камень (вам не нужно использовать Ruby, в вашем приложении, чтобы использовать это) для выполнения задач, после того, как толчками в репозиторий Git. Затем вы можете написать свои собственные классы для выполнения задач развертывания, которые вам нужны (или посмотреть на использование/изменение существующего git-runner-deploy gem). Это может поместиться в ваш счет, хотя, возможно, вы почувствуете себя счастливее, если будете использовать рубин где-нибудь в своем процессе?

1

Обычно я использую PHP-приложения с помощью Git-перехватчиков. Основная идея заключается в том, что из post-update hook выполняется обновление второго (не голого) репозитория и проверка новой версии. После этого обновите базу данных обновлений и отправьте мне электронное письмо.

Вы можете использовать этот подход с минимальными изменениями. Клонирование вашего репо для создания области на веб-сервере и создание сценария, который будет:

  1. cd во второй репозиторий.
  2. Сбросить переменную окружения GIT_DIR (в ней указано, где находится исходный репозиторий, но вы не хотите использовать его сейчас).
  3. Извлечь изменения из источника репозитория (git fetch origin).
  4. Оформить заказ (git checkout --force master && git reset --hard или что-то в этом роде, просто чтобы убедиться, что он всегда будет успешным).
  5. Создайте приложение и разверните его.

Затем запустите этот скрипт из post-update hook в репо. Здесь ничего сложного.

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