升级至SonarQube 10.4.1(Java11环境),如何配置Azure DevOps流水线?
配置Azure DevOps流水线适配SonarQube 10.4.1与Java 11
针对你的场景,结合SonarQube的要求,只需在流水线的SonarQube准备任务中添加sonar.java.jdkHome配置,指定项目依赖的Java 11 JDK路径即可。推荐使用Azure DevOps的预定义变量来获取路径,避免硬编码带来的兼容性问题。
修改后的流水线YAML代码
- task: MavenAuthenticate@0 inputs: artifactsFeeds: 'MyApp' - task: Cache@2 inputs: key: 'maven | "$(Agent.OS)" | **/pom.xml' restoreKeys: | maven | "$(Agent.OS)" maven path: $(mavenCacheFolder) displayName: 缓存Maven本地仓库 - ${{ if eq(parameters.sonarEnable, 'true') }}: - ${{ if eq(parameters.sonarCacheEnable, 'true') }}: - task: Cache@2 inputs: key: 'sonar | "$(Agent.OS)" | **/pom.xml' restoreKeys: | sonar | "$(Agent.OS)" sonar path: "/home/vsts/.sonar/cache" displayName: Sonar缓存 - ${{ if eq(parameters.sonarEnable, 'true') }}: - task: SonarQubePrepare@6 inputs: SonarQube: ${{ parameters.sonarQubeEndpoint }} scannerMode: 'Other' extraProperties: | sonar.projectKey=${{ parameters.sonarProjectKey }} sonar.host.url=$(sonarHostURL) sonar.login=${{ parameters.sonarLogin }} sonar.coverage.jacoco.xmlReportPaths=${{ parameters.sonarCoverageJacocoXmlReportPaths }} sonar.exclusions= ${{ parameters.sonarExclusions }} # 添加Java 11 JDK路径配置 sonar.java.jdkHome=$(JAVA_HOME_11_X64) - task: Maven@3 inputs: mavenPomFile: 'pom.xml' goals: ${{ parameters.mavenGoal }} publishJUnitResults: true testResultsFiles: '**/surefire-reports/TEST-*.xml' javaHomeOption: 'JDKVersion' jdkVersionOption: '1.11' mavenVersionOption: 'Default' mavenOptions: '-Xmx3072m $(mavenOpts)' mavenAuthenticateFeed: true effectivePomSkip: false sonarQubeRunAnalysis: ${{ parameters.sonarEnable }} sqMavenPluginVersionChoice: 'latest' checkStyleRunAnalysis: true pmdRunAnalysis: true - ${{ if eq(parameters.sonarEnable, 'true') }}: - task: SonarQubePublish@6 inputs: pollingTimeoutSec: '600' - task: sonar-buildbreaker@8 inputs: SonarQube: ${{ parameters.sonarQubeEndpoint }}
关键说明
- 添加的
sonar.java.jdkHome=$(JAVA_HOME_11_X64)配置,会让SonarQube分析器明确使用Java 11的类库进行代码分析,确保结果的一致性,避免原生JDK类相关的分析问题。 - 使用Azure DevOps预定义变量
$(JAVA_HOME_11_X64)可以自动适配不同操作系统的托管代理,无需手动指定固定路径(比如Linux的/usr/lib/jvm/jdk11.0.22/)。
内容的提问来源于stack exchange,提问作者brucewayne
相关产品推荐
相关产品推荐

