Доброе утро всем!
В моей повседневной работе мы используем NGINX+uWSGI+MongoDB в качестве контейнера приложений Python. Для управления версиями и совместной разработки мы используем установку GIT на каждом компьютере разработчика и центральный репозиторий GIT для доставки.
Все идет хорошо и гладко, НО есть одна небольшая проблема.
До сих пор, когда мы хотели выпустить новую версию нашего внутреннего программного обеспечения, все разработчики объединяли свои изменения, а затем выбранный ими (обычно менеджер проекта) отправлял конечный продукт в репозиторий «branch master» на нашем центральном сервере GIT.
После выполнения этой отправки скрипт, который постоянно просматривает GIT, извлекает новую версию и отправляет ее на наш сервер uWSGI, который затем загружает новую версию для всех новых подключений.
Теперь нам интересно, как сделать так, чтобы можно было осуществлять push-уведомления на сервере GIT и чтобы uWSGI напрямую загружал и обслуживал свои веб-приложения с этого сервера GIT.
Есть ли у кого-нибудь подобное решение или конфигурация uWSGI для этого?
решение1
ваш серверный git-репозиторий — это не то, с чем вам следует работать; вы всегда будете зависеть от локального клона репозитория, полученного из этого центрального git-репозитория (на мой взгляд). что можно сделать, чтобы избавиться от уродливых cronjobs: использовать gitпред/после-прием-крючокна вашем git-сервере:
В дополнение к клиентским хукам, вы можете использовать пару важных серверных хуков как системный администратор, чтобы обеспечить практически любую политику для вашего проекта. Эти скрипты запускаются до и после push-уведомлений на сервер. Предварительные хуки могут выйти с ненулевым значением в любое время, чтобы отклонить push-уведомление, а также вывести сообщение об ошибке обратно клиенту; вы можете настроить политику push-уведомлений такой сложности, какой захотите.
также есть информативныйstackoverflow-обсуждение git-post-receive-hook для веб-сайта-staging; особенно проверьте первую ссылку из верхнего ответаgit-веб-сайт-howto
решение2
Приём, который я использую на веб-сайте своей компании (он создан из репозитория GitHub), заключается в добавлении следующих опций в uWSGI:
; reload the server everytime the repository is updated
touch-reload = .git/index
; every minute pull from the repository
cron = -1 -1 -1 -1 -1 git pull