Skip to content

haierkeys/multi-node-webhook-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Multi-node HTTP Endpoints Server (Multi-node Webhook Tools)

multi-node-webhook 是 golang编写的多节点服务器脚本/命令执行工具

主要用于服务器集群的脚本执行(代码更新,程序部署)操作

multi-node-webhook 特点:

  1. 多节点执行,任意节点服务器都可以作为master服务器
  2. 可以解析通知端传递过来的POST参数,并将参数依次传递到各个节点服务器
  3. 统一的配置文件

Future 计划:

  1. 自动从中心服务器同步config
  2. 节点服务器状态维护
  3. 节点服务器无配置文件组集群
  4. 错误通知
  5. More...

multi-node-webhook 使用示例 (CI/CD流程最后的更新代码/程序到服务器):

CI/CD 打包docker镜像后,推送到阿里云镜像仓库
通过设置好的触发器通知multi-node-webhook,
multi-node-webhook在接受到HTTP请求之后会解析POST参数,
传递参数传递到各个节点服务器,各个节点服务器执行预设的shell脚本或bash命令

一. 启动 Run

  • 启动参数
    参数 参数说明 必选
    -c 配置文件路径 [缩写]
    -config 配置文件路径 是,
    -c参数二选一
    -host 服务启动的绑定的host;
    例如 ":8080" 则表示绑定并监听8080端口
    否,
    不提供会使用配置文件内的值
    -id 当前服务器的唯一ID
  • 源码启动:

    go run webhook.go -id master -c config.json
    
  • 执行程序启动 (目前支持linux 和 windows)

    multi-node-webhook -id master -c config.json
    

    这样就启动 multi-node-webhook 服务器了。

二.配置 Config

  • 完整的配置文件示例 vim config.json
    {
      "nodes" :[
        {
          "id": "master",
          "host": ":8888"
        },
        {
          "id": "node1",
          "host": "192.168.16.1:8888"
        }
      ],
      "hooks": [
        {
          "key": "update",
          "commands": [
            {
              "id": "master",
              "command": "ls",
              "display": true,
              "parm_bind": "{\"-a=\":\"\\\"tag\\\":\\\"([a-z0-9.-]+)\\\"\"}"
            },
            {
              "id": "node1",
              "command": "docker_redeploy.sh",
              "display": true,
              "parm_bind": "{\"var\":[\"push_data\",\"tag\"]}"
            }
          ]
        }
      ]
    }
  • 配置参数说明
    • nodes为节点服务器列表
    • hooks为脚本列表
      • id对应的节点服务器
      • command需要执行的脚本命令
        注意当 hook内没有定义command值则不会在对应的节点服务器执行,用于定义webhook中心服务器
      • display 为是否打印运行信息
      • parm_bind 则用于设置将请求的POST内容通过正则匹配传递给command,
        • 正则的规则为 JSON(参数完整格式:正则表达式)
          例如:"{"-a=":"\"tag\"\:\"([a-z0-9.-]+)\""}
          匹配POST内容"tag":"tag1"中的tag1并将最终拼接为执行命令command -a=tag1
      • 注意当 hook内没有定义command值则不会在对应的节点服务器执行,用于定义webhook中心服务器

三.访问 Multi-Node-Webhook 并执行webhook

启动 ./multi-node-webhook -c config.json -id master 访问URL

http://{ip}:{port}/{hookKey}?node=1

  • ip 服务器IP
  • port 服务器端口
  • hookKey 配置中hook脚本key
  • node 仅限当前节点执行,不执行集群更新

四. 服务方式启动

vim /lib/systemd/system/node-webhook.service

[Unit]
Description=Multi-node HTTP Endpoints Server (Multi-node Webhook Tools)
Documentation=https://github.com/haierspi/multi-node-webhook-go
ConditionPathExists=/data/config.json 

[Service]
ExecStart=/data/multi-node-webhook -c /data/config.json -id master

[Install]
WantedBy=multi-user.target