运行工作流时,您可能需要在工作流运行结束或它的某个步骤完成时通知外部系统。例如邮件通知、即时消息(例如钉钉)、消息总线(例如Kafka)。本文以发送钉钉消息为例介绍如何在工作流运行中发送消息通知。
前提条件
已创建分布式工作流Argo集群,且工作流集群的VPC具有公网访问能力。
实现原理
外部系统一般通过暴露HTTP Webhook接口的方式,接受消息输入。
Argo工作流支持Exit Handler机制。您可以在工作流的步骤中定义
exit-handler
,也可以在工作流本身定义exit-handler
。Exit Handler以容器的方式运行。您可以在容器中运行
curl
命令向外部系统发送HTTP消息,从而实现事件通知。
步骤一:创建钉钉机器人
创建钉钉机器人后会生成专属的Webhook地址,通过Webhook地址可以关联到其他服务接收通知,例如Argo工作流。
设置完成后,复制并保存Webhook地址。
步骤二:在工作流中使用钉钉机器人
使用以下YAML示例代码,创建工作流,并在工作流中使用钉钉机器人。关于创建工作流的具体操作,请参见创建工作流。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: notification-demo-
spec:
entrypoint: say-hello
onExit: exit-handler # 工作流运行完成后,运行exit-handler。
templates:
- name: say-hello
container:
image: alpine:latest
command: [sh, -c]
args: ["echo hello"]
- name: exit-handler
container:
image: curlimages/curl
command: [sh, -c]
# 运行curl发送钉钉消息,消息类型为链接类型,可以嵌入Argo工作流控制台链接,快速查看工作流详情。
# 可以引用变量包括:{{workflow.name}} {{workflow.status}} {{workflow.failures}} {{workflow.workflow.duration}}。
args: [
"curl -H 'Content-Type: application/json' -d '{
\"msgtype\": \"link\",
\"link\": {
\"title\":\"Argo workflow notification\",
\"text\":\"WF {{workflow.name}} {{workflow.status}}\",
\"messageUrl\":\"https://argo.xxx.cn-zhangjiakou.alicontainer.com:2746/workflows/default/{{workflow.name}}?tab=workflow\"
}
}'
https://oapi.dingtalk.com/robot/send?access_token=b97fb519129fdfce879baa4e3b905b14e6a64e8994f0ea3b11dda****" #Webhook地址,此处替换为您钉钉群的Webhook地址。
]
发送的钉钉消息示例如下所示。
相关文档
关于钉钉自定义机器人接入的具体操作,请参见自定义机器人接入。