我们通过Jenkins的influxdb插件,可以把jenkins job和Sonarqube的相关信息和构建结果存库。然后通过Grafana进行视图展现,这样就实现了对jenkins的Job监控和分析。
步骤如下:
1、在服务器上安装influxdb(可以连grafana一起安装,写个批处理同时启动grafana和influxdb)
#!/bin/bash
# Author:smooth
# Date:2019-03-14
InstanceCount=1
Cur_Dir=$(cd "$(dirname "$0")"; pwd)
influxdb_v=influxdb-1.5.1 #nfluxdb所在目录
grafana_v=grafana-6.0.1 #grafana所在目录
chmod -R 777 $Cur_Dir/$influxdb_v/bin
chmod -R 777 $Cur_Dir/$grafana_v/bin
echo -n `date +'%Y-%m-%d %H:%M:%S'`
echo "----Current directory is " $PWD
# 检查$ProcessName实例是否已经存在
#while [ 1 ] ; do
#$PROCESS_NUM获取指定进程名的数目
PROCESS_NUM=`ps -ef | grep "influxd" | grep -v "grep" | wc -l`
if [ $PROCESS_NUM -lt $InstanceCount ];
then
StopCount=`expr $InstanceCount - $PROCESS_NUM `
echo -n `date +'%Y-%m-%d %H:%M:%S'`
echo "----influxd service [total $StopCount] was not started."
echo -n `date +'%Y-%m-%d %H:%M:%S'`
echo "----Starting influxd service[total $StopCount] ."
(nohup $Cur_Dir/$influxdb_v/bin/influxd -config $Cur_Dir/$influxdb_v/influxdb.conf) >>/dev/null 2>&1 &
else
PROCESS_PID=`pidof -s influxd | awk '{print $1}'`
echo -n `date +'%Y-%m-%d %H:%M:%S'`
echo "---kill influxd [pid $PROCESS_PID]"
pidof -s influxd | awk '{print $1}' | xargs kill -9
sleep 2
echo "----Restart influxd service[total $InstanceCount]."
(nohup $Cur_Dir/$influxdb_v/bin/influxd -config $Cur_Dir/$influxdb_v/influxdb.conf) >>/dev/null 2>&1 &
fi
PROCESS_NUM=`ps -ef | grep "grafana-server" | grep -v "grep" | wc -l`
if [ $PROCESS_NUM -lt $InstanceCount ];
then
StopCount=`expr $InstanceCount - $PROCESS_NUM `
echo -n `date +'%Y-%m-%d %H:%M:%S'`
echo "----grafana service [total $StopCount] was not started."
echo -n `date +'%Y-%m-%d %H:%M:%S'`
echo "----Starting grafana service[total $StopCount] ."
cd $Cur_Dir/$grafana_v/bin
(nohup ./grafana-server) >>/dev/null 2>&1 &
else
PROCESS_PID=`pidof -s grafana-server | awk '{print $1}'`
echo -n `date +'%Y-%m-%d %H:%M:%S'`
echo "---kill grafana-server [pid $PROCESS_PID]"
pidof -s grafana-server | awk '{print $1}' | xargs kill -9
sleep 2
echo "----Restart grafana service[total $InstanceCount]."
cd $Cur_Dir/$grafana_v/bin
(nohup ./grafana-server) >>/dev/null 2>&1 &
fi
sleep 2
2、在Jenkins上安装influxdb插件,并配置influx db的数据库信息(在Jenkins的系统管理中配置)
3、在Jenkins 的单个job上配置 influx db的插件(具体见https://wiki.jenkins.io/display/JENKINS/InfluxDB+Plugin)
4、每次的 Jenkins Job的构建结果就会存库
5、如果需要获取sonarqube_data就要求jenkins配好sonarqube,并且项目的权限是公开(私有的话数据发送不到influxdb)
6、通过grafana读取 influxdb 的方法,直接进行查询操作,类sql
对于获取到的数据,通过influxdb的连接工具InfluxDB Studio可以看到,一般包括这三个库。
有了这三部分数据,我们就可以去配置Grafana,展现奇迹的时候了。首先我们需要Grafana上系统设置中,以【Data Sources / InfluxDB】创建数据源。然后就是配置Dashboard和添加统计面板。
(一) jenkins_data展示
这块数据包括的是所有jenkins的构建数据,在利用这部分数据时,我们建议是创建项目名称变量(projectName),这个变量就是Jenkins的Job Name。
然后我们需要获取项目构建成功和失败的数据,首先想到的是饼图,但是Grafana默认是不带有饼图的,可以通过命令 grafana-cli plugins install grafana-piechart-panel 进行安装(安装完后需要重启grafana)。
有了饼图,就可add Panel时选择视图插件Pie Chart,配置上三条SQL:
SELECT count("build_result") FROM "jenkins_data" WHERE ("build_result" = 'SUCCESS' AND "project_path" =~ /^$projectName$/) AND $timeFilter GROUP BY time($__interval) fill(null)
第一条语句配置ALIAS BY构建成功。第二条语句和第一条一样,就是将条件"build_result" = 'FAILURE',ALIAS BY构建失败;第三条语句也一样,就是将条件"build_result" = 'ABORTED',ALIAS BY构建中断。
最后将Visualzation配置如下:
然后配置完后预览效果如下:
除了饼图,我们可以来个Gauge和Graph,来展现项目的健康指数和健康趋势。
Gauge配置SQL如下:
SELECT "project_build_health" FROM "jenkins_data" WHERE ("project_path" =~ /^$projectName$/) AND $timeFilter
Gauge的Visualization配置如下(显示Current值,五色Thresholds配置):
Graph配置SQL如下:
SQL一:SELECT "build_time" FROM "jenkins_data" WHERE ("project_path" =~ /^$projectName$/) AND $timeFilter ORDER BY time DESC,ALIAS BY构建耗时,设置Y轴的单位为Time->毫秒(ms)。
SQL二:SELECT "project_build_health" FROM "jenkins_data" WHERE ("project_path" =~ /^$projectName$/) AND $timeFilter ORDER BY time DESC,ALIAS BY健康指数。
我们在Graph的Visualization中对第二个SQL进行差异化样式配置:
最后显示的效果图如下:
除了饼图和Graph,我们也可以来个Table,把influxdb的jenkins_data数据显示出来。配置SQL如下(FORMAT AS Table):
SELECT "build_agent_name", "build_number", "build_result", "build_status_message", "build_time", "project_build_health" FROM "jenkins_data" WHERE ("project_path" =~ /^$projectName$/) AND $timeFilter GROUP BY "project_name" ORDER BY time DESC
(二)changelog_data展示
这部分数据显示的是来自己SVN或Git提交的代码修改信息,所以依赖于这两插件推送的数据。
一样是配置table,显示列表信息,SQL如下(SQL配置可以比较灵活,以下只是供参考):
SELECT "affected_paths", "build_number", "commit_count", "commit_messages", "culprits", "display_name" FROM "changelog_data" WHERE ("project_path" =~ /^$projectName$/) AND $timeFilter GROUP BY "project_name" ORDER BY time DESC
另外我们可以灵活配置列名,方法有两种,一种是用AS的方式:
另一种是直接配置列的样式:
配置完后的显示效果如下:
(三)sonarqube_data展示
这部分数据是由sonarqube插件推送过来的,所以需要确保装好sonarqube、SonarScanner或SonarScanner for MSBuild等插件并正常扫描代码(另外要求sonarqube对项目的权限是公开的才行)。
首先我们准备个饼图来展现各项目的代码行数,配置SQL为:SELECT "lines_of_code" FROM "sonarqube_data" WHERE $timeFilter GROUP BY "project_name",ALIAS BY为$tag_project_name。统计效果如下:
然后我们再做个代码行数变化趋势图(用Graph图),配置SQL为:SELECT "lines_of_code" AS "代码行数" FROM "sonarqube_data" WHERE $timeFilter GROUP BY "project_name",ALIAS BY为【代码行数$tag_project_name】。统计效果如下:
最后我们配一个整体的sonarqube_data数据表,用talbe控件来实现,对应SQL如下:
SELECT "project_path" AS "项目名称", "blocker_issues" AS "阻断问题", "critical_issues" AS "严重问题", "major_issues" AS "重要问题", "minor_issues" AS "次要问题", "info_issues" AS "提示问题", "display_name" AS "构建名号", "lines_of_code" AS "代码行数" FROM "sonarqube_data" WHERE $timeFilter ORDER BY time DESC LIMIT 20
我们可以在列中添加URL链接,实现跳转到sonarqube页面上进行总览报告查看(通过id=$_cell可通过列值来访问项目名跳转到指定项目的sonarqube页面):
我们还可以进行颜色配置来对代码问题数量进行三色预警,也可以通过URL配置跳转到具体的sonarqube查看代码问题:
配置完后的效果如下:
以上列表中的链接,可以直接跳转到SonarQube页面,进行代码问题分析:
这样我们就实现了通过Grafana+InfluxDB来监视Jenkins的Job构建情况,以及分析代码质量,查看问题趋势变化,而且这样的配置是非常灵活的,即可以做到高大上,又能够辅助项目的管理和控制,非常实用。
版权声明:本文为博主原创文章,未经博主允许不得转载。博客 https://smooth.blog.csdn.net//article/details/88551268
网友评论