如何在没有 Maven 和 Docker 的 Jenkins 声明式管道中执行 SonarQube 扫描仪

Posted

技术标签:

【中文标题】如何在没有 Maven 和 Docker 的 Jenkins 声明式管道中执行 SonarQube 扫描仪【英文标题】:How to execute SonarQube scanner in Jenkins Declarative Pipeline without Maven and Docker 【发布时间】:2018-07-11 11:47:06 【问题描述】:

SonarQube 扫描仪是否支持没有 maven 和 docker 的 BlueOcean 管道插件,如果支持,该脚本在 Jenkinsfile 中如何工作?

我是 Jenkins 和 BlueOcean 的新手,并且已经尝试了所有可用的基本方面。

如果 SonarQube 插件确实支持声明式:

pipeline 
  agent any
  stages 
    stage('SonarQube analysis') 
      tools 
        sonarQube 'SonarQube Scanner 2.8'
      
      steps 
        withSonarQubeEnv('SonarQube Scanner') 
          sh 'sonar-scanner'
        
      
    
  

【问题讨论】:

【参考方案1】:

我们不能说 SonarQube 扫描仪支持或不支持BlueOcean。 BlueOcean 是一个表示层,显示阶段提供的数据(例如:日志)。

SonarQube 扫描仪生成日志,因此 BlueOcean 可以显示它。我不认为这种关系可以归类为“支持”。


编辑:

您可以使用以下代码在声明式管道中执行分析:

pipeline 
    agent any
    stages 
        stage('Build') 
            steps 
                def scannerHome = tool 'SonarQubeScanner3'
                withSonarQubeEnv('SonarQube') 
                    sh "$scannerHome/bin/sonar-scanner"
                
            
        
    

您还在Manage Jenkins → Configure System → SonarQube servers 中添加了SonarQube 服务器:

Manage Jenkins → Global Tool Configuration → SonarQube Scanner中的SonarQube扫描仪:

名称:

服务器必须与withSonarQubeEnv 中使用的相同(在我的示例中,它等于“SonarQube”) 扫描仪工具必须与tool 中使用的相同(在我的示例中,它等于“SonarQubeScanner3”)

您还必须选中复选框Enable injection of SonarQube server configuration as build environment variables

【讨论】:

谢谢,但重点是如果 BlueOcean 可以显示日志,我们需要一个 SonarQube 的声明性语法脚本作为它的 Jenkins 文件,因为我已经尝试了几乎 6-8 个不同的程序(上面共享)来调用它但没有一个工作。 正如我所写,BuleOcean 是一个 persentaion 层,您的问题与声明性管道或脚本化管道有关。 感谢您的帮助,我尝试了与您建议的完全相同的程序,但是输出出现错误,您能帮我解决一下吗:`java.lang.NullPointerException org.jenkinsci.plugins.workflow.steps .ToolStep$Execution.run(ToolStep.java:150) org.jenkinsci.plugins.workflow.steps.ToolStep$Execution.run(ToolStep.java:133) 您确定 SonaRube 步骤会产生错误吗?请编辑您的问题和所有重要数据(堆栈跟踪。完整的管道脚本、配置屏幕截图等) 这几乎可以工作,您需要使用查看脚本步骤(请参阅此处:***.com/questions/42763384/…)并且不要忘记项目根目录下的 sonar-project.properties 文件【参考方案2】:

解决了只需要检查通用工具配置中的工具位置并给出路径并在 jenkins 文件中调用它。

 stage('PDNS-UI-Sonar')  
         environment 
             SONAR_SCANNER_OPTS = "-Xmx2g"
              
         steps 
             sh "pwd"
             sh "/opt/sonar-scanner/bin/sonar-scanner -Dproject.settings=sonar-project.properties"
             
         

enter image description here

【讨论】:

以上是关于如何在没有 Maven 和 Docker 的 Jenkins 声明式管道中执行 SonarQube 扫描仪的主要内容,如果未能解决你的问题,请参考以下文章

没有JDK和Maven,用Docker也能构建Maven工程

基于Jenkins和Maven实现Docker镜像的CI/CD

Java Maven 项目中的 Docker 指令跳过测试

Maven 构建和 maven-failsafe-plugin - 分叉的虚拟机在没有正确说再见的情况下终止

构建dubbo分布式平台-maven构建根项目

jenkins使用docker-maven-plugin进行编译时发现没有权限