Mam swoją aplikację (node.js) wdrożoną na VPS (linux). Używam centrum git jako repozytorium. Jak mogę automatycznie wdrożyć aplikację za pomocą git push?
Mam swoją aplikację (node.js) wdrożoną na VPS (linux). Używam centrum git jako repozytorium. Jak mogę automatycznie wdrożyć aplikację za pomocą git push?
Odpowiedzi:
Przykład w PHP:
Przejdź do github do swojego repozytorium github dodaj kliknij „Administrator”
kliknij zakładkę „Service Hooks” => „WebHook URLs”
i dodaj
http://your-domain-name/git_test.php
następnie utwórz 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');
}
W pliku build.sh musisz umieścić zwykłe polecenia, aby pobrać witrynę z github
Było kilka wzmianek o hakach Gita jako odpowiedziach / komentarzach, które działały dla mnie w przeszłości ... więc oto mój przepis, gdyby ktoś inny wymagał więcej szczegółów.
Używam kombinacji haka po odbiorze git i nadzorcy węzła, aby wykonać proste automatyczne wdrażanie (zakładając, że używasz zdalnego repozytorium git na tej maszynie).
Skonfiguruj swój hak po odbiorze
W Twoim repozytorium: sudo vi hooks/post-receive
Powinien wyglądać mniej więcej tak:
#!/bin/sh
GIT_WORK_TREE=/home/path/to/your/www
export GIT_WORK_TREE
git checkout -f
Ustaw uprawnienia do plików: chmod +x hooks/post-receive
Git odświeży pliki w katalogu aplikacji po wypchnięciu do repozytorium.
Uruchom Node z Node-Supervisor
Musisz zainstalować Node-Supervisor na swojej maszynie jako globalny moduł węzłowy: sudo npm install supervisor -g
Teraz po prostu uruchom aplikację node z node-supervisor i będzie obserwować zmiany w plikach w twoim katalogu roboczym:
supervisor /home/path/to/your/www/server.js
(uwaga supervisor
zamiast node
).
npm install -l
na zdalnym serwerze, jest inteligentna. Można to oczywiście połączyć z metodą za pomocą haków po odbiorze.
Prawdopodobnie bardzo późno na odpowiedź tutaj. Ale znalazłem ten projekt na githubie i wydaje się, że robi to, co chcesz, ale w znacznie czystszy sposób.
https://github.com/logsol/Github-Auto-Deploy
Sprawdź to. Chciałbym również wiedzieć, co myślą o tym inni w kontekście komentarzy i głosów za.
Pozdrawiam,
S.
W projekcie, który obecnie rozwijam, postępuję zgodnie z wytycznymi zawartymi w genialnej książce Jez Humble „Continuous Delivery” (warta przeczytania).
Oznacza to utworzenie potoku wdrożeniowego przy użyciu jakiejś formy serwera ciągłej integracji (używam bezpłatnej wersji społecznościowej Go Thoughtworks ), który jest odpowiedzialny za najpierw sprawdzenie kodu pod kątem jakości, złożoności i przeprowadzania testów jednostkowych. Następnie może postępować zgodnie z potokiem wdrażania, co skutkuje wypychaniem na serwery produkcyjne.
Brzmi to bardzo skomplikowanie, ale nie musi tak być i sprawia, że cały proces pisania kodu sprawia, że jego droga do produkcji jest bezpieczna i bezproblemowa (bez strasznych dni wydania!).
Używam pełnego potoku wdrażania dla systemów na żywo i okrojonej wersji dla modułów npm, które piszę, i oba mają tę samą technikę wdrażania jednym kliknięciem.
Właśnie opublikowałem rozwiązanie twojego problemu oparte na węzłach : node-cd
Składa się z prostej aplikacji węzła działającej na Twoim VPS, która otrzyma Hooki po odbiorze Github i uruchomi skrypt, który lubisz (na przykład skrypt powłoki, który zabije twoją aplikację, git pull i uruchomi ją ponownie).
Oto kolejna prosta implementacja nodeJS.
Jest to bardzo prosty serwer węzłowy, który działa na skonfigurowanej nazwie hosta i porcie i może być skonfigurowany do obsługi przechwytywania poczty internetowej w serwisie GitHub. A rzeczywiste akcje pul / test / wdrażania można dostosować do dowolnych potrzeb. W obecnej implementacji jest to komenda powłoki określona bezpośrednio w skrypcie serwera nodeJS. Istnieje również bardzo prosty schemat zabezpieczeń oparty na kluczu tajnym.
https://github.com/shyam-habarakada/rscds
Mój serwer pomostowy miał już zainstalowany i uruchomiony węzeł, więc napisanie tego było szybkie i łatwe.
Znalazłem projekt do łatwego wdrażania używa git.
Myślę, że to właściwy sposób dla ciebie.
Sprawdź to.
Jeśli potrzebujesz rozwiązania opartego na Pythonie / tornado, napisałem skrypt do obsługi żądań POST z usług Webhook na Github . Możesz go znaleźć pod adresem https://github.com/Akobi/ops/tree/master/autodeploy
Zasadniczo używa pliku konfiguracyjnego JSON, aby wyświetlić listę repozytoriów, z których oczekujesz wypychania, które polecenia chcesz uruchomić podczas wdrażania i w jakim katalogu muszą one działać. Wszystko, co musisz zrobić, to zmodyfikować plik konfiguracyjny zgodnie z własnymi upodobaniami i uruchomić scenariusz!
Ponadto używam Nginx jako zwrotnego serwera proxy do przekazywania tych POST do mojego skryptu. Konfigurację Nginx można znaleźć w tym samym repozytorium Github w folderze „nginx”.
Miłego pchania!
odpowiedź PHP jest moim zdaniem całkowicie uzasadniona, ale jeśli wolisz Rubiego, zamieściłem rozwiązanie na blogu. to to samo, co odpowiedź PHP, tylko w innym języku. używasz haka WWW i masz prosty skrypt nasłuchujący odpowiednich żądań HTTP.
http://gilesbowkett.blogspot.com/2012/06/heroku-style-deployment-on-ec2.html
Stworzyłem własne podstawowe narzędzie do wdrażania, które automatycznie pobiera nowe aktualizacje z repozytorium - https://github.com/jesalg/SlimJim - Zasadniczo nasłuchuje haka po odbiorze github i używa proxy do wyzwalania zaktualizuj skrypt.
Jestem założycielem https://commando.io, a niedawno ogłosiliśmy integrację z GitHub za pośrednictwem usługi. Integracja umożliwia uruchamianie uruchomień na serwerach podczas wypychania do repozytorium GitHub. Jest to doskonała okazja do automatycznego uruchamiania skryptów wdrażania podczas wypychania kodu.
Wykonanie to skrypt, który piszesz w Commando.io, który można napisać w bash, perl, python, ruby, go lub node.js. Aby dowiedzieć się więcej i zobaczyć przykładowy skrypt uruchomienia git pull
, zobacz nasze ogłoszenie na blogu: http://blog.commando.io/run-executions-via-github-push/
Deepl.io wydaje się być nowym i obiecującym kandydatem w tej przestrzeni.
Funkcje (pobrane z jego strony internetowej):
Zwróć również uwagę, że istnieją bezpłatne / niedrogie usługi, takie jak REPOMAN.IO, które automatyzują prawie wszystko za Ciebie.