如何在没有 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