sonarqube6.7安装及配置

部署:

1.先为sonar创建mysql数据库

mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; 
mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY '***';
mysql> FLUSH PRIVILEGES;

2.启动sonarqube服务

#docker run -d --name sonar --restart=always -p 9000:9000 -p 9092:9092 \

            -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=**** \
             -e SONARQUBE_JDBC_URL=jdbc:mysql://10.103.27.177:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance\
                      -v /server/sonarqube:/opt/sonarqube sonarqube
3.访问:

IP:9000

4.在maven项目中使用

   

mvn sonar:sonar \
-Dsonar.host.url=IP:9000 \
-Dsonar.login=b5b3cd724171df9d6fb2efb3f9c5e2d4724789f6



配置:

1.代理

如果本地计算机访问外网需要代理,sonar更新插件也需要配置代理,配置方法如下:

进入sonar安装目录/conf目录,打开sonar.properties配置文件,找到update center的配置,配置如下

     

# UPDATE CENTER
# Update Center requires an internet connection to request http://update.sonarsource.org
# It is enabled by default.将这一项设置成true
sonar.updatecenter.activate=true

# HTTP proxy (default none)配置代理ip地址和端口
http.proxyHost=172.30.XX.XX
http.proxyPort=8080

# NT domain name if NTLM proxy is used
#http.auth.ntlm.domain=

# SOCKS proxy (default none)
#socksProxyHost=
#socksProxyPort=


# proxy authentication. The 2 following properties are used for HTTP and SOCKS proxies.配置登录计算机的用户名和密码
http.proxyUser=test
http.proxyPassword=test

2.与ldap集成

  修改/opt/sonar/config/sonar.propertie文件,添加如下:

# LDAP configuration
# General Configuration
sonar.security.realm=LDAP
sonar.security.savePassword=true
ldap.url=ldap://IP:389
ldap.bindDn=cn=admin,dc=example,dc=org
ldap.bindPassword=****

# User Configuration
ldap.user.baseDn=ou=People,dc=example,dc=org
#ldap.user.request=(&(objectClass=user)(sAMAccountName={login}))
ldap.user.request=(&(objectClass=inetOrgPerson)(cn={login})) //注意这里要看自己的ldap中是用的uid还是cn
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail

# Group Configuration
#ldap.group.baseDn=ou=Groups,dc=sonarsource,dc=com
ldap.group.request=(&(objectClass=groupOfNames)(member={dn}))
ldap.group.idAttribute=cn
#sonar.log.level=DEBUG         //生产使用的时候注释掉以免影响性能

 参考:https://docs.sonarqube.org/display/PLUG/LDAP+Plugin


3.使用

  .设置规则

  在系统菜单----质量配置中选择适合自己公司的规则或新创建一套规则(也可以通过拷贝已有的规则)

  .设置质量门,如图

   sonarqube6.7安装及配置_第1张图片

  意思是当有阻断问题的大于0个则报错,当覆盖率小于80%则报错

  分析周期开始时,如果只添加或修改很少代码,就很难达到期望的代码覆盖或重复级别。为了避免质量阈失效,如果工作量不大时,只有新代码超过20行时,才会计算新代码重复读和覆盖率的质量阈条件。


其中指标参数说明:

 可靠性比率的计算方法
A = 0 Bug 最高等级A,表示代码无bug
B = at least 1 Minor Bug 代码只要有一个次要bug,等级就为B
C = at least 1 Major Bug 只要包含一个重要bug,等级将为C
D = at least 1 Critical Bug 只要有一个严重bug,等级评估为D
E = at least 1 Blocker Bug 只要有一个最高等级的阻断级别的bug,可靠性评估为E,最低级别。
A = 0 Vulnerability 没有漏洞时,项目评估为最高级别A
B = at least 1 Minor Vulnerability 只要包含一个次要漏洞,项目评估为级别B
C = at least 1 Major Vulnerability 只要包含一个重要漏洞,项目评估为级别C
D = at least 1 Critical Vulnerability 只要包含一个严重漏洞,评估为D
E = at least 1 Blocker Vulnerability 只要包含一个阻断漏洞,项目评估为最低级别E

