jenkins 设置钉钉机器人+jenkins调用shell脚本使用钉钉机器人自定义发消息并通知指定人
2020-11-17 12:02 加个小鸡腿 阅读(5445) 评论(0) 编辑 收藏 举报两种钉钉通知方式,一种是使用安装的钉钉插件来通知,但是这个不好定义通知内容,没办法控制发送条件,只要配置了,不管构建参数(分支,渠道,配置),都会发通知,第二种是使用脚本的方式来通知,这个可以自定义通知内容(根据构建参数的变更发送消息)。可用于不同的场景。
首先需要在钉钉群里设置下钉钉机器人:
打开钉钉群设置以后,找到"智能群助手",点击"智能群助手"后调到如下页面添加机器人:
选择自定义机器人,进入机器人添加设置页面,机器人名字自定义,接收群组不可填写,就是当前钉钉群,安全设置,我选择的是自定义关键字,可以添加多个,然后点击完成以后,会生成一个webhook,记住webhook的token,待会需要这个token来发消息,机器人要设置关键词,消息中包含关键词才能发消息,设置如下:
钉钉群机器人就添加好了,接下来需要设置jenkins了,jenkins需要安装‘’钉钉插件”,可在jenkins的管理-》插件功能中搜索安装。
【如果你发现你脚本没问题,但是就是收不到钉钉消息,记得来这里看看关键字是否满足】
场景1:钉钉群只需要知道构建结果和构建链接,其它不关心,可以使用jenkins上钉钉插件的方式来通知,设置如下:
(1)添加构建后操作,选择钉钉通知设置:
(2)输入刚才的webhook对应的token,并选择合适发送通知,
设置就那么简单,如上构建成功就会发钉钉消息,但是你的通知消息里必须包含钉钉设置里的"安全设置"中设置的关键字,否则消息不会发送成功,这里的关键字可以设置为“jenkins” 或者"Success"等。
场景2:开发测试群里,大家只想知道构建后包的ftp归档路径,然后取路径包进行测试,至于构建链接和构建失败与否,并不关心,并且只需要给测试开发群发提测分支的构建即可,其它分支的构建不需要发消息。
这个不需要在jenkins上配置钉钉通知,使用jenkins调用shell脚本即可,脚本中可以控制何种参数配置发送,比如,我只想发端sdk是develop分支的时候发消息,脚本send_ding.sh可以这样写:
#!bin/sh if [ "$phrepo" = "send_sdk" -a "$ph_branch" = "develop" ];then now_time=`date "+%Y%m%d%H%M"` commit=`git rev-parse --short HEAD` ph_branch=`echo $ph_branch_tmp |sed 's/\.//g'` #删除分支名中的点符号 now_time="$now_time"_"$ph_branch"_"$commit"_"$phoenix_type" #设置路径格式:日期_分支_commitid_类型 ding_ftp=ftp://192.168.8.1/output/ph_ftp_dir/$now_time/ #使用curl来发送钉钉消息,消息内容是构建归档路径 curl 'https://oapi.dingtalk.com/robot/send?access_token=123xxxxxxxxx' \ -H 'Content-Type: application/json' \ -d '{"msgtype": "text","text": {"content": "出新包啦! '$ding_ftp'"}}' fi
关键的是curl那句,就是来发送钉钉消息的,钉钉群消息结果如下:
机器人图片可以自己设置,可以看出我的内容中包含了安全设置的“output”。
另外,如何将消息通知到具体的某个人呢,我们看到钉钉开发文档中有如下描述:
我们看上面图片,可以知道如何拼接shell脚本的curl通知,如下:
curl 'https://oapi.dingtalk.com/robot/send?access_token=123xxxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text","text": {"content": "重构sdk出新包啦! '$ding_ftp' @151xxxx6512 "},"at": {"atMobiles": ["151xxxx12"],"isAtAll": false}}'
注意:如果@前面是链接的话,必须加空格,之后再@151xxxx12,所以,不管@前是什么,都加一个空格再接后面的@151xxxx12
这样就可以具体通知到某个人了,如果要通知多个人,直接加号码就可以了,比如两个:
@151xxxx46 @151xxxx52"},"at": {"atMobiles": ["151xxxx36","151xxxx52"],"isAtAll": false}
钉钉和jenkins的配合使用,目前我了解的就这些了,如果你有更多新奇的玩法,欢迎留言。
参考:https://blog.csdn.net/workdsz/article/details/77531802
钉钉开发文档:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq