使用WebHook来自动部署coding项目

我们使用的是 Coding 来管理我们的代码,我们可以使用到 coding-webhook-handler 这个包。只要我们在 coding.net 提交了代码,就会自动将代码拉取到服务器的目录

webHook配置

1
2
3
4
5
6
7
8
//创建 webHook 项目目录
mkdir webHook
//进入 webHook 目录
cd webHook
//npm 初始化项目
npm init
//安装 coding-webhook-handler
npm i -S coding-webhook-handler

webhook.js

在webHook目录下新建webhook.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
var http = require('http')
var createHandler = require('coding-webhook-handler')
let { spawn } = require("child_process")
var exec = require('child_process').exec

var handler = createHandler({
path: '/webhook',
token: 'autopull' // maybe there is no token
})

http.createServer(function(req, res) {
handler(req, res, function(err) {
res.statusCode = 404
res.end('no such location')
})
}).listen(7777)

handler.on('error', function(err) {
console.error('Error:', err.message)
})

handler.on('*', function(event) {
console.log(event.event)
console.log(event.payload)
console.log(event.protocol)
console.log(event.host)
console.log(event.url)
})

handler.on('push', function(event) {
console.log(event)
console.log('开始拉取代码')
let path = "/home/wwwroot/" + event.payload.repository.name + "/"
runCommand(path, txt => {
console.log(txt)
})
})

handler.on('star', function(event) {
console.log(event)
})

const runCommand = (PATH, callback) => {
var commands = [
'cd ' + PATH,
'git reset --hard origin/master',
'git clean -f',
'git pull'
].join(' && ')

exec(commands, function(err, out, code) {
if (err instanceof Error) {
callback({ code: 0, message: "error:" + err })
}
// process.stderr.write(err)
process.stdout.write(out)
callback({ code: 0, message: out })
})
}

coding.net 设置自己项目的webhook

登录coding.net,点击【设置】就可以看到webHook

图片

接着我们可以在右面看到:

图片

然后点击新建 Hook 进入一个页面:

图片

  • url:就是访问你webhook.js启动服务的域名。
  • token:非必要,如果使用了需要在createHandler里面也对应的填写上

部署到服务器

首先先将项目clone到自己的服务器,然后才会自动更新代码。

1
git clone https://coding用户名:密码@git.coding.net/didianV5/test.git

进入webHook目录,使用 npm webhook.js 启动服务器。

项目源码

源码下载: https://github.com/didianV5/node-study/tree/master/webHook

参考链接

https://segmentfault.com/a/1190000005644039

谢谢你请我吃糖果