Analyzing Source Code

参考链接:官方文档

本文只涉及maven和sonar-scanner方式,其它请参考上面链接。

Maven

适合Maven项目

  1. 在sonarqube平台上面个人账户生成token。
  2. 在本机的mvn配置settings.xml 增加下面配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <profile>
    <id>sonar</id>
    <activation>
    <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
    <sonar.host.url>http://ip:9000</sonar.host.url>
    <sonar.login>第一步生成的token值</sonar.login>
    </properties>
    </profile>
  3. 代码库执行打包:mvn clean install
  4. 代码库进行分析并上传sonarqube平台:mvn sonar:sonar

PS:

1
2
3
4
5
6
7
8
9
10
11
12
如果代码库pom文件配置如下
<groupId>ggg</groupId>
<artifactId>aaa</artifactId>
<version>1.0.0</version>
<name>nnn</name>
那么分析上传到sonarqube平台:
对应的项目key为ggg:aaa
对应的项目名称为nnn
对应的版本为:1.0.0
注意
   不要找错项目了。
   同一个key指向的项目永远显示的是最新的一次代码分析结果。

Sonar-scanner

适合所有项目

  1. 下载Sonar-scanner,设置环境变量,配置/conf/sonar-scanner.properties
    1
    2
    3
    4
    5
    6
    7
    #Configure here general information about the environment, such as SonarQube DB details for example
    #No information about specific project should appear here
    #----- Default SonarQube server
    sonar.host.url=http://ip:9000
    #----- Default source code encoding
    sonar.sourceEncoding=UTF-8
    sonar.login=个人账户生成的token
  2. 在项目根目录增加sonar-project.properties,内容如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # must be unique in a given SonarQube instance
    sonar.projectKey=ggg:aaa #对应的项目key为ggg:aaa
    # this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
    sonar.projectName=nnn #对应的项目名称为nnn
    sonar.projectVersion=1.0.0 #对应的版本为:1.0.0
    # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
    # This property is optional if sonar.modules is set.
    sonar.sources=.
    sonar.java.binaries=target/classes #配置为项目具体的class目录,如果不配置的话只进行源代码分析
    # Encoding of the source code. Default is default system encoding
    #sonar.sourceEncoding=UTF-8
  3. 执行扫描分析:
    Build(可以不执行构建)
    sonar-scanner

API

点击:http://ip:9000/web_api/ ,查看Sonarqube支持的web_api。

以Python2.7 为例简单介绍api使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import requests

s = requests.session()
user_info = {'login': 'username', 'password': 'pass'}
api_url = 'http://ip:9000/api'
# 登录
res_login = s.post(
'%s/authentication/login' % api_url, data=user_info)
# 获取指定项目未解决Bugs详情
res_bugs = s.get(
'%s/issues/search' % api_url, params={'componentKeys': 'ggg:aaa', 'types': 'BUG', 'resolved': 'false', 'ps': 500})
# 解析结果获取未解决bugs总数
total_bugs = res_bugs.json()[u'paging'][u'total']
# 获取指定项目新增未解决Bugs详情
res_new_bugs = s.get(
'%s/issues/search' % api_url, params={'componentKeys': 'ggg:aaa', 'types': 'BUG', 'resolved': 'false', 'ps': 500, 'sinceLeakPeriod': 'true'})
# 解析结果获取新增bugs总数
new_bugs = res_new_bugs.json()[u'paging'][u'total']
# 登出
res_logout = s.post(
'%s/authentication/logout' % api_url)