Ich habe meine Anwendung (node.js) auf einem VPS (Linux) bereitgestellt. Ich benutze Git Hub als Repository. Wie kann ich die Anwendung automatisch auf Git Push bereitstellen?
Ich habe meine Anwendung (node.js) auf einem VPS (Linux) bereitgestellt. Ich benutze Git Hub als Repository. Wie kann ich die Anwendung automatisch auf Git Push bereitstellen?
Antworten:
Beispiel in PHP:
Navigieren Sie zu Github in Ihr Github-Repository und klicken Sie auf "Admin".
Klicken Sie auf die Registerkarte 'Service Hooks' => 'WebHook-URLs'.
und hinzufügen
http://your-domain-name/git_test.php
dann erstelle git_test.php
<?php
try
{
$payload = json_decode($_REQUEST['payload']);
}
catch(Exception $e)
{
exit(0);
}
//log the request
file_put_contents('logs/github.txt', print_r($payload, TRUE), FILE_APPEND);
if ($payload->ref === 'refs/heads/master')
{
// path to your site deployment script
exec('./build.sh');
}
In der Datei build.sh müssen Sie die üblichen Befehle eingeben, um Ihre Site von github abzurufen
Es gab einige Erwähnungen von Git-Hooks als Antworten / Kommentare, was in der Vergangenheit für mich funktioniert hat. Hier ist mein Rezept, falls jemand anderes mehr Einzelheiten benötigt.
Ich verwende eine Kombination aus dem Git-Post-Receive-Hook und dem Node-Supervisor , um eine einfache automatische Bereitstellung durchzuführen (vorausgesetzt, Sie verwenden ein Git-Remote-Repository auf diesem Computer).
Richten Sie Ihren Post-Receive-Hook ein
In Ihrem Repository: sudo vi hooks/post-receive
Und es sollte ungefähr so aussehen:
#!/bin/sh
GIT_WORK_TREE=/home/path/to/your/www
export GIT_WORK_TREE
git checkout -f
Festlegen von Dateiberechtigungen: chmod +x hooks/post-receive
Git aktualisiert die Dateien in Ihrem App-Verzeichnis nach einem Push zum Repo.
Führen Sie Node mit Node-Supervisor aus
Sie müssen Node-Supervisor als globales Knotenmodul auf Ihrem Computer installieren: sudo npm install supervisor -g
Führen Sie jetzt einfach Ihre Node-App mit Node-Supervisor aus und sie sucht nach Änderungen an Dateien in Ihrem Arbeitsverzeichnis:
supervisor /home/path/to/your/www/server.js
(Notiz supervisor
statt node
).
npm install -l
auf dem Remoteserver ausgeführt wird, ist intelligent. Dies kann natürlich mit Ihrer Methode unter Verwendung von Post-Receive-Hooks gekoppelt werden.
Wahrscheinlich sehr spät, um hier zu antworten. Aber ich habe dieses Projekt auf Github gefunden und scheint das zu tun, was Sie wollen, aber viel sauberer.
https://github.com/logsol/Github-Auto-Deploy
Hör zu. Würde mich auch interessieren, was andere darüber in Bezug auf Kommentare und Upvotes denken.
Prost,
S.
In einem Projekt, das ich gerade entwickle, folge ich den Richtlinien in Jez Humbles brillantem Buch "Continuous Delivery" (lesenswert).
Dies bedeutet, dass eine Bereitstellungspipeline mit einem kontinuierlichen Integrationsserver erstellt wird (ich verwende die kostenlose Community Edition von Go von Thoughtworks ), der dafür verantwortlich ist, Ihren Code zuerst auf Qualität, Komplexität und Ausführen von Komponententests zu überprüfen. Es kann dann einer Bereitstellungspipeline folgen, die zu einem Push auf Ihre Produktionsserver führt.
Das klingt sehr kompliziert, muss es aber nicht sein und macht den gesamten Prozess des Schreibens von Code und den Weg in die Produktion sicher und sorgenfrei (keine beängstigenden Veröffentlichungstage!).
Ich verwende eine vollständige Bereitstellungspipeline für Live-Systeme und eine reduzierte Version für von mir geschriebene npm-Module. Beide verwenden dieselbe 1-Klick-Bereitstellungstechnik.
Ich habe gerade eine knotenbasierte Lösung für Ihr Problem veröffentlicht: Node-CD
Es besteht aus einer einfachen Knoten-App, die auf Ihrem VPS ausgeführt wird und Github-Post-Receive-Hooks empfängt und das gewünschte Skript ausführt (z. B. ein Shell-Skript, das Ihre App beendet, Git Pull ausführt und neu startet).
Hier ist eine weitere einfache Implementierung von nodeJS.
Es ist ein sehr einfacher Knotenserver, der auf einem von Ihnen konfigurierten Hostnamen und Port ausgeführt wird und für die Verarbeitung von GitHub-Post-Receive-Web-Hooks eingerichtet werden kann. Und die eigentlichen Pul / Test / Deployment-Aktionen können angepasst werden, um alles zu tun, was Sie wollen. In der aktuellen Implementierung handelt es sich um einen Shell-Befehl, der im NodeJS-Serverskript inline angegeben wird. Außerdem gibt es ein sehr einfaches Sicherheitsschema auf der Basis von secret_key.
https://github.com/shyam-habarakada/rscds
Auf meinem Staging-Server war bereits ein Knoten installiert und wurde ausgeführt, sodass das Schreiben schnell und einfach war.
Ich fand das Projekt für die einfache Bereitstellung verwendet Git.
Ich denke, es ist der richtige Weg für dich.
Hör zu.
Wenn Sie eine Python / Tornado-basierte Lösung wünschen, habe ich ein Skript geschrieben, um POST-Anforderungen von Githubs Webhook Services zu verarbeiten . Sie finden es unter https://github.com/Akobi/ops/tree/master/autodeploy
Grundsätzlich wird eine JSON-Konfigurationsdatei verwendet, um aufzulisten, von welchen Repos Pushs erwartet werden, welche Befehle Sie bei der Bereitstellung ausführen möchten und in welchem Verzeichnis die Befehle ausgeführt werden müssen. Sie müssten lediglich die Konfigurationsdatei nach Ihren Wünschen ändern und ausführen das Drehbuch!
Außerdem verwende ich Nginx als Reverse-Proxy, um diese POSTs an mein Skript weiterzuleiten. Sie finden die Nginx-Konfiguration im selben Github-Repo im Ordner 'nginx'.
Viel Spaß beim Schieben!
Die PHP-Antwort ist meiner Meinung nach absolut legitim, aber wenn Sie Ruby bevorzugen, habe ich eine Lösung gebloggt. Es ist dasselbe wie die PHP-Antwort, nur in einer anderen Sprache. Sie verwenden einen Web-Hook und lassen ein einfaches Skript auf die relevanten HTTP-Anforderungen warten.
http://gilesbowkett.blogspot.com/2012/06/heroku-style-deployment-on-ec2.html
Ich habe mein eigenes rudimentäres Bereitstellungstool erstellt, das automatisch neue Updates aus dem Repo abruft - https://github.com/jesalg/SlimJim - Grundsätzlich hört es auf den Github-Post-Receive-Hook und verwendet einen Proxy, um einen auszulösen Skript aktualisieren.
Ich bin der Gründer von https://commando.io und kürzlich haben wir eine Integration mit GitHub über einen Dienst angekündigt. Durch die Integration können Sie Ausführungen auf Servern ausführen, wenn Sie auf ein GitHub-Repo pushen. Dies ist eine perfekte Gelegenheit, um Bereitstellungsskripts automatisch auszuführen, wenn Sie Code übertragen.
Eine Ausführung ist ein Skript, das Sie in Commando.io schreiben und das in bash, perl, python, ruby, go oder node.js geschrieben werden kann. Weitere Informationen und ein Beispiel für ein Ausführungsskript zum Ausführen git pull
finden Sie in unserer Blogpost-Ankündigung: http://blog.commando.io/run-executions-via-github-push/
Deepl.io scheint in diesem Bereich ein neuer und vielversprechender Konkurrent zu sein.
Features (von seiner Website übernommen):
Beachten Sie auch, dass es kostenlose / kostengünstige Dienste wie REPOMAN.IO gibt , die fast alles für Sie automatisieren.