我的应用程序(node.js)部署在VPS(linux)上。我正在使用git hub作为存储库。如何在git push上自动部署应用程序?
答案 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 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
)。
答案 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)
答案 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)
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似乎是这个领域新的有希望的竞争者。
功能(摘自其网站):
答案 12 :(得分:1)
另请注意,有免费/廉价的服务,如REPOMAN.IO,可以为您自动完成所有这些服务。