Code Monkey home page Code Monkey logo

go_git_webhooks's Introduction

git web hooks

1、搭建一个web server来接收web hooks的http请求

2、将接收到的请求push到消息队列

3、搭建一个自动运行脚本,异步处理接收的请求,在服务端执行命令行


http request -> web server -> message queue  ->cli server 1
                                             -> cli server 2
                                             -> cli server ...

4、这里的单机案例,如果多机需要执行的话,可选用Redis发布/订阅 或者 可用rabbitmq 队列的订阅模式,在各个机器运行 -server cli 服务

目录结构


├─service/              处理方法
│  ├─redis.go           redis操作类
│  ├─server_cli.go      脚本运行文件
│  └─server_http.go     http服务文件
└─main.go               入口文件

下载安装包(此操作将包安装在gopath/src 下)
Install: 
$ go get -u github.com/go-redis/redis

$ go build go_git_webhooks


运行 http server: (为了防止恶意请求,加一个sign key验证 http请求合法性。)
$ path/go_git_webhooks -server=http -port=8888 -sign=123456

运行 cli server:
$ path/go_git_webhooks -server=cli


后台运行:
nohup path/go_git_webhooks -server=cli > /var/log/cli_$(date +\%Y-\%m-\%d).log 2>&1 &


更多参数
$ path/go_git_webhooks -help
  -debug
        Are you debug?
  -port string
        http服务端口,8888 (default "8888")
  -process string
        process member ? (default "1")
  -redishost string
        redis ip:端口 ? (default "localhost:6379")
  -server string
        服务类型 (http/cli) ? (default "http")
  -sign string
        http请求鉴权key, 设置后请求需要验证 &sign=key

配置nginx:

image

配置git web hooks:

image

测试:
curl -XGET http://webhooks.liukelin.top?sign=123456&d={"shell":"cd /var/www/obj/ && git pull"}

d:{
    "shell":"" // 服务端所需要执行的命令
}

相当于:
/bin/sh cd /var/www/obj/ && git pull

也可以将参数d的值base64_encode后传递:
curl -XGET http://webhooks.liukelin.top?sign=123456&d=eyJzaGVsbCI6ImNkIC92YXIvd3d3L29iai8gJiYgZ2l0IHB1bGwifQ==

{"shell":"cd /var/www/object && expect /var/log/web_hooks/git_shell.exp"}
{"shell":"cd /var/www/object2 && expect /var/log/web_hooks/git_shell.exp"}

总结:

延伸下去,就是个分布式任务调度系统。

优化项:
    对于shell值,为了安全,可以做下命令过滤
    server cli 是消费队列数据,消费模式下单机里可以开启多个进程消费
    server cli 执行命令可使用异步操作,
    消费任务,可加入ACK机制(比如配合使用rabbitmq),允许消费失败归队
    end...

代码优化:
    and...

go_git_webhooks's People

Contributors

liukelin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

Forkers

skyformat99

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.