作者:mobiledu2502930413 | 来源:互联网 | 2023-05-31 20:29
当我们运用github来托管项目时,每次布置项目都要走一样的流程,敲击一样的敕令行,特别的我们的node项目更是无法忍受这类反复事情。那究竟有无一种能够解放我们双手,当我们提交代码
当我们运用github
来托管项目时,每次布置项目都要走一样的流程,敲击一样的敕令行,特别的我们的node
项目更是无法忍受这类反复事情。
那究竟有无一种能够解放我们双手,当我们提交代码后,服务器自动实行我们已制定好的敕令行,答案是我们能够运用Github
自有的Webhooks
。
Webhooks
Webhooks
是来监测你在github
上的种种事宜,我们能够经由过程定制它来监测一个push
事宜,每当我们提交代码时Webhooks
会被触发,这是我们能够经由过程设置一个HOST POST
要求到你所须要的地点。
怎样设置
找到你在Github
上的项目地点上的Setting
的Webhooks
,如下图设置:
项目设置
在项目根目次下新建deployed.sh
文件,输入你想在服务器上实行的敕令行,如:
cd /front/docs/
git pull origin master
在项目根目次下新建deployed.js
文件
var http = require('http')
var spawn = require('child_process').spawn
var createHandler = require('github-webhook-handler')
var handler = createHandler({
path: '/pushCode',
secret: '12345678'
})
http.createServer(function (req, res) {
handler(req, res, function (err) {
res.statusCode = 404;
res.end('no such location')
})
}).listen(3000)
handler.on('error', function (err) {
console.error('Error:', err.message)
})
handler.on('push', function (event) {
console.log('Received a push event for %s to %s',
event.payload.repository.name,
event.payload.ref)
rumCommand('sh', ['./deployed.sh'], function (txt) {
console.log(txt)
})
})
function rumCommand(cmd, args, callback) {
var child = spawn(cmd, args)
var respOnse= ''
child.stdout.on('data', function (buffer) {
response += buffer.toString()
})
child.stdout.on('end', function () {
callback(response)
})
}
nginx设置
实行剧本跑在了3000端口,我们服务器对应启用到 3000 端口
upstream test {
server 127.0.0.1:3000;
}
server {
location /pushCode {
proxy_pass http://test;
proxy_redirect off;
}
}
布置项目
初次布置到服务器时,仍然是须要我们手动实行敕令git pull
项目,当我们在服务器上clone
下我们的项目后,在当地尝试修正下代码,然后再次提交,可看到背景的日记
再次检察Webhooks
示意已自动触发了接口,项目自动化布置胜利。
治理运用
在服务器上实行node
敕令后,当我们脱离服务器后,实际上顺序历程封闭了,所以我们运用pm2来治理我们的node
历程。
在项目根目次下新建pm2.json
[{
"name": "test",
"script": "deployed.js",
"env_dev": {
"NODE_ENV": "development"
},
"env_production": {
"NODE_ENV": "production"
}
}]
把一切的代码推奉上服务器,进入服务器项目目次,实行
// 启动敕令
pm2 start pm2.json
// 检察是不是启动
pm2 list
// 检察日记
pm2 logs
本文谢谢SkyCai供应的思绪。原文地点