web-dev-qa-db-fra.com

Comment puis-je déployer automatiquement mon application après un git Push (GitHub et node.js)?

J'ai mon application (node.js) déployée sur un VPS (linux). J'utilise git hub en tant que référentiel. Comment puis-je déployer l'application automatiquement, sur git Push?

92
Advanced

Exemple en PHP:

Accédez à github dans votre référentiel github, cliquez sur "Admin".

cliquez sur l'onglet 'Service Hooks' => 'URL WebHook'

et ajouter

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

puis créez 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');
}

Dans le build.sh, vous devrez mettre les commandes habituelles pour récupérer votre site à partir de github

63
Pawel Dubiel

Il y avait quelques mentions des crochets Git en tant que réponses/commentaires, ce qui a fonctionné pour moi dans le passé. Voici donc ma recette si quelqu'un d'autre avait besoin de plus de détails.

J'utilise une combinaison de crochet post-réception git et superviseur de noeud pour effectuer un déploiement automatique simple (en supposant que vous utilisez un référentiel distant git sur cette machine).


Configurez votre crochet post-réception

Dans votre référentiel: Sudo vi hooks/post-receive

Et cela devrait ressembler à quelque chose comme:

#!/bin/sh
GIT_WORK_TREE=/home/path/to/your/www
export GIT_WORK_TREE
git checkout -f

Définir les autorisations de fichier: chmod +x hooks/post-receive

Git actualisera les fichiers de votre répertoire d'applications après un Push to repo.


Exécuter Node avec Node-Supervisor

Vous devez installer Node-Supervisor sur votre machine en tant que module de nœud global: Sudo npm install supervisor -g

Maintenant, lancez simplement votre application de nœud avec node-supervisor et il surveillera les modifications apportées aux fichiers de votre répertoire de travail:

supervisor /home/path/to/your/www/server.js (note supervisor au lieu de node).

23
Wes Johnson

Probablement très tard pour repond ici. Mais j'ai trouvé ce projet sur github et semble faire ce que vous voulez mais d'une manière beaucoup plus propre.

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

Vérifiez-le. Serait également intéressé de savoir ce que les autres pensent de cela en termes de commentaires et de votes positifs.

À votre santé,
S

18
Saurabh

Dans un projet que je suis en train de développer, je suis les directives du livre brillant de Jez Humble "Continuous Delivery" (qui mérite d'être lu).

Cela implique la création d'un pipeline de déploiement utilisant un serveur d'intégration continue (j'utilise la version gratuite de Thoughtworks Community Edition of Go ), chargé de vérifier d'abord la qualité et la complexité de votre code et de lancer des tests unitaires. Il peut ensuite suivre un pipeline de déploiement entraînant une diffusion vers vos serveurs de production.

Cela semble très compliqué, mais ne doit pas l'être, et rend le processus complet d'écriture de code et sa mise en production sûr et sans souci (pas de jours de publication effrayants!).

J'utilise un pipeline de déploiement complet pour les systèmes en direct et une version réduite pour les modules npm que j'écris, et les deux partagent la même technique de déploiement en un clic.

8
Roy

Je viens de publier une solution nodale à votre problème: node-cd

Il consiste en une application de noeud simple s'exécutant sur votre VPS qui recevra les crochets post-réception de Github et exécutera le script que vous aimez (par exemple, un script Shell qui va tuer votre application, git pull et redémarrer il).

8
A21z

J'ai trouvé que le projet pour un déploiement facile utilise git.

git-play

Je pense que c'est la bonne façon pour vous.

Vérifiez-le.

3
Oh Seung Kwon

Voici une autre implémentation simple de nodeJS.

C'est un serveur de nœud très simple qui fonctionne sur un nom d'hôte et un port que vous configurez et peut être configuré pour gérer les points d'ancrage Web après réception de GitHub. Et les actions pul/test/deploy peuvent être personnalisées pour faire tout ce que vous voulez. Dans l'implémentation actuelle, il s'agit d'une commande Shell spécifiée inline dans le script de serveur nodeJS. Et il existe également un schéma de sécurité très simple basé sur secret_key.

https://github.com/shyam-habarakada/rscds

Mon noeud de stockage disposait déjà d'un noeud installé et en cours d'exécution. L'écriture a donc été rapide et facile.

3
Shyam Habarakada

Si vous voulez une solution basée sur python/tornade, j'ai écrit un script pour gérer les requêtes POST des services Webhook de Github Vous pouvez le trouver à https://github.com/Akobi/ops/tree/master/autodeploy

Il utilise essentiellement un fichier de configuration JSON pour répertorier les dépôts auxquels vous vous attendez, les commandes que vous souhaitez exécuter lors du déploiement et le répertoire dans lequel les commandes doivent être exécutées. Il vous suffit de modifier le fichier de configuration à votre guise et de l'exécuter. le script!

De plus, j'utilise Nginx en tant que proxy inverse pour transférer ces messages POST vers mon script. Vous pouvez trouver la configuration Nginx dans le même dépôt Github sous le dossier 'nginx'.

Heureux de pousser!

2
Divij Rajkumar

la réponse PHP est tout à fait légitime à mon avis, mais si vous préférez Ruby, je propose une solution sur le blog. C'est la même chose que la réponse PHP, juste en une langue différente, vous utilisez un hook Web et vous avez un script simple qui écoute les requêtes HTTP correspondantes.

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

1
Giles Bowkett

Deepl.io semble être un nouveau concurrent prometteur dans cet espace.

Caractéristiques (tirées de son site Web):

  • Capturer les webhooks de GitLab & GitHub
  • Configurer plusieurs référentiels
  • Configurez plusieurs branches par référentiel
  • Utilisez vos propres scripts de déploiement, PHP, Shell ou les deux.
  • Envoie des emails de confirmation
1
vanto

Je suis le fondateur de https://commando.io et nous avons récemment annoncé une intégration avec GitHub via un service. L'intégration vous permet d'exécuter des exécutions sur des serveurs lorsque vous appuyez sur un référentiel GitHub. C'est l'occasion idéale pour exécuter automatiquement des scripts de déploiement lorsque vous envoyez du code.

Une exécution est un script que vous écrivez dans Commando.io et que vous pouvez écrire en bash, Perl, Python, Ruby, Go ou node.js. Pour en savoir plus et voir un exemple de script d'exécution de l'exécution de git pull, voir l'annonce de notre blog: http://blog.commando.io/run-executions-via-github-Push/

1
Justin

J'ai créé mon propre outil de déploiement rudimentaire qui extrairait automatiquement les nouvelles mises à jour du référentiel - https://github.com/jesalg/SlimJim - En gros, il écoute le post-receive-hook de github. et utilise un proxy pour déclencher un script de mise à jour.

1
jesal

Notez également qu'il existe des services gratuits/peu coûteux, tels que REPOMAN.IO , qui automatisent presque tout cela pour vous.

1
Kirschbaum