创建一个简单的Webhook服务
本文首发于个人博客 Cyy’s Blog
转载请注明出处 https://cyyjs.top/blog/603c711fd67bdd000f281383
上篇文章有介绍,如何实现Github项目自动构建部署到阿里云ECS,当部署成功或失败时,可以调用任务插件
给我们发送通知,除了钉钉通知
和邮箱通知
外,我们还可以自定义webhooks
来实现自定义通知。
# 什么是webhooks
?
Web开发中的Webhook是一种使用自定义回调来增强或更改网页或Web应用程序行为的方法。这些回调可以由不一定与原始网站或应用程序有关联的第三方用户和开发人员维护、修改和管理。术语"webhook"是"Jeff Lindsay"在2007年从计算机编程术语hook创造的。
格式通常是JSON。该请求作为HTTP POST请求完成。
说白了,webhook就是一种服务间特定调用方式的统称,表现形式就是一个普通的http
服务。
这个服务支持一个POST
请求,参数为JSON
# 服务开发
上面说了,服务就是一个提供了POST
请求的一个接口,代码很简单,这里使用Nodejs
来编写,可参考cyyjs/hooks。
以如何实现Github项目自动构建部署到阿里云ECS中使用的阿里Flow为例,当服务部署成功后,会调用Webhooks插件
,那么我们接受到的参数是什么呢?官方文档有介绍:
为以下参数:
{
"event": 'task',
"action": 'status',
"task": {
"pipelineId": 183,
"pipelineName": 'test pipeline',
"stageName": '构建',
"taskName": 'java构建',
"buildNumber": 19,
"statusCode": 'SUCCESS', \\ UNKOWN, RUNNING, WAITING, CANCELLING, CANCELED,FINISH,SUCCESS,FAIL,SKIP
"statusName": '运行成功',
"pipelineUrl": 'https://rdc.aliyun.com/ec/pipelines/156539?build=19',
"message": '[test pipeline]流水线阶段[构建]任务[java构建]运行成功'
},
"sources": [
{
"repo": 'git@gitlab:test.git',
"branch": 'master',
"commitId": 'xdfdfdff',
"privousCommitId": 'ddddd',
}
],
"globalParams": [
{"key": 'test', "value": 'test1'},
{"key": 'test2', "value": 'test2'}
]
}
信息包含执行的任务信息:任务名称、执行状态等、还有代码相关:repo地址、分支等;我们可以此来作为通知依据。
# 发送通知
我们拿到数据后,就可以用自己喜欢的方式来发送通知了,如发送邮件、微信服务号通知、企业微信机器人通知等等。
本人在无意间发现一个好玩的开源项目Bark,可以给自己的iPhone
手机发送通知。
需要安装Bark客户端,安装完成后,打开可生成一条自己设备相关的唯一链接
通过往这个链接发送请求,即可接收到通知,并且支持多种通知类型,和多种通知声音。