前言
自从在CI/CD中集成了钉钉通知后,我就想将其做成一个通用的模块,奈何一直一直没搞定在yaml文件中使用curl
时传递的参数 涉及到复杂json对象 和变量的情况。
如果在自定义通知的内容里使用变量,方案会变得更加优雅,通用。一开始我是从CI/CD的script 字符转义入手,但多次尝试,也一直没搞定这个嵌套,嵌套,又嵌套的content传值。
最近我又玩弄起了这个折磨我千百遍的问题,但这次我搜索了有关curl的文章与复杂传值,
看到了这篇文章,https://blog.csdn.net/weixin_49114503/article/details/119679741
看到了这个代码片段,
于是乎,大悟,得到以下触发自定义通知内容的脚本。
- 'curl -H "Content-type: application/json" -d ''{"msgtype":"text", "text":{"content":"CI/CD通知''${CI_PROJECT_NAME}'',分支''${CI_COMMIT_REF_NAME}''部署集成环境成功"}}'' $DING_WEBHOOK'
上面的script,在调用一个接口时,参数使用了一个二维的json对象,并且在该对象中,使用了变量。这种非常重要的,使用了变量后,它将变得非常灵活,多变。
在发送钉钉通知时,也可以使用MarkDown写法。或者艾特他人(使用手机号)。
再补充一个加强优雅版,将消息主题提取出来,定义到一个变量中。
# 发送文本消息
test_text_ding_talk:
variables:
NOTIC_CONTENT: 'CI/CD通知${CI_PROJECT_NAME},分支${CI_COMMIT_REF_NAME}署集成环境成功'
script:
- 'curl -H "Content-type: application/json" -d ''{"msgtype":"text", "text":{"content":"''${NOTIC_CONTENT}''"}}'' $DING_WEBHOOK'
# 发送markdown消息
test_md_ding_talk:
variables:
NOTIC_CONTENT: 'CI/CD通知${CI_PROJECT_NAME},分支${CI_COMMIT_REF_NAME}署集成环境成功,技术支持[拿我格子衫来](https://fizzz.blog.csdn.net/)'
script:
- 'curl -H "Content-type: application/json" -d ''{"msgtype":"markdown", "markdown":{"title":"PmcFizz","text":"''${NOTIC_CONTENT}''"}}'' $DING_WEBHOOK'
分享自己的经验,帮助他人。
后记
在GitLab CI/CD中,是没有那种直接填写一个表单,配置的插件使用的,所有的流程都要自己去实现。他给你提供的是关键词和预设变量。帮助你掌握作业运行是时机和其他各种状况,但不与其他任何工具集成。如果要继承,请尝试使用curl
调用具体的接口。 比如飞书通知,企业微信通知,邮件通知。
资料补充
钉钉机器人对接文档
本文含有隐藏内容,请 开通VIP 后查看