实现github的自动钩子
实现github的自动钩子
最近在学习go,也写了一些玩具放到自己的服务器中,但是感觉每次写完在本地交叉编译后上传到服务器略显麻烦,上传代码到服务器中编译也是略显麻烦,把编译文件加入到git管理中会导致git包变大,拉取代码变慢,特别是神秘之墙的存在会导致拉取github代码很慢,所以就实现了一下github的自动钩子,在服务器上自动编译并完成自动部署,记录一下实现的过程。
实现服务端
首先,我们需要准备一个供webhook调用的服务端,我这里用go实现了一个demo,更多功能请参考官方文档
webhook 其实就是每当接受到push的时候,会向我们注册的url中发送一条post请求,请求中的参数可以参考webhook的文档。
package main
import (
"crypto/hmac"
"crypto/sha1"
"encoding/hex"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"os/exec"
"strings"
)
const Secret = "AxkkeqzADO8WjkBT"
const HookShell = "/data/hook.sh"
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
//我们这里只接收json的请求体
if contentType := r.Header.Get("content-type"); contentType != "application/json" {
throwError(w, "not json")
return
}
bytes,err := ioutil.ReadAll(r.Body)
if err != nil {
throwError(w, fmt.Sprintln("body err", err))
return
}
//首先应该对secret进行校验
signature := r.Header.Get("X-Hub-Signature")
if len(signature) <= 0 {
throwError(w, "signature empty")
return
}
hash := hmac.New(sha1.New, []byte(Secret))
hash.Write(bytes)
sign := "sha1=" + hex.EncodeToString(hash.Sum(nil))
if strings.Compare(sign, signature) != 0 {
throwError(w, "signature error")
return
}
var body map[string]interface{}
if err := json.Unmarshal(bytes, &body); err != nil {
throwError(w, fmt.Sprintln("Unmarshal err", err))
return
}
//body里就已经获取到我们想要的数据了, 在这里我们只拿取push的分支,更多参数参考可以参考文档
ref, ok := body["ref"].(string)
if !ok {
throwError(w, "!ok")
return
}
//拿到的ref:refs/heads/master,我们只需要把前面截掉,就是我们想要的分支名
branch := strings.TrimLeft(ref, "refs/heads/")
//我们这里只对master分支进行自动部署
if branch != "master" {
w.WriteHeader(200)
_,_ = w.Write([]byte("not update"))
return
}
//我这里的部署是运行一个shell脚本,我们可以在这里写自动更新和部署的逻辑
if err := exec.Command(HookShell).Run(); err != nil {
w.WriteHeader(500)
_,_ = w.Write([]byte("deploy error"))
}
})
_ = http.ListenAndServe(":49999", nil)
}
func throwError(w http.ResponseWriter, msg string) {
w.WriteHeader(400)
_,_ = w.Write([]byte("bad request. " + msg))
}
配置webhook
部署完成后,我们需要在仓库中添加一个webhook


