Bootstrap

sonarqube + nexus 分析项目组成员代码状况,并生成报表

sonarqube7.3 + nexus3 分析项目组成员代码状况,并定期生成报表

通常情况下, 一个比较核心的项目都是有一个项目组的成员进行维护
如果产品经理想要了解项目进展, 了解项目组每个成员工作状况
以及每个组员的代码质量
使用sonarqube + nexus是一种不错的选择
1. sonarqube 和 nexus的使用介绍
1.1 sonarqube的安装使用

参照之前的博客即可, 博客链接:
SonarQube7.3安装和使用说明

1.2 nexus安装使用
1.2.1 nexus的作用
对于我们的项目组来说, nexus的作用在于:
通过私有仓库的构建
每次发布版本时,项目组各个成员统一提交代码到svn
然后将更新之后的代码打包放置到私仓
对私仓的jar包进行一个整体的测试,测试结果通过后发布版本给全国各地
测试未能通过的版本不予发布

这样做的好处在于 : 方便进行版本管理和控制
保证发布版本的稳定性
1.2.2 maven5.4 + nexus的安装
如果是项目组的私仓, 建议安装在linux服务器下

首先下载安装maven:
maven官网下载链接

在/usr/local(推荐)下创建maven目录
 mkdir /usr/local/maven

使用 工具下载的maven压缩包 上传到该目录下

执行命令 : tar -zxvf apache-maven-3.5.3-bin.tar.gz
解压成功后执行命令 : mvn -v 

出现如下提示: 证明安装成功

Maven home: /usr/local/maven/apache-maven-3.5.3
Java version: 1.8.0_131, vendor: Oracle Corporation
Java home: /usr/local/java/jdk1.8.0_131/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"

接下来下载安装nexus3:
nexus官网下载链接

在/usr/local下创建nexus目录
 mkdir /usr/local/nexus

使用 工具压缩包 上传到该目录下

执行命令 : tar -zxvf nexus-3.10.0-04-unix.tar.gz

nexus默认的端口号是8181,由于我们的8181端口号已经被spark占用,所以需要修改端口号,修改方式如下:

执行命令 : 
vim /usr/local/nexus/nexus-3.10.0-04/etc/nexus-default.properties
将 application-port修改为56789 , 保存并退出.
进入到bin目录下执行命令 :  ./nexus run &
出现如下提示 : Started Sonatype Nexus oss , 证明启动成功!

启动成功后,浏览器输入 : 192.168.1.54:56789进入界面查看

看到的应该是如下炫酷的界面,证明安装成功!
TIM图片20181130154804.png

1.2.3 nexus的使用与配置

可以参考如下博客:
maven私仓搭建——nexus3

2. 编写代码实现使用sonar分析项目代码,并生成报表的功能

已将代码分享到百度网盘,链接如下:
使用sonar生成报表代码

代码也同步到了github上面,可以直接去下载:
SonarReport github链接:
最终会生成一个命名为index.html的报表(直接使用浏览器打开即可)

将代码打成jar包,放到linux上面

报表效果如下:

报表一:
TIM图片20181203084430.png

报表二:
TIM图片20181203084824.png

两张报表统计了项目组里各个项目,各个成员, 各种问题的代码总数
这个报表就是项目经理每周想要看到,来对项目组成员工作进行评估的

可是如果每周都生成一份,是不是要一个人每周五执行一遍编译代码,提交代码,
执行程序,发送报表的重复操作呢? 当然不需要!
3. 更新私仓上的SVN到本地, 将代码提交到sonar,并通过定时调度每周定时生成报表
3.1 maven的settings.xml里面添加相关依赖
配置文件位置 : $MAVEN_HOME/conf/settings.xml

在profiles标签里面添加如下内容

      <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!-- Optional URL to server. Default value is http://localhost:9000 -->
                <sonar.host.url>
                    http://192.168.1.54:9000
                </sonar.host.url>
                <!-- sonar username -->
                <sonar.login>username</sonar.login>
                <!-- sonar password -->
                <sonar.password>password</sonar.password>
            </properties>
        </profile>
通过上述配置, 我们可以使用sonar管理私仓上面的项目
3.2 编译私仓上面代码,将代码提交到sonar后,执行jar包生成报表
项目里面有多个模块, 写法类似,我只截取出其中的一个

脚本如下:

    #!/bin/bash
    
    # 想要分析的svn项目的本地路径
    pom_common_dir=/data/mroxdrmerge/bigdata-common
    
    # 项目不存在,退出
    if [ ! -f "${pom_common_dir}/pom.xml" ]; then
            echo "ERROR:项目不存在"
            exit 1;
    fi
    
    #获取绝对路径
    pom_common_dir=`cd "$pom_common_dir"; pwd`
   
    echo "================================="
    echo "模快更新开始"
    echo "路径为:${pom_common_dir}"
  
    #svn更新代码
    echo "开始更新common代码"
    svn update ${pom_common_dir}
    exitCode=$?
    if [[ $exitCode -ne 0 ]];then
            echo "ERROR:common 代码更新失败"
            return 1;
    fi
    
    #将最新代码提交到sonar系统
    mvn -f=${pom_common_dir}/pom.xml sonar:sonar

    #执行jar包生成报表(jar包的参数是 sonar地址:sonar端口号)
    java -jar /home/hmaster/xmr/SonarReport-1.0-SNAPSHOT.jar 192.168.1.54:9000
    
    # 默认的文件是index.html 将其重命名为带有当天日期的
    current_dir=`pwd`
    date=`date +%Y%m%d`
    if [ -f "${current_dir}/index.html" ]; then
    	mv "${current_dir}/index.html" "${current_dir}/index_${date}.html"
    fi
生成的文件如下 :index_20181130.html

提交到sonar的状态截图:
TIM图片20181130161410.png

3.3 编写定时调度脚本,每周定时生成报表
3.3.1 定时调度简介
之前写过一篇linux定时调度crontab使用的博客,博客链接如下 :

linux下的定时调度crontab:

3.3.2 定时调度脚本编写
crontab -e 编写定时调度脚本,每一行代表一个定时调度任务

#每周五下午三点执行脚本 updatesvn.sh, 并将日志重定向到 updatesvn.txt
* 15 * * 5 cd /home/hmaster/xmr/ && ./updatesvn.sh >> /home/hmaster/xmr/updatesvn.txt

定时调度执行日志:
TIM图片20181203090525.png

综上, 我们实现了每周定时生成表表来分析项目组成员代码质量,
工作任务的功能!
4.参考文档链接

SonarQube7.3安装和使用说明
maven私仓搭建——nexus3
linux下的定时调度crontab

;