SonarQube 集成钉钉机器人报告 Shell 脚本


Jenkins集成SonarQube:https://blog.csdn.net/qq_39680564/article/details/108533596

一、思路

上篇文档解决了 Jenkins 集成 SonarQube 平台的问题,使用了两天发现 Jenkins 每次扫描完,都需要开发手动点击 Sonar 链接,跳转到 Sonar 平台上,才能知道扫描出了多少代码的问题,如下图:
在这里插入图片描述
在这里插入图片描述
项目构建完如果没有报错的话,开发很少会去 Sonar 平台上看问题, 所以想出了钉钉机器人自定义通知这么一个方法,可以在 Jenkins 扫描后,直接将结果通过钉钉机器人的 Webhook 发到钉钉群里面,自动化通知扫描结果,然后可以通过点击群通知链接,跳转到 Sonar 平台。实现效果如下图:

在这里插入图片描述

二、实现步骤

2.1 钉钉机器人设置

关键词加上 BUG漏洞。然后复制出 Webhooktoken 值。

在这里插入图片描述

2.2 Shell脚本

# 调用查询异常状态接口函数,该接口是在SonarQube平台直接爬的
function issues() {
  curl -sH "Content-Length:0" -X GET "http://192.168.1.22:29000/api/issues/search?resolved=false&facets=severities%2Ctypes&componentKeys=$1"
}

# 类型
for i in {0..2}
do
  a=`issues $1 | jq '.facets[1].values['${i}'].val'`

  if [ ${a} = '"BUG"' ]
  then
    BUG=$(echo "BUG:`issues $1 | jq '.facets[1].values['${i}'].count'`个")
    N_BUG=`issues $1 | jq '.facets[1].values['${i}'].count'`
  fi

  if [ ${a} = '"VULNERABILITY"' ]
  then
    VULNERABILITY=$(echo "漏洞:`issues $1 | jq '.facets[1].values['${i}'].count'`个")
    N_VULNERABILITY=`issues $1 | jq '.facets[1].values['${i}'].count'`
  fi

  if [ ${a} = '"CODE_SMELL"' ]
  then
    CODE_SMELL=$(echo "异味:`issues $1 | jq '.facets[1].values['${i}'].count'`个")
  fi
done

# 严重程度
for i in {0..4}
do
  b=`issues $1 | jq '.facets[0].values['${i}'].val'`

  if [ ${b} = '"MINOR"' ]
  then
     MINOR=$(echo "次要:`issues $1 | jq '.facets[0].values['${i}'].count'`个")
  fi

  if [ ${b} = '"MAJOR"' ]
  then
     MAJOR=$(echo "主要:`issues $1 | jq '.facets[0].values['${i}'].count'`个")
  fi

  if [ ${b} = '"CRITICAL"' ]
  then
    CRITICAL=$(echo "严重:`issues $1 | jq '.facets[0].values['${i}'].count'`个")
  fi

  if [ ${b} = '"INFO"' ]
  then
    INFO=$(echo "提示:`issues $1 | jq '.facets[0].values['${i}'].count'`个")
  fi

  if [ ${b} = '"BLOCKER"' ]
  then
  BLOCKER=$(echo "阻断:`issues $1 | jq '.facets[0].values['${i}'].count'`个")
  fi
done

#echo ${BUG},${VULNERABILITY},${CODE_SMELL} "{" ${BLOCKER},${CRITICAL},${MAJOR},${MINOR},${INFO} "}"
# 钉钉机器人提醒
function alarmdingding(){
  apiurl="https://oapi.dingtalk.com/robot/send?access_token=b03xxxxxxxxxxxxxf8a3f"
  /bin/curl ${apiurl} \
    -X POST -H "Content-Type: application/json" \
    -d '{"msgtype": "link","link": {"text": "'$1'项目检测结果:'${BUG}','${VULNERABILITY}','${CODE_SMELL}' { '${BLOCKER}','${CRITICAL}','${MAJOR}','${MINOR}','${INFO}' }","title": "代码扫描报告 ","picUrl": "https://app.asiayd.com/pic/sonar.jpg","messageUrl": "http://192.168.1.22:29000/dashboard?id='$1'"}}'
}

#echo ${N_BUG} ${N_VULNERABILITY}
# 判断BUG数与漏洞数是否都为0,如果都为0就没必要发钉钉通知了。
if [[ ${N_BUG} -ne "0" ]] || [[ ${N_VULNERABILITY} -ne "0" ]]
then 
  alarmdingding $1
fi

2.3 Jenkins配置

Jenkins 在构建后添加一个脚本执行命令即可

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值