原因

我们经常使用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相关推荐

  1. 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.[新增]新增支 ...

  2. markdown如何设置图片大小_Gitee(码云)实现免费 Markdown 图床

    " 阅读本文大概需要 6 分钟 前言 Markdown是一种易于上手的轻量级标记语言,由于其目的在于注重文字内容而不是排版,目前很受大家欢迎,写完一篇文档可以直接复制到其他各大平台上,不用担 ...

  3. 阿里云喻义:十年牧码,从码农走向工程师的进化之路

    有人会问,码农和工程师有区别吗?有什么区别?相信每个人都有不同的理解. "你敲下的每一行代码,你想过他会如何在计算机上运行吗?你想过你的这一行代码会产生多少cache miss吗?你想过你的 ...

  4. 媒体转码切片_cVideo云转码系统

    背景 随着前端摄像机的清晰度不断提升,其码流和数据量成倍增长.然而一些终端的处理能力有限,无法支持高清的分辨率:或者需要用到公网传输,带宽无法满足高清的码流的需求等.视频转码是一个高运算负荷的过程,需 ...

  5. 视频云转码源码PHP|m3u8切片程序双码率+秒切

    视频云转码源码可以从管理控制台内提升特定转码作业的优先级,以手动增加等待作业的优先级.视频云转码源码作业可以在数据中心之间进行平衡.因此,如果一个DC的转码作业队列比通常更长,则可以在源视频文件与另一 ...

  6. 云转码源码(视频云转码)双码率+秒切

    我们之前讨论过一种解决方案是利用云服务的力量对视频进行转码.虽然可以使用本地计算进行转码,但过去三年生成的大量内容--以及大部分内容是以 4K 格式获取的事实--使得云转码成为一个更具吸引力的主张(即 ...

  7. PHP云转码安装教程

    Windows环境(windows7)默认的ffmpeg文件夹是linux的程序,需要复制粘贴windows版本的ffmpeg到网站根目录(覆盖)(添加环境变量) 准备工具:准备工具.jpg      ...

  8. requests利用selenium,代理Ip,云打码,验证码抠图操作 爬取搜狗微信公众号内容

    爬取思路,爬取搜狗微信公众号内容,爬取第一层url时请求太快出现验证码,我这里用的蘑菇云代理,并在程序中我判断什么情况下是否+代理,做到合理运用代理ip.爬取第二层url时验证码出现次数更严重(和第一 ...

  9. 阿里云推荐码(wzrd94)

    我有一个阿里云9折推荐码:wzrd94,分享给你,第一次购买云服务器或云数据库可享受原价9折优惠,还可多人使用,拿走不谢. 欢迎使用! 1分享推荐码给好友,好友帐号下无运行中的ECS.RDS.弹性we ...

最新文章

  1. 说得太好了!阿里巴巴为什么不用 ZooKeeper 做服务发现?
  2. HashSet源码分析
  3. 洛谷P1709 [USACO5.5]隐藏口令Hidden Password
  4. Java编程的逻辑 (56) - 文件概述
  5. java nature_什麼是Eclipse項目的JavaEMFNature nature?
  6. Fedora 17 Beta is declared GOLD.
  7. 操作系统的概念,功能和目标
  8. 不同版本的散点图矩阵
  9. 利用python进行数据加载和存储
  10. Python深度学习
  11. 创建FB-定义接口(基础版)
  12. 2018湘潭大学程序设计竞赛【E】
  13. 计算机单位 字节,字节是什么意思?字节是什么单位
  14. 多模光纤与单模光纤熔接及用哪种光模块的问题。
  15. 浅谈~区块链的现状与未来!
  16. C# 代码 Unicode码和字符串相互转换
  17. 免费高清录直播的软件分享
  18. 一款基于 Spring Boot 的神仙接私活项目,已开源,2022 接私活必备!
  19. [读书笔记] 《修炼之道:.NET 开发要点精讲》
  20. AVX指令集函数列表中文翻译

热门文章

  1. S/4HANA生产订单的标准状态和透明工厂原型状态的映射
  2. AWS实例上AMI和用户名的映射表
  3. Cloud for Customer的工作中心(work center)加载器
  4. How to connect iOS simulator to Chrome for debugging
  5. IBASE logical view和physical view
  6. Code Issues 2,637 Pull requests 0 Projects 1 Wiki Security Insights Settings 使用filter node快速找到XML f
  7. Mockito框架学习之stub then return
  8. Java里的class对象 - class object
  9. 什么是Github的元数据metadata以及如何备份github上的数据
  10. SAP S4HANA使用ABAP获得生产订单的状态