sonarqube静态代码扫描工具常见用法

  1. 安装服务器端的sonarqube
    下载地址:https://www.cnblogs.com/cxygg/p/18008738

  2. 客户端有很多种比如SonarScanner CLI,Jenkins extension for SonarQube,SonarScanner for Maven,sonarlint等

  3. 创建项目后获取token
    image-20240205202335888

    image-20240205202355943
    image-20240205202412283

  4. SonarScanner CLI 的使用

    • SonarScanner 有linux版本
      window版本下载地址

    • 解压后修改配置文件
      sonar-scanner-5.0.1.3006-windows\conf

      #Configure here general information about the environment, such as SonarQube server connection details for example
      #No information about specific project should appear here
      
      #----- sonarqube服务器地址和项目token
      sonar.host.url=http://192.168.100.66:9000
      sonar.login=sqp_480f5126ff99c9208c21f3a3db21bb7f5e0cc23b
      
      #----- Default source code encoding
      sonar.sourceEncoding=UTF-8
      
      
      
    • 把sonar-scanner-5.0.1.3006-windows\bin目录加入到环境变量path

    • 在项目代码根目录创建当前项目的配置文件

      sonar-project.properties

      #项目的唯一标记
      sonar.projectKey=TestExample
      
      #项目的名字
      sonar.projectName=TestExample
      
      #项目的版本呢
      sonar.projectVersion=1.0
      
      #代码路径,.表示当前路径
      sonar.sources=.
      #编码
      sonar.sourceEncoding=UTF-8
      #代码语言
      sonar.language=java
      #二进制文件目录,这是要跳过的
      sonar.java.binaries=target/classes
      
      
    • 启动cmd 在 sonar-project.properties所在的目录执行 sonar-scanner开心静态代码扫描
      实际上是连接到sonarqube服务器取到扫描规则,然后scanner扫描代码,扫描完成以后上传结果到soanrqube服务器。

      image-20240205203322242

    • 如果啥都不配置也可以直接命令行指定参数执行

      -Dsonar.token 或者-Dsonar.login=账号-Dsonar.password=密码,都能指定授权

      #使用token
      sonar-scanner -Dsonar.projectKey=TestExample -Dsonar.host.url=http://192.168.100.66:9000 -Dsonar.token=sqp_958bf014e49777742cc027d6fddf70cd1941ec39 -Dsonar.sources=.  -Dsonar.java.binaries=.\target -Dsonar.java.source=8 -Dsonar.sourceEncoding=UTF-8
      
      #使用账号密码登录
      sonar-scanner -Dsonar.projectKey=TestExample -Dsonar.host.url=http://192.168.100.66:9000 -Dsonar.login=admin -Dsonar.password=admin123 -Dsonar.sources=.  -Dsonar.java.binaries=.\target -Dsonar.java.source=8 -Dsonar.sourceEncoding=UTF-8
      
  5. SonarScanner for Maven 的使用
    下面的配置是 maven 的 setting.xml文件的

    <settings>
        <pluginGroups>
            <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
        </pluginGroups>
    
    	.
    	.这里是你别的maven 设置
    	.
    
    
      <profiles>
        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
    			<!--
    			可以配置的属性如下:
    			-Dsonar.projectKey=springblade   
    			-Dsonar.host.url=http://192.168.xx.xx:9000   
    			-Dsonar.login=admin 
    			-Dsonar.password=xxxxxx  
    			-Dsonar.sources=. 
    			-Dsonar.java.binaries=target 
    			-Dsonar.java.source=8 
    			-Dsonar.sourceEncoding=UTF-8
    			-->
                <sonar.host.url>
                  http://192.168.100.66:9000
                </sonar.host.url>
    			<sonar.login>
                  admin
                </sonar.login>
    			<sonar.password>
                  admin123
                </sonar.password>
            </properties>
        </profile>
     </profiles>
    </settings>
    

    打包前检查代码

    #maven 安装前执行 sonar:soane
    mvn clean verify sonar:sonar install
    
    #这里也可以添加别的参数,如果没有指定 Dsonar.projectKey 默认是maven 项目artifictId
    mvn clean verify sonar:sonar   -Dsonar.projectName=TestExample -Dsonar.projectKey=TestExample  install
    

    这里如果编译代码的JDK 是1.8 是运行不过的,sonar-scanner要求jdk17,但是这里 MVN 里面的环境是1.8,里面 sonar插件格式是JDK 17就会异常,即便配置环境变量 SONAR_JAVA_PATH也是不行,SONAR_JAVA_PATH在不是maven环境的时候可以用

  6. sonar-maven-plugin(项目内maven插件)

    有覆盖率要求的才选这种方式,这种方式会执行单元测试,一般要求项目运行jdk版本和sonar插件的需要的jdk版本一直。
    参考地址:https://www.cnblogs.com/cxygg/p/18394187

  7. Jenkins extension for SonarQube 的使用

    • 用这个插件原:https://updates.jenkins.io/updates/hudson.plugins.sonar.SonarRunnerInstaller.json

    • 安装 SonarQube Scanner插件

    • 全局配置设置 SonarQube 的地址,账号密码(或者token)
      image-20240206002927499

    • 系统配置里面添加sonarqube server地址和凭证
      image-20240206003027172

    • 配置 sonar-scanner
      image-20240206003954946

    • 如果是构建 自由风格选择 Execute SonarQube Scanner,设置 project文件位置(放在项目根目录下面)
      image-20240206162516342

    • 如果是流水线项目

      pipeline {
          agent any
      
          stages {
              stage('拉取代码') {
                  steps {
                      git branch: 'main', credentialsId: '221cd873-1038-474f-9f7c-92a84bb9bcb7', url: 'http://192.168.100.66:180/octopus/Testexample.git'
                      echo 'Hello World'
                  }
              }
              stage('编译打包') {
                  steps {
                      sh '''export JAVA_HOME=/root/tools/jdk1.8 
                            mvn clean install''' 
                      echo 'maven构建完成'
                  }
              }
              
              stage('SonarQube code checking') {
                    steps{
                         script {
                            //引入SonarqubeScanner工具
                            //sonarqube-scanner为在jenkins中定义的工具名称
                            scannerHome = tool 'SonarQube Scanner'
                        }
                         //引入SonarQube服务器环境,vm66为soanrqube服务器配置的名字
                         withSonarQubeEnv('vm66') {
                            //sonarqube-scanner工具下的脚本,这里可以传参数
                            sh "${scannerHome}/bin/sonar-scanner"
                        }
                   }
               }
              stage('启动jar') {
                  steps {
                      
                      //设置后台保活
                      /**
                       *第一行设置后台保活 
                       * 第二行杀死旧的进程
                       * 第三行复制jar
                       * 第四行启动运行 jar
                       */
                     sh '''
                           export JENKINS_NODE_COOKIE=asdsdfsdf
                           ps -ef|grep TestExample-0.0.1-SNAPSHOT.jar|awk '{print $2}'|xargs echo         
                           cp target/*.jar  /root/jar                                                      
                           java -jar /root/jar/*.jar &>/root/jar/nohup.out &                              
                           '''
                      echo '启动 jar'
                  }
              }
               
             
          }
      }
      
      
    • 调用sonarqube的质量门禁

      stage('代码质量门禁'){
          steps{
              script{
                  #等待质量门禁通过
                  def qg =waitForQualityGate()
                  echo "门禁结果为: ${qg.status}"
                  if(qg.status!='OK'){
                      echo "质量门禁不通过"
                      error '未达到Sonarqube质量门标要求!'
                  }
      
              }
          }
      }
      
  8. sonarlint的使用

    这是一个idea插件,安装插件以后,尅开始分析

    这种方式不会上传检查结果,只是拉取服务器的规则,方便代码中定义缺陷
    image-20240205214713947
    image-20240205214927014

  9. 如果项目中有html代码,那么会依赖node,如果找不到 node报错但是依旧可以出报告

  10. 如果代码里面有JS 文件,或者html文件里面有JS文件需要node环境

posted on 2024-02-05 23:14  zhangyukun  阅读(1055)  评论(0编辑  收藏  举报

导航