hook koa web 码云_gitee码云使用webhook
原因
我们经常使用GitHub、GitLab、Gitee 之类的仓库,有时候需要频繁的发布代码打包,人工发布,工作量有时候会很大,有时候还容易出错,所以会使用Jenkins一类的工具进行辅助,但是如果是一个简单的项目或者是个人项目使用Jenkins就显得太重了,可以直接使用webhook,比较方便。
什么是webhook
准确的说webhoo是一种web回调或者http的push API,是向APP或者其他应用提供实时信息的一种方式。Webhook在数据产生时立即发送数据,也就是你能实时收到数据。这一种不同于典型的API,需要用了实时性需要足够快的轮询。这无论是对生产还是对消费者都是高效的,唯一的缺点是初始建立困难。
Webhook有时也被称为反向API,因为他提供了API规则,你需要设计要使用的API。Webhook将向你的应用发起http请求,典型的是post请求,应用程序由请求驱动。
配置webhook
知道什么是webhook 后我们就要开始配置我们自己的项目了。
环境:
CentOS7
Gitee(网上GitHub的教程比较多,这个基于码云)
配置项目公私钥
生产公钥
ssh-keygen -t rsa -C "xxxxx@xxxxx.com"
# Generating public/private rsa key pair...
# 三次回车即可生成 ssh key
查看公钥
cat ~/.ssh/id_rsa.pub
# ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6eNtGpNGwstc....
添加公钥
image-2018-153940@2x.png
测试
ssh -T git@gitee.com
Welcome to Gitee.com, yourname! # 返回,说明正常
配置服务器node环境
安装nvm,服务器上使用nvm 方便多版本node切换
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
vim /etc/profile
#加入下面的内容
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
source /etc/profile
nvm install stable # 安装稳定版
nvm current # 查看当前的版本
配置相关的脚本
安装gitee-webhook-handler(GitHub,GitLab,gitee 的包是不同的,不能混用)
mkdir /opt/webhook #创建目录
cd /opt/webhook
npm init # 初始化项目,方便以后迁移
npm install gitee-webhook-handler --save # 当前的版本为v0.1.2
创建对应的webhook服务
vim webhook.js
var http = require('http')
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)
}
创建需要执行的脚本
vim deploy.sh
git pull xxxxx # 根据自己的需要自行编写
测试服务
WX20180225-163439@2x.png
WX20180225-163748@2x.png
显示ok,说明成功
使用pm2应用进程管理器
使用node 启动服务不是很方便,推荐使用pm2
npm install -g pm2
pm2 start webhook.js
pm2 monit # 可以通过此命令查看服务的状态
WX20180225-164721@2x.png
上图显示了一些应用的基本信息,可以更好的观察到服务的状态
结束
配置完成后,只要pull代码到仓库,就会触发webhook执行脚本,十分的方便,同时减少了工作量,相对采用轮询的方式消耗的资源更小。
hook koa web 码云_gitee码云使用webhook相关推荐
- hook koa web 码云_Doodoo.js 发布 1.1.0,Koa.js+ Nuxt.js 最佳实践
doodoo.js发布1.1.0 -- 中文最佳实践Node.js Web快速开发框架,支持Koa.js, Express.js中间件.包含多项功能改进,及Bug修复. 更新内容: 1.[新增]新增支 ...
- markdown如何设置图片大小_Gitee(码云)实现免费 Markdown 图床
" 阅读本文大概需要 6 分钟 前言 Markdown是一种易于上手的轻量级标记语言,由于其目的在于注重文字内容而不是排版,目前很受大家欢迎,写完一篇文档可以直接复制到其他各大平台上,不用担 ...
- 阿里云喻义:十年牧码,从码农走向工程师的进化之路
有人会问,码农和工程师有区别吗?有什么区别?相信每个人都有不同的理解. "你敲下的每一行代码,你想过他会如何在计算机上运行吗?你想过你的这一行代码会产生多少cache miss吗?你想过你的 ...
- 媒体转码切片_cVideo云转码系统
背景 随着前端摄像机的清晰度不断提升,其码流和数据量成倍增长.然而一些终端的处理能力有限,无法支持高清的分辨率:或者需要用到公网传输,带宽无法满足高清的码流的需求等.视频转码是一个高运算负荷的过程,需 ...
- 视频云转码源码PHP|m3u8切片程序双码率+秒切
视频云转码源码可以从管理控制台内提升特定转码作业的优先级,以手动增加等待作业的优先级.视频云转码源码作业可以在数据中心之间进行平衡.因此,如果一个DC的转码作业队列比通常更长,则可以在源视频文件与另一 ...
- 云转码源码(视频云转码)双码率+秒切
我们之前讨论过一种解决方案是利用云服务的力量对视频进行转码.虽然可以使用本地计算进行转码,但过去三年生成的大量内容--以及大部分内容是以 4K 格式获取的事实--使得云转码成为一个更具吸引力的主张(即 ...
- PHP云转码安装教程
Windows环境(windows7)默认的ffmpeg文件夹是linux的程序,需要复制粘贴windows版本的ffmpeg到网站根目录(覆盖)(添加环境变量) 准备工具:准备工具.jpg ...
- requests利用selenium,代理Ip,云打码,验证码抠图操作 爬取搜狗微信公众号内容
爬取思路,爬取搜狗微信公众号内容,爬取第一层url时请求太快出现验证码,我这里用的蘑菇云代理,并在程序中我判断什么情况下是否+代理,做到合理运用代理ip.爬取第二层url时验证码出现次数更严重(和第一 ...
- 阿里云推荐码(wzrd94)
我有一个阿里云9折推荐码:wzrd94,分享给你,第一次购买云服务器或云数据库可享受原价9折优惠,还可多人使用,拿走不谢. 欢迎使用! 1分享推荐码给好友,好友帐号下无运行中的ECS.RDS.弹性we ...
最新文章
- 说得太好了!阿里巴巴为什么不用 ZooKeeper 做服务发现?
- HashSet源码分析
- 洛谷P1709 [USACO5.5]隐藏口令Hidden Password
- Java编程的逻辑 (56) - 文件概述
- java nature_什麼是Eclipse項目的JavaEMFNature nature?
- Fedora 17 Beta is declared GOLD.
- 操作系统的概念,功能和目标
- 不同版本的散点图矩阵
- 利用python进行数据加载和存储
- Python深度学习
- 创建FB-定义接口(基础版)
- 2018湘潭大学程序设计竞赛【E】
- 计算机单位 字节,字节是什么意思?字节是什么单位
- 多模光纤与单模光纤熔接及用哪种光模块的问题。
- 浅谈~区块链的现状与未来!
- C# 代码 Unicode码和字符串相互转换
- 免费高清录直播的软件分享
- 一款基于 Spring Boot 的神仙接私活项目,已开源,2022 接私活必备!
- [读书笔记] 《修炼之道:.NET 开发要点精讲》
- AVX指令集函数列表中文翻译
热门文章
- S/4HANA生产订单的标准状态和透明工厂原型状态的映射
- AWS实例上AMI和用户名的映射表
- Cloud for Customer的工作中心(work center)加载器
- How to connect iOS simulator to Chrome for debugging
- IBASE logical view和physical view
- Code Issues 2,637 Pull requests 0 Projects 1 Wiki Security Insights Settings 使用filter node快速找到XML f
- Mockito框架学习之stub then return
- Java里的class对象 - class object
- 什么是Github的元数据metadata以及如何备份github上的数据
- SAP S4HANA使用ABAP获得生产订单的状态