我正在为 Java 8 项目设置 Gitlab CI/CD 管道,并且需要包含一个用于 SonarQube 分析的阶段。该项目是使用 Maven 构建的。这是迄今为止我在管道中定义的作业的缩写和匿名版本:
sonarqube-check:
stage: analyze
image: maven:3.6.3-jdk-11
variables:
#
script:
- mvn verify sonar:sonar -Dsonar.projectKey=myproject -Dsonar.java.source=1.8
allow_failure: true
这会失败,因为我们使用的 SonarQube 版本需要 Java 11,并且默认情况下并未包含 Java 8 项目的所有相关 jar。
根据此线程的最后评论:sonar.java.jdkHome属性无法解决,
sonar
步骤取决于编译步骤,但应该可以在没有构建阶段的情况下运行SonarQube分析,而是依赖于早期管道阶段创建的构建工件。
有没有办法从 Maven 命令行中排除构建阶段,或者以某种方式使用与运行分析所用的 Java 版本不同的版本进行构建?
是的,您可以通过在作业之间传递工件并直接要求 maven 运行 Sonarqube 插件来做到这一点。
简而言之,类似的事情应该可以做到:
maven-verify:
stage: build
image: maven-jdk8-image # Use your jdk8 image
script:
- mvn verify
artifacts:
paths:
- target/
expire_in: 1 hrs
sonarqube-check:
stage: analyze
image: maven:3.6.3-jdk-11
script:
# Set the sonar.java.binaries properties and don't add maven step like verify
- mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.10.0.2594:sonar -Dsonar.qualitygate.wait=true -Dsonar.java.binaries=target/classes -Dsonar.java.source=1.8
allow_failure: true