从 GitLab CI 运行 sonarqube 时出错

Posted

技术标签:

【中文标题】从 GitLab CI 运行 sonarqube 时出错【英文标题】:Error in running sonarqube from GitLab CI 【发布时间】:2021-01-27 15:51:38 【问题描述】:

我正在使用 Sonarqube 优化项目中的代码质量,并尝试将其添加到 GitLab 上的 CI 循环中,但出现错误。当我在 IntelliJ 终端中运行 mvn sonar:sonar 时,它可以工作,但是在我的 GitLab CI 中执行时它会以某种方式引发错误。错误是:

无法在项目 rlstop 上执行目标 org.sonarsource.scanner.maven:sonar-maven-plugin:3.7.0.1746:sonar (default-cli):您的项目包含 .java 文件,请提供带有 sonar.java 的编译类.binaries 属性,或使用 sonar.exclusions 属性将它们从分析中排除。

我的 gitlab-ci.yml:

stages:
  - build
  - test
  - sonarqube
build:
  script: "mvn compile"
test:
  script: "mvn test"
  stage: test
sonarqube:
  script: "mvn sonar:sonar"
  stage: sonarqube

application.properties:

spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.url=...
spring.datasource.username=...
spring.datasource.password=...
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql = true

## Hibernate Properties
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.SQLServer2012Dialect

# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = update

sonar.java.binaries=bin

有谁知道这个错误是什么意思以及如何解决它?

【问题讨论】:

使用mvn compile sonar:sonar -Dsonar.java.binaries=target/classes 然后我得到错误>没有文件或目录匹配'target/classes' 你添加了compile吗? 我最初尝试将<sonar-java-binaries>target/classes</sonar-java-binaries> 添加到我的 pom.xml 属性中,这给出了上一条评论中指定的错误。当我将您的解决方案放在 yml 中的脚本中时,出现以下错误:Unknown lifecycle phase ".java.binaries=target/classes". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are:1/2 2/2 validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. 【参考方案1】:

错误中提到需要使用sonar.java.binaries提供java的编译类

在您的 .gitlab-ci.yml 文件中:

stages:
  - build
  - test
  - sonarqube
build:
  stage: build
  script: "mvn compile"
test:
  stage: test
  script: "mvn test"
sonarqube:
  stage: sonarqube
  script: "mvn -U install sonar:sonar -Dsonar.projectKey=Gitlab-CI -Dsonar.projectName=Gitlab-CI -Dsonar.sources=. -Dsonar.java.binaries=**/* -Dsonar.language=java"

如果您在 pom.xml 中添加了<sonar-java-binaries>target/classes</sonar-java-binaries>,请删除。只是,在 pom.xml 的 plugins 部分有 maven-sonar-plugin 的条目

希望这对你有帮助。

【讨论】:

sonar.java.binaries=**/* 成功了,非常感谢!

以上是关于从 GitLab CI 运行 sonarqube 时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何在 gitlab-ci.yml 中使用带有 SonarQube.Scanner.MSBuild.exe 的 Gitlab 变量

Jenkins+GitLab+Sonarqube+Shell持续集成CI/CD

在哪里指定 GitLab ci/cd 管道的存储库凭据?

SonarQube + Maven + JaCoCo + GitLab CI:Sonar 在升级到 SonarQube 7.9.2 后开始显示 0% 的代码覆盖率

如何从 GitLab CI 管道的工作发送电子邮件?

C# 文件失败的 SonarQube 分析:对文件中不存在的行号的引用