自定义第三方通知
# 前言
在 Jpom 中想实现构建、项目、监控、节点分发等包含配置 webhook 的功能想实现通知第三方系统(钉钉群通知、企业微信通知、飞书群通知、第三方系统接口、邮件通知),均可采用如下方案来实现自定义。
核心思路:
- 创建一个触发第三方通知脚本
- 为脚本创建一个触发器
- 将脚本的触发器地址配置到对应的 webhook 属性
流程图
# 第三方通知脚本
第三方通知脚本的内容主要实现将 webhook 请求过来的测试解析并触发第三方通知,比如使用 curl 触发 钉钉、飞书、企业微信的群消息机器人,甚至实现邮件发送等
至于脚本内容就需要根据您使用的第三方平台的 webhook 请求规则来决定了
# 脚本中如何获取相关参数
在 Jpom 中 webhook 默认均采用 get 方式请求,并将对应事件相关参数传入(不同事件有不同的参数,还需要根据不同类型事件来判断不同的参数)。
在原始事件触发 webhook 时候传入到脚本的触发器,脚本的触发器会将请求的所有参数传入脚本中执行,为了避免参数名和其他环境变量冲突已经变量名规范,脚本触发器中会将所有的参数名拼接:trigger_xxx
,xxx为传入的参数名,再进行驼峰转下划线。
比如:请求脚本触发器参数名为:outGivingName
传入脚本的变量参数名为:trigger_out_giving_name
# 案例代码分享
# 节点分发实现通知飞书
outGivingId=${trigger_out_giving_id}
if [[ -z "${outGivingId}" ]]; then
echo "不存在分发id" 2>&2
exit 1
fi
#分发过程请求对应的地址,开始分发,分发完成,分发失败,取消分发
#传入参数有:outGivingId、outGivingName、status、statusMsg、executeTime
#status 的值有:1:分发中、2:分发结束、3:已取消、4:分发失败
#异步请求不能保证有序性
statusMsg=""
if [ "$trigger_status" == "1" ]; then #中括号两边都要有空格
statusMsg="开始准备分发(分发中)"
elif [ "$trigger_status" == "2" ]; then
statusMsg="分发结束"
elif [ "$trigger_status" == "3" ]; then
statusMsg="已取消"
elif [ "$trigger_status" == "4" ]; then
statusMsg="分发失败"
else
statusMsg="未知"
fi
#{"msg_type":"text","content":{"text":'"${text}"'}}
postData='{
"msg_type": "post",
"content": {
"post": {
"zh_cn": {
"title": "分发事件通知",
"content": [
[
{
"tag": "text",
"text": "名称:'$trigger_out_giving_name'\n"
},
{
"tag": "text",
"text": "名称:'$statusMsg'\n"
},
{
"tag": "text",
"text": "状态信息:'$trigger_status_msg'"
}
]
]
}
}
}
}'
curl -X POST -H "Content-Type: application/json" \
-d "$postData" \
https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxxxxxxxxxxxxxxxxxx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
帮助我们改善此文档 (opens new window)
上次更新: 2023/09/20, 13:11:05