最近写了一个小工具, 用来接收github webhook消息, 以在服务器上自动执行脚本
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)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。