代码改变世界

jenkins 设置钉钉机器人+jenkins调用shell脚本使用钉钉机器人自定义发消息并通知指定人

2020-11-17 12:02  加个小鸡腿  阅读(3396)  评论(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