设置webhook_使用 WebHook 来自动部署 NodeJS 项目!

本文介绍了如何利用WebHook实现NodeJS项目的自动部署。通过编写自动部署脚本和处理WebHook请求,结合coding-webhook-handler包,当代码推送至远程仓库时,服务器将自动执行更新和启动命令,简化了手动部署流程。
摘要由CSDN通过智能技术生成

前言

在我们本地开发好一个 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 设置既可!

如果你还有更好的方案,不妨在留言告知我!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值