Come posso distribuire automaticamente la mia app dopo un git push (GitHub e node.js)?

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?

Esempio in PHP:

Passare a github nel repository github aggiungere clic “Admin”

fare clic sulla scheda “Service Hooks” => “WebHook URL”

e aggiungi

http://your-domain-name/git_test.php 

quindi crea git_test.php

 ref === 'refs/heads/master') { // path to your site deployment script exec('./build.sh'); } 

Nel build.sh dovrai mettere i soliti comandi per recuperare il tuo sito da github

C’erano alcune menzioni di ganci Git come risposte / commenti, che ha funzionato per me in passato .. quindi ecco la mia ricetta se qualcun altro ha bisogno di più specifiche.

Uso una combinazione di git post-ricezione hook e node-supervisor per realizzare 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 qualcosa:

 #!/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 dell’app dopo un push al repository.


Esegui nodo con Node-Supervisor

Avrai bisogno di installare Node-Supervisor sulla tua macchina come un modulo di nodo globale: sudo npm install supervisor -g

Ora esegui semplicemente l’app del nodo con il supervisore del nodo e controllerà le modifiche ai file nella directory di lavoro:

supervisor /home/path/to/your/www/server.js (nota supervisor anziché node ).

Probabilmente è molto tardi per rispondere qui. Ma ho trovato questo progetto su Github e sembra fare ciò che vuoi fare, ma in un modo molto più pulito.

https://github.com/logsol/Github-Auto-Deploy

Controlla. Sarebbe anche interessato a sapere cosa ne pensano gli altri in termini di commenti e upvotes.

Saluti,
S

In un progetto che sto attualmente sviluppando seguo le linee guida trattate nel brillante libro di Jez Humble “Continuous Delivery” (vale la pena leggerlo).

Ciò significa creare una pipeline di distribuzione utilizzando una qualche forma di server di integrazione continua (io uso la versione gratuita della comunità di ThoughtWorks di Go ), che è responsabile della prima verifica del codice per qualità, complessità e test delle unità in esecuzione. Può quindi seguire una pipeline di distribuzione con conseguente invio ai server di produzione.

Sembra molto complicato, ma non deve esserlo, e rende l’intero processo di scrittura del codice e rende la produzione sicura e senza preoccupazioni (nessun giorno di rilascio spaventoso!).

Io 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 a 1 clic.

Ho appena pubblicato una soluzione basata su nodes per il tuo problema: node-cd

Consiste in una semplice app nodo in esecuzione sul tuo VPS che riceverà Github post-receive Hooks ed eseguirà uno script che ti piace (ad esempio uno script di shell che ucciderà la tua app, git pull e lo riavvierà).

Ecco un’altra semplice implementazione di nodeJS.

È un server di nodo molto semplice che gira su un nome host e una porta configurati e può essere configurato per gestire i ganci Web di ricezione di GitHub. E le azioni pul / test / deploy effettive 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à installato e funzionante il nodo, quindi scrivere questo era facile e veloce.

Ho trovato che il progetto per una facile implementazione utilizza git.

git-play

Penso che sia il modo giusto per te.

Controlla.

È ansible utilizzare https://github.com/adnanh/webhook

Dai un’occhiata al wiki per una descrizione dettagliata sulla creazione degli hook 🙂

Se si desidera 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 usa un file di configurazione JSON per elencare quali repos ti aspetti di spingere, quali comandi vuoi eseguire sulla distribuzione e 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, io uso Nginx come proxy inverso per inoltrare questi POST al mio script. Puoi trovare la configurazione di Nginx nello stesso repository di Github sotto la cartella ‘nginx’.

Spinta felice!

la risposta PHP è del tutto legittima secondo me, ma se preferisci Ruby, ho scritto una soluzione. è la stessa cosa della risposta PHP, solo in una lingua diversa. usi un web hook e hai un semplice script per ascoltare le richieste HTTP rilevanti.

http://gilesbowkett.blogspot.com/2012/06/heroku-style-deployment-on-ec2.html

Ho creato il mio strumento di implementazione rudimentale che automaticamente estrae i nuovi aggiornamenti dal repository – https://github.com/jesalg/SlimJim – Fondamentalmente ascolta il github post-receive-hook e utilizza un proxy per triggersre un aggiornare lo script.

Sono il fondatore di https://commando.io e recentemente abbiamo annunciato un’integrazione con GitHub tramite un servizio. L’integrazione consente di eseguire le esecuzioni sui server quando si esegue il push su un repository GitHub. Questa è un’opportunità perfetta per eseguire automaticamente gli script di distribuzione quando si esegue il push del codice.

Un’esecuzione è uno script scritto 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 di git pull esecuzione, consulta l’articolo sul nostro blog: http://blog.commando.io/run-executions-via-github-push/

Deepl.io sembra essere un concorrente nuovo e promettente in questo spazio.

Funzionalità (prese dal suo sito Web):

  • Cattura i webhook da GitLab e GitHub
  • Configura più repository
  • Configura più filiali per repository
  • Usa i tuoi script di distribuzione, PHP, shell o entrambi
  • Invia e-mail di conferma

Inoltre, ci sono servizi gratuiti / poco costosi là fuori come REPOMAN.IO che automatizzano quasi tutto questo per te.