sonarqube静态代码扫描工具常见用法
-
安装服务器端的sonarqube
下载地址:https://www.cnblogs.com/cxygg/p/18008738 -
客户端有很多种比如SonarScanner CLI,Jenkins extension for SonarQube,SonarScanner for Maven,sonarlint等
-
创建项目后获取token
-
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服务器。 -
如果啥都不配置也可以直接命令行指定参数执行
-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
-
-
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环境的时候可以用
-
sonar-maven-plugin(项目内maven插件)
有覆盖率要求的才选这种方式,这种方式会执行单元测试,一般要求项目运行jdk版本和sonar插件的需要的jdk版本一直。
参考地址:https://www.cnblogs.com/cxygg/p/18394187 -
Jenkins extension for SonarQube 的使用
-
用这个插件原:https://updates.jenkins.io/updates/hudson.plugins.sonar.SonarRunnerInstaller.json
-
安装 SonarQube Scanner插件
-
全局配置设置 SonarQube 的地址,账号密码(或者token)
-
系统配置里面添加sonarqube server地址和凭证
-
配置 sonar-scanner
-
如果是构建 自由风格选择 Execute SonarQube Scanner,设置 project文件位置(放在项目根目录下面)
-
如果是流水线项目
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质量门标要求!' } } } }
-
-
sonarlint的使用
这是一个idea插件,安装插件以后,尅开始分析
这种方式不会上传检查结果,只是拉取服务器的规则,方便代码中定义缺陷
-
如果项目中有html代码,那么会依赖node,如果找不到 node报错但是依旧可以出报告
-
如果代码里面有JS 文件,或者html文件里面有JS文件需要node环境
能耍的时候就一定要耍,不能耍的时候一定要学。
--天道酬勤,贵在坚持posted on 2024-02-05 23:14 zhangyukun 阅读(1055) 评论(0) 编辑 收藏 举报