Bereitstellen von Dateien aus GIT mit uWSGI

Bereitstellen von Dateien aus GIT mit uWSGI

Guten Morgen allerseits!

Bei meiner täglichen Arbeit verwenden wir NGINX+uWSGI+MongoDB als Python-Anwendungscontainer. Für die Versionierung und kollaborative Entwicklung verwenden wir eine GIT-Installation auf jedem Entwicklercomputer und ein zentrales GIT-Repository für die Bereitstellung.

Alles läuft gut und reibungslos, ABER es gibt ein kleines Problem.

Wenn wir bisher eine neue Version unserer internen Software ausliefern wollten, führten alle Entwickler ihre Änderungen zusammen und anschließend schob ein ausgewählter Entwickler (normalerweise der Projektmanager) das Endprodukt in das „Branch Master“-Repository auf unserem zentralen GIT-Server.

Sobald dieser Push erfolgt ist, ruft ein Skript, das ständig auf GIT schaut, die neue Version ab und pusht sie auf unseren uWSGI-Server, der dann die neue Version für alle neuen Verbindungen lädt.

Jetzt fragen wir uns, wie wir auf den GIT-Server pushen können und wie uWSGI seine Webanwendungen direkt von diesem GIT-Server lädt und bereitstellt.

Gibt es jemanden, der bereits über eine ähnliche Lösung oder eine uWSGI-Konfiguration hierfür verfügt?

Antwort1

Ihr serverbasiertes Git-Repo ist nichts, womit Sie arbeiten würden; Sie sind immer auf einen lokalen Repo-Klon angewiesen, der von diesem zentralen Git-Repo abgeleitet ist (IMHO). Was Sie tun können, um hässliche Cronjobs loszuwerden: Verwenden Sie GitsPre/Post-Empfangs-Hookauf Ihrem Git-Server:

Zusätzlich zu den clientseitigen Hooks können Sie als Systemadministrator einige wichtige serverseitige Hooks verwenden, um nahezu jede Art von Richtlinie für Ihr Projekt durchzusetzen. Diese Skripte werden vor und nach Pushes an den Server ausgeführt. Die Pre-Hooks können jederzeit mit einem Wert ungleich Null beendet werden, um den Push abzulehnen und eine Fehlermeldung an den Client zurückzugeben. Sie können eine Push-Richtlinie einrichten, die so komplex ist, wie Sie möchten.

gibt es auch eine informativeStackoverflow-Diskussion über Git-Post-Receive-Hook für Website-Staging; schau dir insbesondere den ersten Link der Top-Antwort angit-website-howto

Antwort2

Ein Trick, den ich bei meiner Firmenwebsite verwende (sie wird aus einem GitHub-Repository generiert), besteht darin, diese Optionen zu uWSGI hinzuzufügen:

; 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

verwandte Informationen