使用 WebHook 来自动部署 NodeJS 项目!
前言
在我们本地开发好一个 NodeJS 项目,如果想要给别人看的话一般来说都是需要部署到服务器上面的。如果你使用 github 或者 coding 这里代码托管的服务,只需要在服务器安装好环境且安装好 git 之后,把项目 clone 下来然后使用 pm2 来启动自己的 NodeJS 项目就行了。
但是,如果我更新了代码到了远程仓库去了,而服务器还是以前的老代码,你还是需要登录到服务器上面并且用 git 命令把最新的代码拉下来,在重启一次项目。久而久之,如果更改代码频繁的话,每次都是需要自己登录到服务器上手动部署也不是一个好办法。
刚好我们又用到了一些代码托管的服务,且有 WebHook 这种好东西,怎么不拿来用一用呢!
编写自动部署脚本
在我们确定使用 WebHook 来实现自动部署后,我们需要一个脚本去执行一些命令。在使用 Linux 的服务器下我们可以使用 shell 来写这个自动部署脚本,这里我把文件命名为auto_build.sh:
! /bin/bash
git reset --hard origin/master
git clean -f
git pull origin master
npm install
npm run test
npm run start
上面的 shell 脚本会运行我们写好的命令,这样的话第一步编写自动部署脚本就搞定了,如果对 shell 不熟悉的同学可以看看:Shell脚本编程30分钟入门
处理 WebHook
如果要使用 WebHook 的话,我们还需要在自己项目里多启动一个 http 服务专门用来处理接受请求,这里假设我们使用的是 Coding 来管理我们的代码,我们可以使用到coding-webhook-handler这个包。
首先安装好coding-webhook-handler:
npm i -S coding-webhook-handler
然后我们新建一个 js 文件命名为webhook.js,代码如上。这个就是使用到 coding-webhook-handler 这个模块了,且为它单独启动 http 服务,然后我们就监听如果有push操作的话,就执行回调函数:
const http = require('http')
const createHandler = require('coding-webhook-handler')
const handler = createHandler({
path: '/',
token: '' // 在 coding 上面可以填写一个 token
})
http.createServer((req, res) => {
handler(req, res, function(err) {
res.statusCode = 404
res.end('no such location')
})
}).listen(7777)
handler.on('error', err => {
console.error('Error:', err.message)
})
handler.on('push', event => {
console.log(event)
})
把最基础的代码写好了,然后我们需要运行我们.sh 文件来实现自动部署。先写一个能够运行命令的函数,函数也是写在webhook.js里:
...
const rumCommand = (cmd, args, callback) => {
const child = spawn(cmd, args)
let response = ''
child.stdout.on('data', buffer => response += buffer.toString())
child.stdout.on('end', () => callback(response))
}
...
接着修改handler.on('push', event => {...})的回调函数:
handler.on('push', event => {
rumCommand('sh', ['./auto_build.sh'], txt => {
console.log(txt)
})
})
好了,我们把webhook.js的代码都写好,之后就需要用 nginx 把端口转发出去。然后在 Coding 上面配置好 webhook 既可。
配置 Coding 的 WebHook 设置:
首先我们需要进入到你的 coding 仓库的页面,然后我们在左边的侧边栏里点击设置进入项目设置页面,你就可以看到 WebHook 这个按钮,然后在点击去到设置 WebHook 的页面。
接着我们可以在右面看到:
然后点击新建 Hook 进入一个页面:
url:就是访问你webhook.js启动服务的域名。
token:非必要,如果使用了需要在createHandler里面也对应的填写上。
然后下面你可以选你需要监听哪些事件,这里我们只是用来自动部署项目,就只监听push就行了。
确认设置好项目的 WebHook 之后,你最好也把部署公钥也给设置了,免得到时候pull代码的时候需要输入帐号密码,然后用 ssh 的方式把仓库 clone 到服务器上。然后启动项目的服务和启动 webhook.js 的服务。
总结
如果你不想每次更新了代码都要手动登录服务器上去手动部署的话,而且也用到了一些代码托管服务,你可以使用 WebHook 来实现一个简单的自动部署功能,这样的话就剩下了很多手动部署的时间了。
上面演示的都是在 Coding 上的,如果你是使用 github 来管理的代码的话,可以使用github-webhook-handler,然后进去 github 项目的设置里找到 Webhook 设置既可!
如果你还有更好的方案,不妨在留言告知我!!!
关键字:node.js, webhooks, webhook, 代码
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!