Skip to content
一个接收webhook的http server
Go Other
  1. Go 99.1%
  2. Other 0.9%
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
example
scripts
.gitignore
README.md
cmd.go
go.mod
go.sum
grace.go
hook_test.go
http.go
init.go
log_hook.go
middware.go
script_config.go
server.go

README.md

github hook server

一个用来接收webhook的server

环境

golang v1.11+ (因为用到了go mod)

安装

执行:

go get -u github.com/gaopengfei123123/hook

创建文件 main.go

package main

import (
    "github.com/gaopengfei123123/hook"
)

func main() {
    hook.Execute()
}

执行命令

go build -o app main.go

app 这个二进制文件就是本体了, 放到合适的地方, 执行:

./app start -d

后台启动, app 同目录下会创建 scripts, logs 两个目录, 和一个 hook.pid 保存pid

检测是否启动:

[root@xxx]# curl localhost:8080/ping
{"message":"pong v5"}

说明服务已经启动成功, 服务地址为0.0.0.0:8080

接口

  • 0.0.0.0:8080/ping 检测接口
  • 0.0.0.0:8080/push 接受github webhook请求, 根据 Repository.Name 去判断执行什么脚本

可用指令

reload      重新加载日志, 以及平滑重启
start       启动命令, -d 后台运行
stop        终止命令
version     程序版本

目录功能:

  • logs 存放请求日志
  • scripts 存放hook脚本, 当有对应库名的请求进来, 将执行配置好的脚本
  • hook.pid 存放进程pid

配置文件

{
    "github_hook": {        // 以请求消息中的 repository.name 字段来做key
        "secret": "xxxxxx", // 如果设置了secret则会用这个进行验证, 为空则不验证
        "script_path": "",  // 脚本所在绝对目录, 为空就是当前的script目录
        "event": {
            "push": "test"  // 推送事件执行的脚本
        }
    }
}

特性

  • 一键初始化
  • 平滑重启, 信号通信
  • 支持secret验证
  • 异步执行脚本
  • 规避重放
  • 脚本传递参数(TODO)
  • 事件钩子(TODO)

依赖组件

You can’t perform that action at this time.