基于网上的各大教程,在jienkins中实现钉钉通知的办法有2种,一种是使用jenkins的插件DingTalk,可以实现构建过程的钉钉群机器人消息,还有一种就是自己写shell脚本在构建中进行调用。
一、jenkins中的DingTalk插件
1、可以直接在jenkins插件中搜索安装,该插件的github地址为https://github.com/jenkinsci/dingtalk-plugin

2、在系统管理–系统配置—钉钉 配置项进行配置,配置前需要你在钉钉上有一个钉钉群并且添加了机器人。
机器人需要登录电脑版钉钉客户端,选择一个钉钉群,在群设置里面–只能群助手–添加机器人–自定义(通过webhook接入自定义服务)

3、创建jenkins任务,选择并配置钉钉机器人

4、设置完毕后执行jenkins即可收到钉钉消息了。
二、通过shell脚本来实现
此方法来源网上,本人没有实际验证,在此贴上原文地址: https://www.jianshu.com/p/b5cec83d6bb8
为方便学习及留档下面贴出上面实现的部分shell代码dingding.sh
#!/bin/bash#================================================================# HEADER#================================================================# Filename send-ding.sh# Revision 0.0.1# Date 2020/06/08# Author jiangliheng# Email jiang_liheng@163.com# Website https://jiangliheng.github.io/# Description 发送钉钉消息# Copyright Copyright (c) jiangliheng# License GNU General Public License##================================================================## Version 0.0.1 2020/06/08# 发送钉钉消息,支持 text,markdown 两种类型消息##================================================================#%名称(NAME)#% ${SCRIPT_NAME} - 发送钉钉消息#%#%概要(SYNOPSIS)#% sh ${SCRIPT_NAME} [options] <value> ...#%#%描述(DESCRIPTION)#% 发送钉钉消息#%#%选项(OPTIONS)#% * -a <value> 钉钉机器人 Webhook 地址的 access_token#% * -t <value> 消息类型:text,markdown#% & -T <value> title,首屏会话透出的展示内容;消息类型(-t)为:markdown 时#% * -c <value> 消息内容,content或者text#% & -m <value> 被@人的手机号(在 content 里添加@人的手机号),多个参数用逗号隔开;如:138xxxx6666,182xxxx8888;与是否@所有人(-A)互斥,仅能选择一种方式#% & -A 是否@所有人,即 isAtAll 参数设置为 ture;与被@人手机号(-m)互斥,仅能选择一种方式#% -v, --version 版本信息#% --help 帮助信息#%#% * 表示必输,& 表示条件必输,其余为可选#%#%示例(EXAMPLES)#%#% 1. 发送 text 消息类型,并@指定人#% sh ${SCRIPT_NAME} -a xxx -t text -c "我就是我, 是不一样的烟火" -m "138xxxx6666,182xxxx8888"#%#% 2. 发送 markdown 消息类型,并@所有人#% sh ${SCRIPT_NAME} -a xxx -t markdown -T "markdown 测试标题" -c "# 我就是我, 是不一样的烟火" -A#%#================================================================# END_OF_HEADER#================================================================# header 总行数SCRIPT_HEADSIZE=$(head -200 "${0}" |grep -n "^# END_OF_HEADER" | cut -f1 -d:)# 脚本名称SCRIPT_NAME="$(basename "${0}")"# 版本VERSION="0.0.1"# usagefunction usage() {head -"${SCRIPT_HEADSIZE:-99}" "${0}"| grep -e "^#%"| sed -e "s/^#%//g" -e "s/${SCRIPT_NAME}/${SCRIPT_NAME}/g" -e "s/${VERSION}/${VERSION}/g"}# 发送 ding 消息function sendDingMessage() {curl -s "${1}" -H 'Content-Type: application/json' -d "${2}"}# 检查参数输入合法性function checkParameters() {# -a,-t,-c 参数必输校验if [ -z "${ACCESS_TOKEN}" ] || [ -z "${MSG_TYPE}" ] || [ -z "${CONTENT}" ]thenprintf "Parameter [-a,-t,-c] is required!n"exit 1fi# -t 为:markdown 时,检验参数 -T 必输if [ "X${MSG_TYPE}" = "Xmarkdown" ] && [ -z "${TITLE}" ]thenprintf "When [-t] is 'markdown', you must enter the parameter [-T]!n"exit 1fi# -A 和 -m 互斥,仅能选择一种方式if [ "X${IS_AT_ALL}" = "Xtrue" ] && [ -n "${MOBILES}" ]thenprintf "Only one of the parameters [-A] and [-m] can be entered!n"exit 1fi}# markdown 消息内容function markdownMessage() {# 标题title=${1}# 消息内容text=${2}# @ 方式at=${3}# 判断是@所有人,还是指定人if [ -z "${at}" ]; thenatJson=""elif [ "X${at}" = "Xtrue" ]; thenatJson='"at": {"isAtAll": true }'else# 判断是否多个手机号result=$(echo "${at}" | grep ",")# N 个手机号if [ "X${result}" != "X" ]; then# 转换为手机号数组mobileArray=(${at//,/ })# 循环遍历数组,组织 json 格式字符串for mobile in "${mobileArray[@]}"domobiles="${mobile}",${mobiles}# @ 指定人atMobiles="@${mobile}",${atMobiles}done# 1 个手机号elsemobiles="${at}"# @ 指定人atMobiles="@${at}"fi# @ json内容atJson='"at": {"atMobiles": ['${mobiles/%,/}']}'# 内容信息添加 @指定人text="${text}n${atMobiles/%,/}"fimessage='{"msgtype": "markdown","markdown": {"title":"'${title}'","text": "'${text}'"},'${atJson}'}'echo "${message}"}# text 消息内容function textMessage() {# 消息内容text=${1}# @ 方式at=${2}# 判断是@所有人,还是指定人if [ -z "${at}" ]; thenatJson=""elif [ "X${at}" = "Xtrue" ]; thenatJson='"at": {"isAtAll": true }'else# 判断是否多个手机号result=$(echo "${at}" | grep ",")# N 个手机号if [ "X${result}" != "X" ]; then# 转换为手机号数组mobileArray=(${at//,/ })# 循环遍历数组,组织 json 格式字符串for mobile in "${mobileArray[@]}"domobiles="${mobile}",${mobiles}# @ 指定人atMobiles="@${mobile}",${atMobiles}done# 1 个手机号elsemobiles="${at}"# @ 指定人atMobiles="@${at}"fi# @ json内容atJson='"at": {"atMobiles": ['${mobiles/%,/}']}'# 内容信息添加 @指定人text="${text}n${atMobiles/%,/}"fimessage='{"msgtype": "text","text": {"content": "'${text}'"},'${atJson}'}'echo "${message}"}# 主方法function main() {# 检查参数输入合法性checkParameters# 判断发送消息类型case ${MSG_TYPE} inmarkdown)# 判断 @ 方式if [ -n "${MOBILES}" ]; thenDING_MESSAGE=$(markdownMessage "${TITLE}" "${CONTENT}" "${MOBILES}")elif [ -n "${IS_AT_ALL}" ]; thenDING_MESSAGE=$(markdownMessage "${TITLE}" "${CONTENT}" "${IS_AT_ALL}")elseDING_MESSAGE=$(markdownMessage "${TITLE}" "${CONTENT}")fi;;text)if [ -n "${MOBILES}" ]; thenDING_MESSAGE=$(textMessage "${CONTENT}" "${MOBILES}")elif [ -n "${IS_AT_ALL}" ]; thenDING_MESSAGE=$(textMessage "${CONTENT}" "${IS_AT_ALL}")elseDING_MESSAGE=$(textMessage "${CONTENT}")fi;;*)printf "Unsupported message type, currently only [text, markdown] are supported!"exit 1;;esacsendDingMessage "${DING_URL}" "${DING_MESSAGE}"}# 判断参数个数if [ $# -eq 0 ];thenusageexit 1fi# getopt 命令行参数if ! ARGS=$(getopt -o vAa:t:T:c:m: --long help,version -n "${SCRIPT_NAME}" -- "$@")then# 无效选项,则退出exit 1fi# 命令行参数格式化eval set -- "${ARGS}"while [ -n "$1" ]docase "$1" in-a)# Webhook access_tokenACCESS_TOKEN=$2# 钉钉机器人 url 地址DING_URL="https://oapi.dingtalk.com/robot/send?access_token=${ACCESS_TOKEN}"shift 2;;-t)MSG_TYPE=$2shift 2;;-T)TITLE=$2shift 2;;-c)CONTENT=$2shift 2;;-m)MOBILES=$2shift 2;;-A)IS_AT_ALL=trueshift 2;;-v|--version)printf "%s version %sn" "${SCRIPT_NAME}" "${VERSION}"exit 1;;--help)usageexit 1;;--)shiftbreak;;*)printf "%s is not an option!" "$1"exit 1;;esacdonemain
如果shell水平可以的朋友可以尝试自己或让后端同学对接下钉钉的消息通知(钉钉有提供在企业应用下,以应用的名义给指定用户发消息的功能),也就是说后面利用jenkins+shell+后端的钉钉消息通知接口 可以实现将jenkins结果通知给企业钉钉组织架构指定用户 或分别通知给不同的用户!
发表评论