我有我的应用程序(node.js)部署在VPS(linux)上。我使用git hub作为存储库。如何在git push上自动部署应用程序?如何在git push(GitHub和node.js)后自动部署我的应用程序?
回答
在我正在开发的一个项目中,我遵循Jez Humble精彩的书“持续交付”(非常值得一读)中介绍的指导方针。
这意味着使用某种形式的持续集成服务器(我使用Betweentworks免费社区版Go)创建部署管道,它负责首先检查代码的质量,复杂性和运行单元测试。然后,它可以跟随部署管道,从而推送到您的生产服务器。
这听起来很复杂,但并不是必须的,它确实使编写代码的整个过程变得安全无忧(无可怕的发布日子!)。
我为实时系统使用了完整的部署管道,并且使用了我编写的用于npm模块的减少版本,并且都共享相同的单击部署技术。
&另一个+1为书推荐!我发现CI不会随便接近。 – Merrick 2013-10-04 18:25:30
好吧,人们问一个简单的问题,你给出了一个完整的解决方案:)。我不得不说这是一个矫枉过正的问题。但是如果您已经在使用连续交付,也许这就是要走的路线。 – windmaomao 2015-03-19 16:13:29
例在PHP中:
导航到Github上到你的GitHub库添加单击 “管理”
点击选项卡 '服务鱼钩'=> '网络挂接网址'
,并添加
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');
}
在你需要把常用的命令来从GitHub
有检索您的网站build.sh是几个提到的Git钩子答案/评论,这对我在过去的工作中..所以这里是我的食谱,如果其他人需要更多细节。
我使用git post-receive hook和node-supervisor的组合来完成简单的自动部署(假设您在该机器上使用git远程存储库)。
设置你的后receive挂钩
在你的资料库: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会在推送到repo后刷新应用程序目录中的文件。
与节点主管
运行节点,您需要在您的计算机上安装节点主管作为全球节点模块:sudo npm install supervisor -g
现在只需运行与节点的节点应用它会监视您的工作目录中的文件更改:
supervisor /home/path/to/your/www/server.js
(note注意supervisor
而不是node
)。
这很好,但有一点需要注意的是,如果您将新的npm添加到本地应用程序中,则还需要在服务器上为该模块执行npm install。如果你不这样做,你可能会有一个崩溃的应用程序。 – k00k 2012-04-25 17:42:56
不能。我的本地应用程序依赖的任何节点模块都安装在我的项目的node_modules子目录中,这是我本地的GIT repo,因此当我添加,提交时,然后推送到远程服务器,它们也会被复制。 – 2012-04-28 16:57:12
没错,但这意味着如果其中任何一个模块都有编译好的代码(例如mhash),它可能无法在另一个操作系统和/或体系结构的另一台服务器上运行。使用package.json跟踪您的依赖关系,然后在远程服务器上执行'npm install -l'的部署策略是非常明智的。这当然可以与使用post-receive钩子的方法相结合。 – k00k 2012-04-28 17:40:43
PHP的答案在我看来是完全合法的,但是如果你更喜欢Ruby,我会发布一个解决方案。它与PHP的答案是一样的,只是用不同的语言。你使用web钩子,你有一个简单的脚本来监听相关的HTTP请求。
http://gilesbowkett.blogspot.com/2012/06/heroku-style-deployment-on-ec2.html
我刚刚出版了基于节点的解决问题的方法:node-cd
它包括在你的VPS运行一个简单的节点应用程序,将收到Github post-receive Hooks并执行一个你喜欢的脚本(例如一个会杀死你的应用程序的shell脚本,git pull,然后重新启动它)。
+1,因为它是纯粹的node.js,所以海报不必添加任何东西到他们的堆栈,或者使用他们不舒服的语言同时,真的很好地布置代码 – 2014-02-22 18:56:10
这是另一个简单的nodeJS实现。
这是一个非常简单的节点服务器,它可以在您配置的主机名和端口上运行,并且可以设置为处理GitHub发布接收Web挂钩。而实际的pul/test/deploy操作可以被自定义以执行任何你想要的操作。在当前的实现中,它是在nodeJS服务器脚本中内联指定的shell命令。还有一个非常简单的基于secret_key的安全机制。
https://github.com/shyam-habarakada/rscds
我的临时服务器已经有节点安装并运行,所以写这件事是方便快捷。
“http://www.yourdomain.com:8088/update?site=wwws&secret_key=YOUR_SECRET_KEY” - 真的?!“秘密”密钥在URL中清晰传递! – 2014-09-08 09:01:54
有一个阿司匹林并安置朱利安当使用https时获取参数是加密的 – Gavin 2015-05-16 06:07:38
可能很晚才会在这里回应。但是我在github上发现了这个项目,似乎是以一种更简洁的方式做你想做的事情。
https://github.com/logsol/Github-Auto-Deploy
检查出来。也有兴趣知道别人怎么看待这个评论和upvotes。
干杯,
小号
*“在这里可能很晚回复。”*永远不会太晚:)你实际上是对整个社区做出贡献的我们大多数谷歌;哇,只是罗在这些20k的意见中做出这种看法!),而不是那个单独的人在前段时间问过这个问题。时间本身是无关紧要的:只要相关的技术*是相关的,你的答案也将是。 (感谢提示,顺便说一句,检查出来......) – 2014-05-11 10:41:20
感谢您的headUp! ;)当时它对我很好。现在我更愿意使用travis(travis-ci.org),(**我可以**的任何地方)进行自动化部署。 @lunakid – Saurabh 2014-05-11 15:03:29
我已经创建了自己的初步部署工具会自动从回购拉下新的更新 - https://github.com/jesalg/SlimJim - 基本上,它监听GitHub的后收到钩和使用代理触发更新脚本。
如果你想要一个基于python/tornado的解决方案,我写了一个脚本来处理来自Github的Webhook Services的POST请求。你可以在https://github.com/Akobi/ops/tree/master/autodeploy
它基本上使用一个JSON配置文件来列出你期望从哪个回收站推出,你想在deploy上运行哪些命令,以及这些命令必须运行在哪个目录中。你只需要做根据你的喜好修改配置文件并运行脚本!
此外,我使用Nginx作为反向代理将这些POST转发到我的脚本。您可以在'nginx'文件夹下的同一Github仓库中找到Nginx配置。
快乐推!
我是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/
你可以使用https://github.com/adnanh/webhook
检查出详细的说明维基创建挂钩:-)
Deepl.io似乎是在这个领域新的和有希望的竞争者。
特点(从它的网站获取):从GitLab & GitHub的
- 捕捉网络挂接,外壳或两者兼有
- 发送确认电子邮件
此外还有免费/便宜的服务,如REPOMAN.IO,几乎所有这些都为你自动化。
- 1. 从Github将我的node.js应用程序部署到VPS
- 2. 在git push上自动部署
- 3. 如何自动部署应用程序
- 4. 从Git部署和自动运行Android应用程序
- 5. 从GitHub部署Node应用程序
- 6. 自动触发服务器部署和构建在git push
- 7. 部署的Node.js应用程序的Heroku
- 8. Github页面:如何部署我的Symfony2应用程序?
- 9. 在Heroku上部署Github应用程序
- 10. 自动执行应用程序部署
- 11. 使用Git我的Node.js应用程序部署到我的生产服务器
- 12. 如何将我的node.js应用程序部署到服务器?
- 13. 如何将我的Typescript Node.js应用程序部署到Heroku?
- 14. 如何部署我的应用程序?
- 15. 如何使用Git手动部署Rails应用程序
- 16. 自动部署wpf应用程序
- 17. 将Node.js和Node.js应用程序部署到Raspberry Pi
- 18. 为应用程序,webhooks或git-pull/restart自动部署
- 19. 从Git到Tomcat7自动部署Grails/Java web应用程序
- 20. 如何将一个Node.js应用程序从GitHub部署到Google App Engine?
- 21. 错误部署Node.js应用程序
- 22. 使用node.js自动部署和配置
- 23. Android Maven插件 - 如何在部署后自动启动应用程序
- 24. 如何在github上部署angular2 cli应用程序?
- 25. Github部署过程
- 26. 将phantomJS部署到node.js应用程序?
- 27. Git Push Heroku Master在尝试部署应用程序时导致致命错误
- 28. Node.js应用程序在部署到Heroku后未打开
- 29. 如何在`git push`后在本地和远程撤销`git commit`
- 30. 如何在Bluemix中部署我的Rank和Retrieve应用程序
你检查了git hooks http://progit.org/book/ch7-3.html,还检查了github http://help.github.com/test-webhooks/ – 2012-02-03 17:36:10
更新了上面的progit链接: http://git-scm.com/book/en/Customizing-Git-Git-Hooks – 2014-02-18 03:40:02
Git 2.10将添加一个有趣的功能:推送选项http://stackoverflow.com/a/38770670/6309 – VonC 2016-08-04 14:58:43