SonarQube-[配置Scanner|使用Scanner|java,web前端,go代码扫描]

root
233
文章
0
评论
2021年10月12日19:30:48 评论 8084字阅读26分56秒

SonarQube-配置Scanner

scanner的类型有很多, 可以通过官网:https://docs.sonarqube.org/8.9/analysis/overview/ 获取支持的列表。

  • 变更项目代码: 可以使用构建工具进行扫描。例如maven、ant、gradle可以在配置文件中引入对应的配置。
  • 不变更项目代码配置: 可以使用Jenkins或其他平台的扩展插件, 以及使用命令行进行扫描。

这里先通用版本

 

● Gradle - SonarScanner for Gradle
● .NET - SonarScanner for .NET
● Maven - use the SonarScanner for Maven
● Jenkins - SonarScanner for Jenkins  (Jenkins 集成插件)
● Azure DevOps - SonarQube Extension for Azure DevOps   (devops平台扩展插件)
● Ant - SonarScanner for Ant
● anything else (CLI) - SonarScanner(更加通用的扫描命令行)

/data/sonar-scanner-4.6.2.2472-linux/conf是scanner的配置文件,用于连接服务器端

root@jeekins sonar-scanner-4.6.2.2472-linux]# cat conf/sonar-scanner.properties 
#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here

#----- Default SonarQube server
#sonar.host.url=http://localhost:9000

#----- Default source code encoding
#sonar.sourceEncoding=UTF-8

 

使用更加灵活的命令行工具进行扫描, 可以在不更改项目配置的前提下进行代码扫描:

## 进入实验目录 
cd /data/

## 下载包
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-linux.zip

## 解压(JDK)
tar zxf sonar-scanner-xxxx.tar.gz 
unzip sonar-scanner-cli-4.6.2.2472-linux.zip

## 设置环境变量
vim /etc/profile
export SONAR_SCANNER_HOME=/data/sonar-scanner-4.6.2.2472-linux
export PATH=$SONAR_SCANNER_HOME/bin:$PATH
source /etc/profile 


## 测试生效
[root@zeyang-nuc-service sonar-scanner-4.6.2.2472-linux]# sonar-scanner -v
INFO: Scanner configuration file: /data/cicd2/buildtools/sonar-scanner-4.6.2.2472-linux/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarScanner 4.6.2.2472
INFO: Java 11.0.11 AdoptOpenJDK (64-bit)
INFO: Linux 4.18.0-80.el8.x86_64 amd64

这里请注意JDK版本的问题, 默认安装的sonarscanner是使用自带的jdk。通过上面的显示可以发现是jdk1.11版本, 如果想使用系统默认的jdk版本,可以修改scanner可执行程序的配置。如下所示:

[root@zeyang-nuc-service sonar-scanner-4.6.0.2311-linux]# vi bin/sonar-scanner
[root@zeyang-nuc-service sonar-scanner-4.6.0.2311-linux]#


### 编辑约第42行, true改成false
42 use_embedded_jre=false


### 更改后,再次验证,发现变成了系统jdk版本。 更改生效。
[root@zeyang-nuc-service sonar-scanner-4.6.0.2311-linux]# sonar-scanner -v
INFO: Scanner configuration file: /usr/local/sonar-scanner-4.6.0.2311-linux/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarScanner 4.6.0.2311
INFO: Java 1.8.0_282 AdoptOpenJDK (64-bit)
INFO: Linux 4.18.0-80.el8.x86_64 amd64

 

SonarScanner使用方法

代码扫描过程: 本地(构建节点)安装配置SonarScanner环境,然后通过设置sonar的一系列参数进行扫描分析。

  • 配置文件方式读取扫描参数
  • 命令行方式读取扫描参数

一个基本的sonar-project.properties配置文件的参数:

# 定义唯一的关键字
sonar.projectKey=devops-hello-service

# 定义项目名称
sonar.projectName=devops-hello-service

# 定义项目的版本信息
sonar.projectVersion=1.0
 
# 指定扫描代码的目录位置(多个逗号分隔)
sonar.sources=.
 
# 执行项目编码
sonar.sourceEncoding=UTF-8

# 指定sonar Server
sonar.host.url=

# 认证信息
sonar.login
sonar.password

 

