如何在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那样的免费/便宜的服务,可以为你自动化几乎所有这些。