在webhooks配置中,需要输入钩子的url,content-type这里我选择application/json,secret这里是你的密钥,然后我这里只需要对push操作进行响应。
配置完成后,提交代码测试即可
实现github的自动钩子的更多相关文章
- GitHub + circleCI 自动构建/自动部署 应用
GitHub + circleCI 自动构建/自动部署, 这里略过了单元测试,以部署 laravel 应用为例子 比起 gitlab + ansible + genkins 操作起来节省了很多硬件资源 ...
- 使用 Github Actions 自动部署 Angular 应用到 Github Pages
前言 最近在学习 Angular,一些基础的语法也学习的差不多了,就在 github 上新建了一个代码仓库,准备用 ng-zorro 搭个后台应用的模板,方便自己以后写些小东西时可以直接使用.前端项目 ...
- 利用 Github Actions 自动更新 docfx 文档
利用 Github Actions 自动更新 docfx 文档 Intro docfx 是微软出品一个 .NET API 文档框架,有一个理念是代码即文档,会根据项目代码自动生成 API 文档,即使没 ...
- 如何使用 Github Actions 自动抓取每日必应壁纸?
如何白嫖 Github 服务器自动抓取必应搜索的每日壁纸呢? 如果你访问过必应搜索网站,那么你一定会被搜索页面的壁纸吸引,必应搜索的壁纸每日不同,自动更换,十分精美.这篇文章会介绍如何一步步分析出必应 ...
- hexo配合github action 自动构建(多种形式)
已经使用HEXO正常构建GitHub页面 根据github action 给hexo配置自动部署github page 前往墨抒颖的个人网站查看纯净版 1. 为仓库设置访问密钥 第一步先生成密钥,打开 ...
- 使用Github Action自动填写疫情通
使用Github Action自动填写疫情通 西电晨午晚检一天三次,通过企业号功能进行填写.实际上,西电企业号大部分功能是以网页模式工作的,通过构造connection发送合适的request,设置计 ...
- 5 分钟教你快速掌握 GitHub Actions 自动部署博客
自从 GitHub 宣布 GitHub Actions 在平台上对所有开发人员和存储库可用以来,GitHub Actions 越来越受欢迎.很多第三方平台在生态系统中有速度等限制,将进一步推动开发人员 ...
- 用GitHub Actions自动部署Hexo
什么是 GitHub Actions ? GitHub Actions 是一个 CI/CD(持续集成/持续部署)工具,GitHub 于 2018 年 10 月推出,正式版于 2019 年 11 月正式 ...
- Github webhooks 自动部署博客文章,使用总结【含视频】
作者:小傅哥 博客:https://bugstack.cn 原文:https://mp.weixin.qq.com/s/VtTHUfyiITNSoGy052jkXQ 沉淀.分享.成长,让自己和他人都能 ...
随机推荐
- BraveOS正式版发布,希望大家下载使用
废话不多说,直接贴图才是王道 这里是DOS系统+默认官方(Platform系统) 下载地址:http://pan.baidu.com/s/1eQINwx8 (引导进Platform系统后,默认管理员帐 ...
- 达观数据CTO纪达麒:小标注数据量下自然语言处理实战经验
自然语言处理在文本信息抽取.自动审校.智能问答.情感分析等场景下都有非常多的实际应用需求,在人工智能领域里有极为广泛的应用场景.然而在实际工程应用中,最经常面临的挑战是我们往往很难有大量高质量的标注语 ...
- CentOS 7 安装 LNMP 环境(PHP7 + MySQL5.7 + Nginx1.10)
记录下在CentOS 7 安装 LNMP 环境(PHP7 + MySQL5.7 + Nginx1.10)过程笔记. 工具 VMware版本号 : 12.0.0 CentOS版本 : 7.0 一.修改 ...
- 什么是redis
什么是redis 1.Redis是远程的 有客户端和服务端,客户端和服务端可以布置在不同的机器上,两者经过redis自定义的协议远程传输和交互的,我们一般说的是服务端. 2.Redis是基于内存的 所 ...
- [转]VsCode搭建Java开发环境(Spring Boot项目创建、运行、调试)
源码地址:https://github.com/YANGKANG01/Spring-Boot-Demo 安装扩展 安装如下两个主要扩展即可,这两个扩展已关联java项目开发主要使用的maven.spr ...
- win10下,cmd,power shell设置默认编码为‘UTF-8’?
这个问题可以终结了,最新版 Windows 10 支持 UTF-8 了.打开这个选项,cmd 和 powershell 默认就是 UTF-8 了.在控制面板-时钟和区域-区域-管理-更改系统区域设置( ...
- [Ramda] Handle Errors in Ramda Pipelines with tryCatch
Handling your logic with composable functions makes your code declarative, leading to code that's ea ...
- H3C DHCP中继基本配置
- 正则&转义字符&特殊字符
正则 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑. 由于正则表达式主要应用对 ...
- url查找参数
function GetUrlParam(paraName) { var url = document.location.toString(); var arrObj = url.split(&quo ...