这些配置项都是统一的,目前sonar支持将扫描参数以文件的方式存放或者以命令行传参的方式读取。 文件方式:可以将扫描参数放到项目的根目录或者sonar-scanner的配置文件目录等自定义的目录中, 命令行传参则可以直接将变量传递给sonarsacnner cli -Dsonar.projectKey=xxx 

# 指定配置文件
sonar-scanner -Dproject.settings=myproject.properties

# 命令行传参
sonar-scanner -Dsonar.projectKey=myproject -Dsonar.sources=src1

 

以扫描java项目为例子,配置文件的方式:

[root@jeekins demo-maven]# cat demo-mave.conf 
# 定义唯一的关键字
sonar.projectKey=demo-mave

# 定义项目名称
sonar.projectName=demo-mave

# 定义项目的版本信息
sonar.projectVersion=1.0
 
# 指定扫描代码的目录位置(多个逗号分隔)
sonar.sources=./demo/src
 
# 执行项目编码
sonar.sourceEncoding=UTF-8

# 指定sonar Server
sonar.host.url=http://192.168.1.110:9000

# 认证信息
sonar.login=admin
sonar.password=admin123

#java指定类目录 //java项目必须指定
sonar.java.binaries=./demo/target/classes/
[root@jeekins demo-maven]# sonar-scanner -Dproject.settings=demo-mave.conf
INFO: Scanner configuration file: /data/sonar-scanner-4.6.2.2472-linux/conf/sonar-scanner.properties  默认配置文件
INFO: Project root configuration file: /data/demo-maven/demo-mave.conf   项目配置文件
INFO: SonarScanner 4.6.2.2472
INFO: Java 1.8.0_221 Oracle Corporation (64-bit)
INFO: Linux 5.4.131-1.el7.elrepo.x86_64 amd64
INFO: User cache: /root/.sonar/cache
INFO: Scanner configuration file: /data/sonar-scanner-4.6.2.2472-linux/conf/sonar-scanner.properties
INFO: Project root configuration file: /data/demo-maven/demo-mave.conf
INFO: Analyzing on SonarQube server 8.9.0
INFO: Default locale: "zh_CN", source code encoding: "UTF-8"

要是sonarqube 9.x的版本需要使用java11
WARN: SonarScanner will require Java 11 to run, starting in SonarQube 9.x
工作目录存着一些扫描的信息

INFO: Working dir: /data/demo-maven/.scannerwork

可以看到报告信息

[root@jeekins demo-maven]# cat /data/demo-maven/.scannerwork/report-task.txt 
projectKey=demo-mave
serverUrl=http://192.168.1.110:9000
serverVersion=8.9.0.43852
dashboardUrl=http://192.168.1.110:9000/dashboard?id=demo-mave
ceTaskId=AXx0MEtVvrv455TJ-id_
ceTaskUrl=http://192.168.1.110:9000/api/ce/task?id=AXx0MEtVvrv455TJ-id_

扫描成功后就可以在sonarqube-web上查看scanner扫描到的信息

 

扩展-Docker运行sonarscanner

docker run \
    --rm \
    -e SONAR_HOST_URL="http://${SONARQUBE_URL}" \
    -e SONAR_LOGIN="myAuthenticationToken" \
    -v "${YOUR_REPO}:/usr/src" \
    sonarsource/sonar-scanner-cli

 

 

sonarqube老版本需要手动安装代码插件

SonarQube中各种语言的扫描规则都是以jar包的方式。在SonarQube8.9.0之前版本,默认没有安装语言规则插件, 需要手动安装。 服务端安装Java Code Quality and SecuritySonarJS SonarGO 插件,并重启服务器。(如果这里由于网速原因下载不了插件,可以使用课程提供的压缩包,解压到downloads目录下然后重启sonarqube)

如果低于该版本,可以参考如下操作。(可选,跳过)

[root@zeyang-nuc-service ~]# cd /data/cicd/plugin-sonar/

[root@zeyang-nuc-service plugin-sonar]# ls
sonar-go-plugin-1.6.0.719.jar            sonar-l10n-zh-plugin-1.29.jar
sonar-java-plugin-6.3.2.22818.jar        sonar-typescript-plugin-2.1.0.4359.jar
sonar-javascript-plugin-6.2.2.13315.jar

