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 在构建后添加一个脚本执行命令即可

在这里插入图片描述

好的,下面是Shell脚本+钉钉机器人实现服务及服务器监控告警的步骤: 1. 创建一个Shell脚本,用于监控服务器或服务的运行状态,比如检查CPU、内存、硬盘使用情况、网络连接等。 2. 在Shell脚本中,使用curl命令调用钉钉机器人接口,将告警信息发送到指定的钉钉群中。比如: ``` #!/bin/bash # 获取CPU使用率 cpu_usage=$(top -b -n1 | grep "Cpu(s)" | awk '{print $2+$4}') # 获取内存使用率 mem_usage=$(free | awk '/Mem/{printf("%.2f"), $3/$2*100}') # 获取硬盘使用率 disk_usage=$(df -h | awk '$NF=="/"{printf "%s", $5}') # 获取网络连接数 net_conn=$(netstat -an | grep ESTABLISHED | wc -l) # 配置钉钉机器人URL和access_token url="https://oapi.dingtalk.com/robot/send?access_token=your_access_token" # 组装告警消息 msg="服务器告警:\nCPU使用率:${cpu_usage}%\n内存使用率:${mem_usage}%\n硬盘使用率:${disk_usage}\n当前连接数:${net_conn}" # 发送告警消息到钉钉群 curl -H "Content-Type: application/json" -d "{\"msgtype\": \"text\", \"text\": {\"content\": \"${msg}\"}}" ${url} ``` 3. 在服务器上设置定时任务,定期执行Shell脚本,比如每5分钟执行一次。可以使用crontab命令设置定时任务,比如: ``` */5 * * * * /path/to/your/script.sh ``` 4. 在钉钉群中添加机器人,并获取机器人的access_token。 5. 将access_token替换到Shell脚本中的url参数中,然后保存Shell脚本。 6. 等待定时任务执行,当服务器或服务的运行状态异常时,Shell脚本会自动发送告警消息到钉钉群中。 以上就是使用Shell脚本+钉钉机器人实现服务及服务器监控告警的步骤。通过这种方式,可以及时发现服务器或服务的运行异常,避免出现更大的问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值