参考:http://www.genshuixue.com/i-cxy/p/15635675


4.与jenkins的pipeline集成

    首先需要在jenkins的系统管理中配置sonar server

pipeline {
    agent  { label 'ci' }

    stages {
         stage('CheckCode') {
            steps {
                git branch: '******', credentialsId: '212d9ef0-c9c2-4bec-bc2f-6cb7065ee4b2', url: 'git@***.git'
            }
        }
 
        stage('静态检查') {
           steps {
               echo "starting codeAnalyze with SonarQube......"
               //sonar:sonar.QualityGate should pass
               withSonarQubeEnv('SonarQube') {
                 //固定使用项目根目录${basedir}下的pom.xml进行代码检查
                  withMaven(jdk: 'jdk1.8', maven: 'mvn') {
                    sh "mvn -f pom.xml -U clean compile sonar:sonar -Dsonar.branch=$BRANCH
"
                            }
                 
               }
               script {
               timeout(100) { 
                   //利用sonar webhook功能通知pipeline代码检测结果,未通过质量阈,pipeline将会fail
                   def qg = waitForQualityGate() 
                       if (qg.status != 'OK') {
                           error "未通过Sonarqube的代码质量阈检查,请及时修改!failure: ${qg.status}"
                       }
                   }
               }
           }
       }
    }
    post {    
    
            failure {
        		emailext body: '${JELLY_SCRIPT,template="static-analysis"}', recipientProviders: [[$class: 'DevelopersRecipientProvider']], subject: '构建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - Failure!'
	        }
	        success {
        	   emailext body: '${JELLY_SCRIPT,template="static-analysis"}', recipientProviders: [[$class: 'DevelopersRecipientProvider']], subject: '构建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - Success!'
        	}
	        aborted {
        		emailext body: '${JELLY_SCRIPT,template="static-analysis"}', recipientProviders: [[$class: 'DevelopersRecipientProvider']], subject: '构建通知:$PROJECT_NAME - Build # $BUILD_NUMBER - Aborted!'
        	}
            
    }

}

5.针对某个分支扫描分析,增量分析,增量报告

    mvn -f pom.xml -U clean compile sonar:sonar 

                -Dsonar.analysis.mode=preview -Dsonar.issuesReport.console.enable=true  

                -Dsonar.branch=$BRANCH_HOME    //经验证可以实现对分支的扫描分析,结果展示以另外的项目体现在sonar中。

       -Dsonar.analysis.mode=preview //在sonar6.7.1+pipelen中分析正常,也确实是增量分析,但验证质量时报错。。。。

其实也可以通过设置质量门“新增阻碍问题”来实现针对增量代码是否引入了新的阻碍问题,缺点就是也是全量分析(有点小耗时)

参考:http://blog.csdn.net/aixiaoyang168/article/details/77749552

6.配置使用中遇到的问题

  i.

   sonarqube6.7安装及配置_第2张图片

       原因:因为做了通过nginx转发,根据提示是数据太大,ng默认文件上传大小支持1M;

       解决:

打开nginx配置文件 nginx.conf, 路径一般是:/etc/nginx/nginx.conf;

。在http{}段中加入 client_max_body_size20m; 20m为允许最大上传的大小(大小可自定义)。

保存后重启nginx,问题解决。


  ii.构建完报错

java.lang.IllegalStateException: Unable to parse response fromhttp://sonar.abc.cn//api/ce/task?id=AWEiaX0J_bmqEf43r92X:

解决:修改jenkins系统配置中sonar配置,url为http://sonar.abc.cn 注意不要加/

  iii.Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (22790518 > 16777216). You can change this value on the server by setting the max_allowed_packet’ variable.

 解决:

     

show variables like '%max_allowed_packet%';
更改mysql 的max_allowed_packet参数,设置 max_allowed_packet = 64M ,然后重启mysql
[mysqld]
max_allowed_packet=32M
https://dev.mysql.com/doc/refman/5.7/en/packet-too-large.html

 注意:有些报错是可以通过查看/opt/sonarqube/logs/web.log可以看到的

你可能感兴趣的:(Devops,服务器运维,持续集成,配置管理)