gitee码云使用webhook
我们经常使用GitHub、GitLab、Gitee 之类的仓库,有时候需要频繁的发布代码打包,人工发布,工作量有时候会很大,有时候还容易出错,所以会使用Jenkins一类的工具进行辅助,但是如果是一个简单的项目或者是个人项目使用Jenkins就显得太重了,可以直接使用webhook,比较方便。
准确的说webhoo是一种web回调或者http的push API,是向APP或者其他应用提供实时信息的一种方式。Webhook在数据产生时立即发送数据,也就是你能实时收到数据。这一种不同于典型的API,需要用了实时性需要足够快的轮询。这无论是对生产还是对消费者都是高效的,唯一的缺点是初始建立困难。
Webhook有时也被称为反向API,因为他提供了API规则,你需要设计要使用的API。Webhook将向你的应用发起http请求,典型的是post请求,应用程序由请求驱动。
配置webhook
需要服务器配置项目公私钥, 确保服务器能过正常通过git pull项目 文档
1.配置私钥
ssh-keygen -t rsa -C "xxxxx@xxxxx.com"
# Generating public/private rsa key pair...
# 三次回车即可生成 ssh key
2.查看公私钥
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....
3.添加公钥
4.测试
ssh -T git@gitee.com
Welcome to Gitee.com, yourname! # 返回,说明正常
配置服务器
确保服务器已经安装node, 使用node 创建自动部署的项目
npm init
使用 yarn或者 npm 安装依赖库
npm install log4js --save #日志 npm i --save gitee-webhook-handler #gitee 依赖
- 创建脚本 app_gitee.js
var createHandler = require('gitee-webhook-handler')
var handler = createHandler({ path: '/webhooks_push', secret: '123456' })# post 所需要用到的秘钥
function run_cmd(cmd, args, callback) {
var spawn = require('child_process').spawn;
var child = spawn(cmd, args);
var resp = "";
child.stdout.on('data', function(buffer) { resp += buffer.toString(); });
child.stdout.on('end', function() { callback (resp) });
}
handler.on('error', function (err) {
console.error('Error:', err.message)
})
handler.on('Push Hook', function (event) { # 这个地方就是GitHub 和 Gitee 不一样的地方,需要注意
console.log('Received a push event for %s to %s',
event.payload.repository.name,
event.payload.ref);
run_cmd('sh', ['./deploy.sh'], function(text){ console.log(text) });# 需要执行的脚本位置
})
try {
http.createServer(function (req, res) {
handler(req, res, function (err) {
res.statusCode = 404
res.end('no such location')
})
}).listen(6666) # 服务监听的端口,可以自行修改
}catch(err){
console.error('Error:', err.message)
}
4.创建需要执行的脚本 deploy.sh
#! /bin/bash
SITE_PATH='/usr/local/www/smart-docs'
USER='root'
USERGROUP='root'
cd $SITE_PATH
git reset --hard origin/master
git clean -f
git pull
git checkout master
chown -R $USER:$USERGROUP $SITE_PATH
- 启动服务并测试
node app_gitee.js
使用pm2应用进程管理器
使用node 启动服务不是很方便,推荐使用pm2
npm install -g pm2 安装
pm2 start webhook.js 启动
pm2 kill 关闭
pm2 monit # 可以通过此命令查看服务的状态
评论已关闭