J'ai mon application (node.js) déployée sur un VPS (linux). J'utilise git hub comme référentiel. Comment puis-je déployer l'application automatiquement, sur git push?
J'ai mon application (node.js) déployée sur un VPS (linux). J'utilise git hub comme référentiel. Comment puis-je déployer l'application automatiquement, sur git push?
Réponses:
Exemple en PHP:
Accédez à github dans votre référentiel github ajouter 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 depuis github
Il y a eu quelques mentions de hooks Git en tant que réponses / commentaires, ce qui a fonctionné pour moi dans le passé .. alors voici ma recette si quelqu'un d'autre a besoin de plus de détails.
J'utilise une combinaison du hook git post-receive et du node-supervisor pour effectuer un déploiement automatique simple (en supposant que vous utilisez un référentiel git distant sur cette machine).
Configurer 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éfinissez les autorisations de fichier: chmod +x hooks/post-receive
Git actualisera les fichiers dans le répertoire de votre application après une poussée vers le référentiel.
Exécuter Node avec Node-Supervisor
Vous devrez installer Node-Supervisor sur votre machine en tant que module de nœud global: sudo npm install supervisor -g
Maintenant, exécutez 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
(notez supervisor
au lieu de node
).
npm install -l
sur le serveur distant est intelligente. Cela peut bien sûr être couplé à votre méthode en utilisant des crochets post-réception.
Probablement très tard pour repondre ici. Mais j'ai trouvé ce projet sur github et semble faire ce que vous voulez faire mais d'une manière beaucoup plus propre.
https://github.com/logsol/Github-Auto-Deploy
Vérifiez-le. Je serais également intéressé de savoir ce que les autres en pensent en termes de commentaires et de votes positifs.
Bravo,
S
Dans un projet que je suis en train de développer, je suis les directives décrites dans le brillant livre de Jez Humble "Continuous Delivery" (qui vaut bien une lecture).
Cela signifie créer un pipeline de déploiement à l'aide d'une forme de serveur d'intégration continue (j'utilise l'édition communautaire gratuite de Thoughtworks de Go ), qui est chargé de vérifier d'abord votre code pour la qualité, la complexité et l'exécution des tests unitaires. Il peut ensuite suivre un pipeline de déploiement entraînant une poussée vers vos serveurs de production.
Cela semble très compliqué, mais ce n'est pas obligatoire, et cela rend tout le processus d'écriture de code et rend son passage en production sûr et sans souci (pas de jours de sortie 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 1 clic.
Je viens de publier une solution basée sur les nœuds à votre problème: node-cd
Il s'agit d'une simple application de nœud s'exécutant sur votre VPS qui recevra les Hooks post- réception de Github et exécutera le script que vous aimez (par exemple, un script shell qui tuera votre application, git pull et la redémarrera).
Voici une autre implémentation simple de nodeJS.
C'est un serveur de nœuds très simple qui s'exécute sur un nom d'hôte et un port que vous configurez et qui peut être configuré pour gérer les hooks Web GitHub post-recevoir. Et les actions réelles 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 qui est spécifiée en ligne dans le script du 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 serveur de test avait déjà un nœud installé et en cours d'exécution, donc l'écriture était rapide et facile.
J'ai trouvé le projet pour un déploiement facile utilise git.
Je pense que c'est la bonne façon pour vous.
Vérifiez-le.
Si vous voulez une solution basée sur python / tornado, j'ai écrit un script pour gérer les requêtes POST des services Webhook de Github . Vous pouvez le trouver sur https://github.com/Akobi/ops/tree/master/autodeploy
Il utilise essentiellement un fichier de configuration JSON pour répertorier les dépôts à partir desquels vous attendez des push, les commandes que vous souhaitez exécuter lors du déploiement et le répertoire dans lequel les commandes doivent s'exécuter. Il vous suffit de modifier le fichier de configuration à votre guise et de l'exécuter le scénario!
De plus, j'utilise Nginx comme proxy inverse pour transmettre ces POST à mon script. Vous pouvez trouver la configuration Nginx dans le même dépôt Github sous le dossier 'nginx'.
Bonne poussée!
la réponse PHP est tout à fait légitime à mon avis, mais si vous préférez Ruby, j'ai blogué une solution. c'est la même chose que la réponse PHP, juste dans une langue différente. vous utilisez un crochet Web et vous disposez d'un script simple pour écouter les requêtes HTTP pertinentes.
http://gilesbowkett.blogspot.com/2012/06/heroku-style-deployment-on-ec2.html
J'ai créé mon propre outil de déploiement rudimentaire qui extraire automatiquement les nouvelles mises à jour du référentiel - https://github.com/jesalg/SlimJim - En gros, il écoute le post-receive-hook github et utilise un proxy pour déclencher un script de mise à jour.
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 poussez vers un dépôt GitHub. Il s'agit d'une opportunité parfaite 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 qui peut être écrit 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 git pull
, consultez l'annonce de notre article de blog: http://blog.commando.io/run-executions-via-github-push/
Deepl.io semble être un nouveau candidat prometteur dans cet espace.
Caractéristiques (tirées de son site Web):
Notez également qu'il existe des services gratuits / peu coûteux comme REPOMAN.IO qui automatisent presque tout cela pour vous.