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

时间:2012-02-03 16:41:53

标签: git node.js github push githooks

我的应用程序(node.js)部署在VPS(linux)上。我正在使用git hub作为存储库。如何在git push上自动部署应用程序?

13 个答案:

答案 0 :(得分:63)

PHP示例:

导航到github进入你的github存储库,点击“Admin”

点击标签'服务挂钩'=> 'WebHook URL'

并添加

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

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

在build.sh中,您需要放置常用命令以从github

检索您的网站

答案 1 :(得分:23)

有几个提到Git钩子作为答案/评论,过去对我有用..所以这是我的食谱,如果别人需要更多的细节。

我使用git post-receive hooknode-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)。

答案 2 :(得分:18)

可能很晚才回到这里。但是我在github上找到了这个项目,似乎做了你想做的事情,但是以更清洁的方式。

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

检查出来。也有兴趣知道其他人在评论和赞成票方面的想法。

干杯,
小号

答案 3 :(得分:8)

在我正在开发的项目中,我遵循Jez Humble的精彩书籍#34;持续交付&#34; (非常值得一读)。

这意味着使用某种形式的持续集成服务器创建部署管道(我使用的是Go的Thoughtworks免费社区版),它负责首先检查代码的质量,复杂性和运行单元测试。然后,它可以跟随部署管道,从而推动生产服务器。

这听起来非常复杂,但并非必须如此,而且确实可以完成编写代码的整个过程,并使其成为安全无忧的生产方式(没有可怕的发布日!)。

我使用实时系统的完整部署管道,以及我编写的npm模块的缩减版本,并且两者共享相同的一键式部署技术。

答案 4 :(得分:8)

我刚刚为您的问题发布了基于节点的解决方案:node-cd

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

答案 5 :(得分:3)

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

这是一个非常简单的节点服务器,可以在您配置的主机名和端口上运行,并且可以设置为处理GitHub后接收Web挂钩。并且可以定制实际的pul / test / deploy操作以执行您想要的任何操作。在当前实现中,它是在nodeJS服务器脚本中内联指定的shell命令。并且还有一个非常简单的基于secret_key的安全方案。

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

我的登台服务器已经安装并运行了节点,因此快速轻松地编写该节点。

答案 6 :(得分:3)

我发现易于部署的项目使用git。

git-play

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

检查出来。

答案 7 :(得分:2)

如果你想要一个基于python / tornado的解决方案,我写了一个脚本来处理来自Github Webhook Services的POST请求。您可以在https://github.com/Akobi/ops/tree/master/autodeploy

找到它

它基本上使用JSON配置文件列出您希望推送的存储库,要在部署时运行哪些命令,以及命令必须在哪个目录中运行。您只需要将配置文件修改为您的喜欢并运行脚本!

此外,我使用Nginx作为反向代理将这些POST转发到我的脚本。您可以在&#39; nginx&#39;下的相同Github回购中找到Nginx配置。文件夹中。

快乐推!

答案 8 :(得分:1)

在我看来,PHP答案是完全合法的,但如果您更喜欢Ruby,我会写一个解决方案。这与PHP的答案是一样的,只是用不同的语言。您使用Web挂钩,并且您有一个简单的脚本侦听相关的HTTP请求。

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

答案 9 :(得分:1)

我已经创建了自己的基本部署工具,它会自动从存储库中删除新的更新 - https://github.com/jesalg/SlimJim - 基本上它会监听github post-receive-hook并使用代理来触发更新脚本。

答案 10 :(得分:1)

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

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

答案 11 :(得分:1)

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

功能(摘自其网站):

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

答案 12 :(得分:1)

另请注意,有免费/廉价的服务,如REPOMAN.IO,可以为您自动完成所有这些服务。