LINUX.ORG.RU

[Полет мысли][Костыль] Maven, jetty:run, git pull


0

1

Есть полу-продакшн проект. Тоесть он должен хорошо работать, но делается на энтузиазме ну и от фейла никто не пострадает. Полет мысли (незнание как обычно это делают) привел меня к одному интересному решению.

При запуске mvn jetty:run естественно собирается проект и запускается во встроеном сервере. Все работает, собсно так и делаем в девелопменте. А что если на продакшн сервере присобачить к этому еще git pull и в качестве переменной передать необходимый коммит, который будет использован в качестве рабочего. И запускать продакшн сервер комадной типо

mvn jetty:run -Dour.project.commit=123456

Казалось бы удобнейшее решение. На сервере можно запросто выполнить такую комаду и ВСЕ, пускай работает. Никакой возни вообще ни с чем, никаких копирований файликов, вообще ничего кроме установки номера версии. Да хоть веб интерфейс к этому написать за полчасика.

Попахивает костыльностью что встроенный в мавен контейнер - не по джедайски совсем. Хотя отличий его работы кроме унаследованных переменных окружения не нашел.

Вот вопросы: Где костыли? Какие потенциальные проблемы? Как обычно достигают похожих результатов?

★★★★★
Ответ на: комментарий от tailgunner

Не распарсил. Вы имеете ввиду что просто попробовать? Ну это я всегда могу, должно работать, просто может есть out-of-the-box best practice

vertexua ★★★★★
() автор топика

Как обычно достигают похожих результатов?

В CI системе напротив зелёного билда делается кнопочка деплой.

baverman ★★★
()
Ответ на: комментарий от vertexua

> Не распарсил.

Вполне очевидными недостатками являются: 1) наличие git на сервере; 2) наличие репозитория исходников там же; 3) возможность поставить в работу кривую версию; 4) замена git'ом родной системы деплоя (хз, что там у Явы выполняет эту роль). Если тебя всё это не смущает - вперед, на мины.

tailgunner ★★★★★
()
Ответ на: комментарий от baverman

Согласен, предложение принимается как правильное, на работе так и есть. Я наверное задал вопрос неправильно. В этом проекте нет СІ. Мы его для факультета пилим вдвоем (чтобы статус проекта стал очевиден), хотелось бы обойтись мавеном. Вообще вопрос наверное болше о том, хорошо ли держать продакшн сервер в виде встроенного Jetty в мавен. Прямо несет от этого костылм.

vertexua ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

1) А что не так?

2) Дык ну реп удаленный, а кому мешает локальная версия репа для гита. Страшно что хацкеры сорцы потырят? ) Ну-ну.

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

4) Ну деплой есть у каждого сервера свой, но он обычно просит варник. Сдесь деплой произвоидт мавен в тот сервер, который сам запустил.

vertexua ★★★★★
() автор топика
Ответ на: комментарий от vertexua

> 1) А что не так?

Мне безразлично, нарвешься ли ты на проблемы, и я не собираюсь защищать какую-то точку зрения.

tailgunner ★★★★★
()
Ответ на: комментарий от vertexua

Вообще вопрос наверное болше о том, хорошо ли держать продакшн сервер в виде встроенного Jetty в мавен. Прямо несет от этого костылм.

Можешь взять отдельный jetty runner. Я, например, писал свой для быстрого деплоя веб-сервисов. Но есть и готовые, например http://blogs.webtide.com/janb/entry/jetty_runner.

А вообще, если тебя не напрягает деплой через гит, то старт контейнера мавеном эту вообще пустяки.

baverman ★★★
()
Ответ на: комментарий от tailgunner

Как будто мы тут срач устраиваем) Просто интерестно что может пойти не так

vertexua ★★★★★
() автор топика
Ответ на: комментарий от baverman

Ну он ведь сорцы будет свежие качать сразу, билдить на месте и сразу запуск. Все в одном, не выходя из мавена. Это маленькая часть СІ на коленке. CI же тоже так делает

vertexua ★★★★★
() автор топика
Ответ на: комментарий от vertexua

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

baverman ★★★
()
Ответ на: комментарий от baverman

А в чем проблема? Оно не обновится пока номер коммита не поменяем. А когда поменяем и перезапустим - обновится

vertexua ★★★★★
() автор топика
Ответ на: комментарий от qnikst

Вообще нет, не подумал. Но это решаемо. Погуглю

vertexua ★★★★★
() автор топика

Вы ничем не обезопасили себя от попадания неправильного номера коммита. Ну и никто не гарантирует, что то, что собирается у вас локально, соберется так же и на продакшне. Если проект в стиле «пусть работает как нибудь», то сойдет. А вообще по-правильному так:

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

Мавеном собираете релизную jar-ку/war-ку

Эту сборку тестируете. Желательно другим человеком и в другом окружении. К сборке прилагаете скрипты миграции БД.

Протестированную сборку выкатываете в продакшн, пердварительно накатив скрипты на БД. Вот на этом самом этапе нужно организовать все очень тщательно. Например так, что бы человек выкатывающий релиз не имел доступа под своим аккаунтом к исходникам, а имел доступ только к протестированным сборкам.

dizza ★★★★★
()
Ответ на: комментарий от dizza

Не тот статус у проекта чтобы так заморачиваться. Зато в нем могут просить быстрые фиксы. Потому удобнее one command checkout-build-redeploy

vertexua ★★★★★
() автор топика
Ответ на: комментарий от vertexua

у нас сделано полуручками, т.е. коммитящий делает апдейты по определенным правилам, а дальше автоматика.

Имхо, поддержка db это самый сложный из элементов управления выкладыванием web приложения.

qnikst ★★★★★
()
Ответ на: комментарий от vertexua

>В этом проекте нет СІ.

При запуске mvn jetty:run естественно собирается проект

если мавеном происходит полная сборка проекта, то у вас таки есть CI ;)

Вообще вопрос наверное болше о том, хорошо ли держать продакшн сервер в виде встроенного Jetty в мавен.

разумеется, плохо, Вы и сами это понимаете.

JFreeM ★★★☆
()
Ответ на: комментарий от JFreeM

разумеется, плохо, Вы и сами это понимаете.

А что плохого-то? Ну вообще конечно запускать чекаут это само по себе плохо, но чем именно плох встроенный джетти?

dizza ★★★★★
()
Ответ на: комментарий от stevejobs

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

JFreeM ★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.