当前位置: 首页 > 后端技术 > Node.js

Github托管项目实现自动部署

时间:2023-04-04 00:44:26 Node.js

我们在使用github托管项目的时候,每次部署项目都要走同样的流程,输入同样的命令行,尤其是我们的node项目受不了这种重复工作。那有没有办法解放我们的双手呢?当我们提交代码时,服务器会自动执行我们制作的命令行。答案是我们可以使用Github自带的Webhooks。WebhooksWebhooks就是在github上监控你的各种事件。我们可以通过自定义来监控推送事件。每当我们提交代码时,都会触发Webhooks。这是我们可以通过将HOSTPOST请求配置到您需要的地址来配置的。如何配置在Github上找到你的项目地址上Setting的Webhooks,如下图:项目配置编写并执行shell命令在项目根目录新建deployed.sh文件,输入你要的命令行在服务器上执行,如:cd/front/docs/gitpulloriginmaster编写执行脚本在项目根目录新建deployed.js文件varhttp=require('http')varspawn=require('child_process').spawnvarcreateHandler=require('github-webhook-handler')varhandler=createHandler({path:'/pushCode',secret:'12345678'})http.createServer(function(req,res){handler(req,res,function(err){res.statusCode=404;res.end('没有这样的位置')})}).listen(3000)handler.on('error',function(err){console.error('Error:',err.message)})handler.on('push',function(event){console.log('收到%s到%s的推送事件',event.payload.repository.name,event.payload.ref)rumCommand('sh',['./deployed.sh'],function(txt){console.log(txt)})})functionrumCommand(cmd,args,callback){varchild=spawn(cmd,args)varresponse=''child.stdout.on('data',function(buffer){响应+=buffer.toString()})child.stdout.on('end',function(){callback(response)})}nginx配置执行脚本运行在3000端口,我们服务器对应开启3000端口upstreamtest{server127.0.0.1:3000;}server{location/pushCode{proxy_passhttp://test;proxy_redirect关闭;}}部署项目第一次部署到服务器时,我们还是需要手动执行命令gitpullproject,当我们在服务器上clone我们的项目后,尝试在本地修改代码,然后再次提交.可以在后台看到日志,再次查看Webhooks,说明已经自动触发了接口。项目自动部署成功。管理应用程序在服务器上执行完node命令后,当我们离开服务器后,程序进程实际上是关闭的,所以我们使用pm2来管理我们的node进程。在项目根目录新建pm2.json[{"name":"test","script":"deployed.js","env_dev":{"NODE_ENV":"development"},"env_production":{"NODE_ENV":"production"}}]将所有代码推送到服务器,进入服务器项目目录,执行//启动命令pm2startpm2.json//查看是否启动pm2list//查看日志pm2logs本文感谢SkyCai的创意。原地址

猜你喜欢