Salut, merci beaucoup. Qu'est-ce qui empêche Bob d'exécuter mon script de déploiement?
Avancé
16
@Advanced 1 peut-être des autorisations de script, un indicateur d'exécution ... 2 l'ajout d'une balise de fermeture en PHP est une mauvaise pratique.
Pawel Dubiel
3
@Advanced Une technique pour s'assurer que Bob n'exécute pas votre script est de s'assurer que la requête POST provient des serveurs de Github. Vérifiez les en-têtes HTTP qu'ils envoient lors de la demande. Vous pouvez également créer une URL «secrète» qui n'est pas devinable.
@ Arius2038 Avez-vous déjà entendu parler de "vous apprenez quelque chose de nouveau chaque jour"? eh bien c'est mon "quelque chose de nouveau" aujourd'hui. Merci d'avoir partagé!
Purefan
23
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
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 supervisorau lieu de node).
C'est bien, mais une chose à savoir est que si vous ajoutez un nouveau npm à votre application locale, vous devrez également faire une installation npm pour ce module sur le serveur. Sinon, vous aurez probablement une application qui plante.
k00k
2
Non .. Tous les modules de nœuds dont dépend mon application locale sont installés dans le sous-répertoire node_modules de mon projet, qui est mon dépôt GIT local, donc lorsque j'ajoute, valide, puis pousse vers le serveur distant, ils sont également copiés.
Wes Johnson
8
Bien, mais ce que cela signifie, c'est que si l'un de ces modules avait du code qui a été compilé (comme mhash par exemple), il pourrait ne pas fonctionner sur un autre serveur avec un système d'exploitation et / ou une architecture différents. L'utilisation de package.json pour suivre vos dépendances, puis une stratégie de déploiement qui effectue un npm install -lsur le serveur distant est intelligente. Cela peut bien sûr être couplé à votre méthode en utilisant des crochets post-réception.
k00k
1
et vous pouvez simplement ajouter l'arbre de travail Git directement dans la commande git checkout: git --work-tree = / var / www / tree --git-dir = / var / repo / deploy.git checkout -f (plutôt que de créer la variable et l'exporter dans votre script.
JasonB
La question concerne Github, cependant.
Noah
18
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.
"Probablement très tard pour repondre ici." Jamais trop tard. :) Vous contribuez en fait à toute la communauté (la plupart d'entre nous, googleurs; wow, juste en regardant ces 20k vues!), Pas le seul gars qui a posé la question "il y a quelque temps". Le temps, en lui-même, n'a pas d'importance: tant que la technologie en question est pertinente, votre réponse le sera aussi. (Merci pour le tuyau, BTW, vérifiant ça ...)
Sz.
1
merci pour votre tête! ;) Cela fonctionnait très bien pour moi à ce moment-là. Maintenant, je préfère utiliser travis (travis-ci.org), ( partout où je peux ) pour les déploiements automatisés. @lunakid
Saurabh Kumar
8
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.
& un autre +1 pour la recommandation de livre! Je découvre que CI ne doit pas être abordé avec désinvolture.
Merrick
eh bien, les gens posent une question simple, vous donnez une solution complète :). Je dois dire que c'est exagéré. Mais si vous utilisez déjà la livraison continue, c'est peut-être la voie à suivre.
windmaomao
8
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).
+1 parce que c'est pur node.js, donc l'affiche n'a rien à ajouter à sa pile, ni à utiliser un langage avec lequel il n'est pas à l'aise. Aussi, code vraiment bien présenté
code_monk
3
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.
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'.
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.
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/
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
puis créez git_test.php
Dans le build.sh, vous devrez mettre les commandes habituelles pour récupérer votre site depuis github
la source
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:
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
(notezsupervisor
au lieu denode
).la source
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
la source
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.
la source
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).
la source
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.
la source
J'ai trouvé 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.
la source
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 source
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
la source
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.
la source
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/la source
Deepl.io semble être un nouveau candidat prometteur dans cet espace.
Caractéristiques (tirées de son site Web):
la source
Notez également qu'il existe des services gratuits / peu coûteux comme REPOMAN.IO qui automatisent presque tout cela pour vous.
la source