简介
webhook是一个API概念,并且变得越来越流行,我们能用事件描述的事物越来越多,webhook的作用范围也就越大, webhook作为一个清凉的事件处理应用,正变得越来越有用
工作原理
为了及时通知,此时就产生了Webhook这种概念,其实就是为了更好地去通知调用的结果。在我们发出请求的时候,可以向服务器注册一个Webhook的地址,告诉服务器说,等调用结果一出来,第一时间通过这个Webhook地址通知我,我好处理接下来的步骤。
使用场景
- 场景一 实现自动化部署
- 场景二 由于网络问题只能通过http的方式触发后端相关操作可通过webhook实现
安装以及使用
1.基于ubuntu服务器的安装(webhook官网)
root@devops-test:~# apt-get install webhook
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
bridge-utils golang-docker-credential-helpers gyp javascript-common libgd3 libjs-async libjs-inherits libjs-jquery libjs-node-uuid libjs-underscore libnginx-mod-http-geoip
libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter libnginx-mod-mail libnginx-mod-stream libsecret-1-0 libsecret-common libuv1-dev libwebp6 nginx-common nginx-core node-abbrev
node-ansi node-ansi-color-table node-archy node-async node-balanced-match node-block-stream node-brace-expansion node-builtin-modules node-combined-stream node-concat-map node-cookie-jar
node-delayed-stream node-forever-agent node-form-data node-fs.realpath node-fstream node-fstream-ignore node-github-url-from-git node-glob node-graceful-fs node-hosted-git-info node-inflight
node-inherits node-ini node-is-builtin-module node-isexe node-json-stringify-safe node-lockfile node-lru-cache node-mime node-minimatch node-mkdirp node-mute-stream node-node-uuid node-nopt
node-normalize-package-data node-npmlog node-once node-osenv node-path-is-absolute node-pseudomap node-qs node-read node-read-package-json node-request node-retry node-rimraf node-semver
node-sha node-slide node-spdx-correct node-spdx-expression-parse node-spdx-license-ids node-tar node-tunnel-agent node-underscore node-validate-npm-package-license node-which node-wrappy
node-yallist python-backports.ssl-match-hostname python-cached-property python-docker python-dockerpty python-dockerpycreds python-docopt python-funcsigs python-functools32 python-jsonschema
python-mock python-pbr python-texttable python-websocket python-yaml ubuntu-fan
Use 'apt autoremove' to remove them.
The following NEW packages will be installed:
webhook
0 upgraded, 1 newly installed, 0 to remove and 222 not upgraded.
Need to get 1443 kB of archives.
After this operation, 4979 kB of additional disk space will be used.
Get:1 http://repo.huaweicloud.com/ubuntu bionic/universe amd64 webhook amd64 2.5.0-2 [1443 kB]
Fetched 1443 kB in 0s (10.3 MB/s)
Selecting previously unselected package webhook.
(Reading database ... 145500 files and directories currently installed.)
Preparing to unpack .../webhook_2.5.0-2_amd64.deb ...
Unpacking webhook (2.5.0-2) ...
Setting up webhook (2.5.0-2) ...
Created symlink /etc/systemd/system/multi-user.target.wants/webhook.service -> /lib/systemd/system/webhook.service.
2.测试安装是否成功
root@devops-test:~# webhook -h
Usage of webhook:
-cert string
path to the HTTPS certificate pem file (default "cert.pem")
-header value
response header to return, specified in format name=value, use multiple times to set multiple headers
-hooks string
path to the json file containing defined hooks the webhook should serve (default "hooks.json")
-hotreload
watch hooks file for changes and reload them automatically
-ip string
ip the webhook should serve hooks on (default "0.0.0.0")
-key string
path to the HTTPS certificate private key pem file (default "key.pem")
-nopanic
do not panic if hooks cannot be loaded when webhook is not running in verbose mode
-port int
port the webhook should serve hooks on (default 9000)
-secure
use HTTPS instead of HTTP
-urlprefix string
url prefix to use for served hooks (protocol://yourserver:port/PREFIX/:hook-id) (default "hooks")
-verbose
show verbose output
调试以及测试webhook
1.配置webhook的启动json文件
[
{
"id": "test-webhook",
"execute-command": "/tmp/redeploy.sh",
"command-working-directory": "/tmp"
}
]
2.创建测试脚本
vi /tmp/redeploy.sh
#!/bin/bash
touch `date +%Y%m%H%M%S`
echo "this is test file ,please test"
3.启动服务
webhook -hooks hook.json -verbose --port 9001 //指定启动端口
root@devops-test:~# webhook -hooks hook.json -verbose --port 9001
[webhook] 2022/09/30 14:52:32 version 2.5.0 starting
[webhook] 2022/09/30 14:52:32 setting up os signal watcher
[webhook] 2022/09/30 14:52:32 attempting to load hooks from hook.json
[webhook] 2022/09/30 14:52:32 found 1 hook(s) in file
[webhook] 2022/09/30 14:52:32 loaded: redeploy-webhook
[webhook] 2022/09/30 14:52:32 serving hooks on http://0.0.0.0:9001/hooks/{id}
[webhook] 2022/09/30 14:52:32 os signal watcher ready
4.测试链接
root@wadequ-ThinkPad-L13:/home/wadequ# curl -v http://10.41.1.20:9001/hooks/test-webhook
* Trying 10.41.1.20...
* TCP_NODELAY set
* Connected to 10.41.1.20 (10.41.1.20) port 9001 (#0)
> GET /hooks/test-webhook HTTP/1.1
> Host: 10.41.1.20:9001
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Fri, 30 Sep 2022 06:56:42 GMT
< Content-Length: 0
< Content-Type: text/plain; charset=utf-8
<
* Connection #0 to host 10.41.1.20 left intact
5.执行结果
root@devops-test:/tmp# ls
202209145748
后续实现webhook路径传参以及通过nginx代理域名的方式实现调用