[root@zeyang-nuc-service plugin-sonar]# cp sonar-go-plugin-1.6.0.719.jar  sonar-java-plugin-6.3.2.22818.jar  sonar-javascript-plugin-6.2.2.13315.jar  sonar-typescript-plugin-2.1.0.4359.jar  /data/cicd/sonarqube/sonarqube_extensions/downloads/

[root@zeyang-nuc-service plugin-sonar]# ls /data/cicd/sonarqube/sonarqube_extensions/downloads/
sonar-go-plugin-1.6.0.719.jar      sonar-javascript-plugin-6.2.2.13315.jar
sonar-java-plugin-6.3.2.22818.jar  sonar-typescript-plugin-2.1.0.4359.jar

[root@zeyang-nuc-service plugin-sonar]# chmod +x /data/cicd/sonarqube/sonarqube_extensions/downloads/*

[root@zeyang-nuc-service plugin-sonar]# ls /data/cicd/sonarqube/sonarqube_extensions/downloads/
sonar-go-plugin-1.6.0.719.jar      sonar-javascript-plugin-6.2.2.13315.jar
sonar-java-plugin-6.3.2.22818.jar  sonar-typescript-plugin-2.1.0.4359.jar

[root@zeyang-nuc-service plugin-sonar]# docker restart sonarqube
sonarqube

Java项目扫描

sonarqube服务器端需要安装Java语言规则插件

sonar.projectKey 指定项目的关键字,sonar.host.url指定服务器地址(可以直接在配置文件中写死),projectName指定项目的名称, projectVersion指定项目的版本(可以用构建时间和构建ID定义),login指定登录用户名,password指定登录用户密码, projectDescription指定项目的描述信息, links.homepage指定项目的主页(超链接), sources指定扫描的目录, sourceEncoding指定扫描时的编码, java.binaries指定编译后的类文件目录(必填), java.test.binaries指定编译后的测试类目录,java.surefire.report指定测试报告目录。

传参数的方式:

sonar-scanner -Dsonar.host.url=http://192.168.1.110:9000 \    //sonarqube的地址
-Dsonar.projectKey=devops-maven-service \
-Dsonar.projectName=devops-maven-service \
-Dsonar.projectVersion=1.1 \
-Dsonar.login=admin \
-Dsonar.password=admin123 \
-Dsonar.ws.timeout=30 \
-Dsonar.projectDescription="my first project!" \                      //项目的描述信息
-Dsonar.links.homepage=http://192.168.1.110:9080/demo/demo-maven \         //gitlab项目的主页
-Dsonar.links.ci=http://192.168.1.110:8080/job/demo/job/demo-maven/ \                    //jenkins地址
-Dsonar.sources=src \                                                                                             //扫描的代码目录
-Dsonar.sourceEncoding=UTF-8 \
-Dsonar.java.binaries=target/classes \                                                                    //java的类目录
-Dsonar.java.test.binaries=target/test-classes \                                                      //java的类单元测试目录
-Dsonar.java.surefire.report=target/surefire-reports
可以看到扫描代码后的连接地址

Web前端项目扫描

好多参数都是通用的

sonar-scanner \
  -Dsonar.projectKey=demo-devops-ui \
  -Dsonar.projectName=demo-devops-ui \
  -Dsonar.sources=src \
  -Dsonar.host.url=http://192.168.1.110:9000 \
  -Dsonar.login=0809881d71f2b06b64786ae3f81a9acf22078e8b \
  -Dsonar.projectVersion=2.0 \
  -Dsonar.ws.timeout=30 \
  -Dsonar.projectDescription="my first project!" \
  -Dsonar.links.homepage=http://192.168.1.110/devops/devops-maven-service \
  -Dsonar.links.ci=http://192.168.1.110:8080/job/demo-pipeline-service/ \
  -Dsonar.sourceEncoding=UTF-8

Golang项目扫描

sonar-scanner -Dsonar.projectKey=devops-golang-service \
-Dsonar.projectName=devops-golang-service \
-Dsonar.sources=src \
-Dsonar.login=admin \
-Dsonar.password=admin123 \
-Dsonar.host.url=http://192.168.1.110:9000


## 有测试用例的情况
sonar.exclusions=**/*_test.go
sonar.tests=.
sonar.test.inclusions=**/*_test.go

 

 

继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2021年10月12日19:30:48
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: