Sonar 扫描之SonarScanner介绍

SonarScanner用于在构建系统没有指定scanner时使用。

项目配置

在你的项目根目录中创建一个名为 sonar-project.properties的配置文件

在给定的SonarQube实例中必须保持唯一
sonar.projectKey=my:project

--- 可选属性 ---
默认值为projectKey
#sonar.projectName=My project
默认值为'not provided'
#sonar.projectVersion=1.0

默认为 . 路径相对于sonar-project.properties而言
#sonar.sources=.

源代码文件编码. 默认为系统默认编码
#sonar.sourceEncoding=UTF-8

从 zip 文件运行 SonarScanner

要从 zip 文件运行 SonarScanner,遵循下列步骤操作:

从 Docker 镜像运行 SonarScanner

使用以下命令,使用 SonarScanner Docker 镜像进行扫描:

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

扫描 C、C++ 或 ObjectiveC 项目

示例项目

sonar-project.properties 的替代品

如果在项目的根目录下无法创建 sonar-project.properties 文件,有以下几种选择:

  • 可以通过命令行直接指定属性。例子:
sonar-scanner -Dsonar.projectKey=myproject -Dsonar.sources=src1
  • 属性 project.settings 可用于指定项目配置文件的路径(此选项与 sonar.projectBaseDir属性不兼容)。例子:
sonar-scanner -Dproject.settings=../myproject.properties
  • 从 SonarScanner 2.4 开始,可以通过 sonar.projectBaseDir属性设置要分析项目的根文件夹。如果未在命令行中指定 sonar.projectKey,则该文件夹必须包含 sonar-project.properties文件。可以在此项目配置文件中或通过命令行参数定义其他参数。

注意:命令行参数优先于 sonar-project.properties 配置,也就是说,当命令行和 sonar-project.properties 存在相同参数配置的情况下,以命令行的参数配置为准

可选分析目录

如果要分析的文件不在运行 sonar-scanner程序时所在目录,那么需要使用 sonar.projectBaseDir属性将分析移动到待分析文件所在目录,否则会导致分析失败,因为程序默认在当前目录下执行扫描。例如,在 jenkins/jobs/myjob/workspace目录下运行 sonar-scanner,但要分析的文件存在 /home/ftpdrop/cobol/project1目录, sonar-project.properties配置如下:

sonar.projectBaseDir=/home/ftpdrop/cobol/project1
sonar.sources=src

高级Docker配置

以下部分提供了使用Docker运行 sonar-scanner时的高级配置选项

使用 --user选项,以非root用户运行Docker镜像,例如:

docker run \
    --rm \
    --user="$(id -u):$(id -g)" \
    -e SONAR_HOST_URL="http://${SONARQUBE_URL}"  \
    -v "${YOUR_REPO}:/usr/src" \
    sonarsource/sonar-scanner-cli

注意:以非root用户运行容器时,确保该用户对挂载的目录(比如代码目录或者scanner缓存目录)有读写权限,否则可能会遇到权限相关问题。

为了防止SonarScanner在每次运行扫描时重新下载语言分析器,可以挂载一个供scanner存储下载内容的目录,以便在scanner运行期间可以重用下载的内容。在某些CI系统上,还需要将此目录添加到CI缓存配置中。以下命令将在运行之间存储和使用缓存:

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

还可以使用 SONAR_USER_HOME环境变量更scanner存储下载内容的位置。

故障排除

Java heap space error or java.lang.OutOfMemoryError

通过 SONAR_SCANNER_OPTS环境变量增加内存

Linux:

export SONAR_SCANNER_OPTS="-Xmx512m"

Windows:

set SONAR_SCANNER_OPTS=-Xmx512m

Unsupported major.minor version

升级用于分析的Java版本,或使用一个本机包(嵌入自己的Java运行时)

Property missing: `sonar.cs.analyzer.projectOutPaths’. No protobuf files will be loaded for this project.

Scanner CLI无法分析.NET项目。请用SonarScanner for .NET。

Original: https://www.cnblogs.com/shouke/p/15885101.html
Author: 授客
Title: Sonar 扫描之SonarScanner介绍

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621496/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java开发笔记(一百四十九)引入预报告的好处

    前面介绍了各种SQL语句的调用过程,虽然例子代码写死了每个SQL串,但是完全可以把查询条件作为方法参数传进来。比如现在想删除某个课程的教师记录,那么在编写删除方法时,就把课程名称作…

    Java 2023年6月6日
    054
  • 全面理解Java内存模型

    Java内存模型即Java Memory Model,简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是…

    Java 2023年5月29日
    054
  • Java-IO中的节点流和处理流

    理解好Java-IO中的节点流和处理流是理解Java输入、输出的关键基础,因此,了解节点流和处理流相关的知识点尤为重要。 1.定义 (1)节点流:可以从或向一个特定的地方(节点)读…

    Java 2023年5月29日
    075
  • Java bean与xml 互转(对象转xml、xml转对象)

    日常吐槽: 好久都没怎么分享自已了…… ╮(╯▽╰)╭,最近有个需求,需要把 bean对象 转成 xml 文件,然后 xml 文件 转成对象 ( 生成 与 …

    Java 2023年5月29日
    093
  • SpringBoot集成文件-如何基于POI-tl和word模板导出庞大的Word文件?

    前文我们介绍了通过Apache POI通过来导出word的例子;那如果是word模板方式,有没有开源库通过模板方式导出word呢?poi-tl是一个基于Apache POI的Wor…

    Java 2023年6月6日
    0133
  • 琐碎的想法(三)对Java的批评的看法

    编写本文的目的 在大环境下,Java是一个饱受争议的语言,一方面在工程上它的流行程度非常高;另一方面,越是资深的软件工程师就越容易对这个语言感到不满。 在这种情况下,博主希望每一个…

    Java 2023年6月8日
    073
  • InnoDB学习(三)之BinLog

    BinLog又称为二进制日志,是MySQL服务层的数据日志,MySQL所有的存储引擎都支持BinLog。BinLog记录了MySQL中的数据更新和可能导致数据更新的事件,可以用于主…

    Java 2023年6月8日
    085
  • C#winform单线程事例与多线程事例

    通过例子编写,用winform编写的,讲解单线程与多线程使用,用于异步加载数据,界面不会卡死,数据在后台默认加载,给用户更好的体验。稍后会附加完整代码。 1、先不用线程,显示一个求…

    Java 2023年5月29日
    082
  • Dubbo

    远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及”请求-响应”模式的信息交换方式。 集群容错: 提供基于接口方法的透明远…

    Java 2023年6月8日
    069
  • Flutter Could not resolve project :path_provider_macos.

    错误信息: 如果是在纯Flutter项目执行,这样基本就修复了。 如果是Flutter以Module形式被原生项目依赖,那么有可能不行,这时候,就按报错提示修复,原生项目找到 cs…

    Java 2023年5月29日
    0171
  • Nginx配置http https正向代理

    1.编译安装nginx,需要安装第三方模块ngx_http_proxy_connect_module #安装依赖 yum -y install patch unzip gcc gc…

    Java 2023年5月30日
    085
  • Java利用ShutDownHook关闭系统资源

    Java关闭钩子 在Java程序中能够通过加入关闭钩子,实如今程序退出时关闭资源的功能。使用Runtime.addShutdownHook(Thread hook)向JVM加入关闭…

    Java 2023年5月29日
    056
  • 【力扣】83. 删除排序链表中的重复元素

    存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。 示例 1: 输入:head = [1,…

    Java 2023年6月8日
    060
  • secureCRT连接虚拟机超时

    1、今天在搭建集群节点时,secureCRT连接不上虚拟机超时,多半是以下几个步骤没搞好。 1)首先虚拟机的网络连接模式设置为桥接模式 2、网络适配器选择 3、关闭防火墙 4、开启…

    Java 2023年6月7日
    071
  • Java中this和super关键字小结

    package com.itheima.test; /** * @author Pzi * @create 2022-09-26 16:23 */ public class A {…

    Java 2023年6月15日
    068
  • java Mysql 根据经纬度实时计算地址位置距离

    数据库地址表设计 字段名称类型备注 area_id bigint 区域 ID area_name varchar(32) 区域名称 parent_id bigint 所属父区域 I…

    Java 2023年6月8日
    055
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球