Ho la mia applicazione (node.js) distribuita su un VPS (linux). Sto usando git hub come repository. Come posso distribuire l'applicazione automaticamente, su git push?
Ho la mia applicazione (node.js) distribuita su un VPS (linux). Sto usando git hub come repository. Come posso distribuire l'applicazione automaticamente, su git push?
Risposte:
Esempio in PHP:
Passa a github nel tuo repository github aggiungi fai clic su "Admin"
fare clic sulla scheda "Service Hooks" => "WebHook URL"
e aggiungi
http://your-domain-name/git_test.php
quindi crea 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');
}
Nel build.sh dovrai inserire i normali comandi per recuperare il tuo sito da GitHub
C'erano alcune menzioni di hook Git come risposte / commenti, che ha funzionato per me in passato .. quindi ecco la mia ricetta se qualcun altro richiedesse più specifiche.
Uso una combinazione dell'hook post-ricezione git e del supervisore del nodo per eseguire una semplice distribuzione automatica (supponendo che tu stia utilizzando un repository remoto git su quella macchina).
Imposta il tuo hook post-ricezione
Nel tuo repository: sudo vi hooks/post-receive
E dovrebbe assomigliare a:
#!/bin/sh
GIT_WORK_TREE=/home/path/to/your/www
export GIT_WORK_TREE
git checkout -f
Imposta i permessi dei file: chmod +x hooks/post-receive
Git aggiornerà i file nella directory della tua app dopo un push al repository.
Esegui Node con Node-Supervisor
Dovrai installare Node-Supervisor sulla tua macchina come modulo nodo globale: sudo npm install supervisor -g
Ora esegui semplicemente la tua app node con node-supervisor e controllerà le modifiche ai file nella tua directory di lavoro:
supervisor /home/path/to/your/www/server.js
(nota supervisor
invece di node
).
npm install -l
sul server remoto è intelligente. Questo può ovviamente essere accoppiato con il tuo metodo usando hook post-ricezione.
Probabilmente molto tardi per rispondere qui. Ma ho trovato questo progetto su GitHub e sembra che faccia quello che vuoi, ma in modo molto più pulito.
https://github.com/logsol/Github-Auto-Deploy
Controlla. Sarei anche interessato a sapere cosa ne pensano gli altri in termini di commenti e voti positivi.
Saluti,
S
In un progetto che sto attualmente sviluppando seguo le linee guida trattate nel brillante libro di Jez Humble "Continuous Delivery" (che merita una lettura).
Ciò significa creare una pipeline di distribuzione utilizzando una qualche forma di server di integrazione continua (io uso la community edition gratuita di Thoughtworks di Go ), che è responsabile del primo controllo del codice per la qualità, la complessità e l'esecuzione di unit test. Può quindi seguire una pipeline di distribuzione che si traduce in un push ai server di produzione.
Sembra molto complicato, ma non deve esserlo, e rende l'intero processo di scrittura del codice e il suo passaggio alla produzione sicuro e senza preoccupazioni (nessun giorno di rilascio spaventoso!).
Uso una pipeline di distribuzione completa per i sistemi live e una versione ridotta per i moduli npm che scrivo ed entrambi condividono la stessa tecnica di distribuzione con un clic.
Ho appena pubblicato una soluzione basata sui nodi al tuo problema: node-cd
Consiste in una semplice app di nodo in esecuzione sul tuo VPS che riceverà Github post-ricezione Hooks ed eseguirà uno script che ti piace (ad esempio uno script di shell che ucciderà la tua app, git pull e la riavvierà).
Ecco un'altra semplice implementazione di nodeJS.
È un server nodo molto semplice che viene eseguito su un nome host e una porta configurati e può essere impostato per gestire gli hook Web di ricezione post GitHub. E le effettive azioni pul / test / deploy possono essere personalizzate per fare tutto ciò che vuoi. Nell'attuale implementazione, è un comando shell specificato inline nello script del server nodeJS. E c'è anche uno schema di sicurezza basato su secret_key molto semplice.
https://github.com/shyam-habarakada/rscds
Il mio server di staging aveva già il nodo installato e in esecuzione, quindi scrivere questo è stato semplice e veloce.
Ho scoperto che il progetto per una facile distribuzione utilizza git.
Penso che sia il modo giusto per te.
Controlla.
Se vuoi una soluzione basata su python / tornado, ho scritto uno script per gestire le richieste POST dai servizi Webhook di Github . Puoi trovarlo su https://github.com/Akobi/ops/tree/master/autodeploy
Fondamentalmente utilizza un file di configurazione JSON per elencare da quali repository ti aspetti push, quali comandi vuoi eseguire durante il deploy e in quale directory devono essere eseguiti i comandi. Tutto quello che dovresti fare è modificare il file di configurazione a tuo piacimento ed eseguire il copione!
Inoltre, utilizzo Nginx come proxy inverso per inoltrare questi POST al mio script. Puoi trovare la configurazione di Nginx nello stesso repository Github nella cartella "nginx".
Buona spinta!
la risposta PHP è del tutto legittima secondo me, ma se preferisci Ruby, ho scritto una soluzione sul blog. è la stessa cosa della risposta PHP, solo in una lingua diversa. usi un web hook e hai un semplice script che ascolta le richieste HTTP pertinenti.
http://gilesbowkett.blogspot.com/2012/06/heroku-style-deployment-on-ec2.html
Ho creato il mio strumento di distribuzione rudimentale che estrae automaticamente nuovi aggiornamenti dal repository - https://github.com/jesalg/SlimJim - Fondamentalmente ascolta il hook post-ricezione di github e utilizza un proxy per attivare un script di aggiornamento.
Sono il fondatore di https://commando.io e recentemente abbiamo annunciato un'integrazione con GitHub tramite un servizio. L'integrazione consente di eseguire esecuzioni sui server quando si invia a un repository GitHub. Questa è un'opportunità perfetta per eseguire automaticamente gli script di distribuzione quando esegui il push del codice.
Un'esecuzione è uno script che scrivi all'interno di Commando.io che può essere scritto in bash, perl, python, ruby, go o node.js. Per saperne di più e vedere un esempio di script di esecuzione dell'esecuzione git pull
, vedere l'annuncio del nostro post sul blog: http://blog.commando.io/run-executions-via-github-push/
Deepl.io sembra essere un nuovo e promettente concorrente in questo spazio.
Caratteristiche (prese dal suo sito web):
Nota anche che ci sono servizi gratuiti / poco costosi come REPOMAN.IO che automatizzano quasi tutto questo per te.