如何在git push(GitHub和node.js)之后自动部署我的应用程序?

我有我的应用程序(node.js)部署在VPS(Linux)上。 我使用git hub作为存储库。 我怎样才能自动部署应用程序,在git推?

PHP中的示例:

导航到github到你的github仓库添加点击“pipe理员”

点击“Service Hooks”标签=>'WebHook URLs'

并添加

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

然后创buildgit_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'); } 

在build.sh中,你将需要把通常的命令从github中检索你的站点

有几个提到的Git钩子的答案/评论,这对我来说以前..所以这里是我的食谱,如果其他人需要更多的细节。

我使用git post-receive hook和node-supervisor的组合来完成简单的自动部署(假设你在该机器上使用git远程仓库)。


设置您的接收后挂钩

在你的仓库: sudo vi hooks/post-receive

它应该看起来像这样:

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

设置文件权限: chmod +x hooks/post-receive

在推送到回购站之后,Git会刷新您的应用程序目录中的文件。


使用Node-Supervisor运行节点

您需要在您的机器上安装Node-Supervisor作为全局节点模块: sudo npm install supervisor -g

现在只需使用node-supervisor运行节点应用程序,它将监视工作目录中文件的更改:

supervisor /home/path/to/your/www/server.js (注意supervisor而不是node )。

在这里可能很迟才回应。 但是我在github上find了这个项目,似乎是以一种更简洁的方式来做你想做的事情。

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

一探究竟。 也有兴趣知道别人怎么看待这个评论和upvotes方面。

干杯,
小号

在我目前正在开发的一个项目中,我遵循Jez Humble杰出的书“持续交付”(非常值得一读)的指导原则。

这意味着使用某种forms的持续集成服务器(我使用Whiletworks免费社区版Go )创build部署pipe道,负责首先检查代码的质量,复杂性和运行unit testing。 然后,它可以跟随部署pipe道,从而推送到您的生产服务器。

这听起来非常复杂,但并不是必须的,而且确实使得编写代码的整个过程变得安全无忧(没有可怕的发布日子!)。

我为实时系统使用了一个完整的部署pipe道,并使用了我编写的用于npm模块的减less版本,并且都共享相同的一键式部署技术。

我刚刚发布了一个基于节点的解决scheme: node-cd

它包含一个运行在你的VPS上的简单的节点应用程序,它将接收Github的post-receive Hooks并执行你喜欢的脚本(例如一个会杀死你的应用程序,git pull并重新启动它的shell脚本)。

这是另一个简单的nodeJS实现。

这是一个非常简单的节点服务器,运行在您configuration的主机名和端口上,可以设置为处理GitHub发送接收Web钩子。 而实际的pul / test / deploy动作可以自定义以做你想做的任何事情。 在当前的实现中,它是在nodeJS服务器脚本中内联指定的shell命令。 还有一个非常简单的基于secret_key的安全机制。

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

我的登台服务器已经安装并运行了节点,所以写起来很快捷。

我发现这个项目很容易使用git。

混帐播放

我认为这是适合你的方式。

一探究竟。

你可以使用https://github.com/adnanh/webhook

查看维基有关创build挂钩的详细说明:-)

如果你想要一个基于python / tornado的解决scheme,我写了一个脚本来处理来自Github的Webhook服务的 POST请求。 你可以在https://github.com/Akobi/ops/tree/master/autodeployfind它;

它基本上使用一个JSONconfiguration文件来列出你期望从哪个回收站获得的回收站,你想要在deploy上运行哪些命令,以及这些命令必须运行在哪个目录下。你所要做的就是修改configuration文件到你喜欢的地方并运行剧本!

另外,我使用Nginx作为反向代理将这些POST转发给我的脚本。 你可以在'nginx'文件夹下find相同的Github仓库中的Nginxconfiguration。

快乐推!

在我看来,PHP的答案是完全合法的,但是如果你更喜欢Ruby的话,我会写一个解决scheme。 它与PHP的答案是一样的,只是用不同的语言。 你使用一个web钩子,你有一个简单的脚本监听相关的HTTP请求。

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

我已经创build了我自己的初步部署工具,它会自动从回购拉下新的更新 – https://github.com/jesalg/SlimJim – 基本上它听取github post-receive-hook并使用代理来触发更新脚本。

我是https://commando.io的创始人,最近我们宣布通过服务与GitHub进行整合。; 集成允许您在推送到GitHub仓库时在服务器上运行执行。 这是在推送代码时自动运行部署脚本的绝好机会。

执行是您在Commando.io中编写的脚本,可以用bash,perl,python,ruby,go或node.js编写。 要阅读更多内容,并查看运行git pull的示例执行脚本,请参阅我们的博客post公告: http : //blog.mando.io/run-executions-via-github-push/

Deepl.io似乎是这个领域新的有希望的竞争者。

特点(从其网站获取):

  • 从GitLab&GitHub抓住webhooks
  • configuration多个存储库
  • 每个存储库configuration多个分支
  • 使用您自己的部署脚本,PHP或shell或两者
  • 发送确认电子邮件

另外请注意,有像REPOMAN.IO那样的免费/便宜的服务,可以为你自动化几乎所有这些。