将SonarQube的Jenkins构建步骤转换为pipline?

时间:2019-02-27 21:53:50

标签: jenkins sonarqube jenkins-pipeline sonarqube-scan

在跟上Jenkins管道的过程中,我正在将一些使用FreeStyle类型项目的旧版本转换为使用Pipelines。旧的Freestyle构建效果很好。

我的构建通常是在容器环境中完成的(通过SSH仅针对该构建进行分解),最后以SonarQube分析进行质量检查。

sonarqube步骤(使用Jenkins SonarQube插件)自动将具有正确参数的sonarqube扫描器注入容器中,以连接到SonarQube服务器,如本示例中从Jenkins buid的控制台日志中看到的那样:

22:47:13 Unpacking https://repo1.maven.org/maven2/org/sonarsourc/scanner/cli/sonar-scanner-cli/3.3.0.1492/sonar-scanner-cli-3.3.0.1492.zip to /home/jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/Aditus_SonarQube on docker-000b7eccw94td on Docker on master
22:47:13 [g7ctrl-server] $ /home/jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/Aditus_SonarQube/bin/sonar-scanner -Dsonar.host.url=https://myserver.com/sonarqube ******** -Dproject.settings=/home/jenkins/workspace/g7ctrl-server/sonar-project.properties -Dsonar.projectBaseDir=/home/jenkins/workspace/g7ctrl-server
22:47:14 INFO: Scanner configuration file: /home/jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/Aditus_SonarQube/conf/sonar-scanner.properties
22:47:14 INFO: Project root configuration file: /home/jenkins/workspace/g7ctrl-server/sonar-project.properties
22:47:14 INFO: SonarQube Scanner 3.3.0.1492

已阅读Analyzing in a Jenkins pipeline,我得出结论认为,由于未安装扫描仪,因此它不适用。还要读Execute SonarQube Scanner within Jenkins 2 Pipeline,因为它假定相同。

是否有任何自动化功能(相当于FreeStyle构建步骤),还是需要编写shell脚本才能将扫描仪手动下载,解压并将其手动安装到容器中?

如果有人可以阐明这一点,将不胜感激? (或一些最佳实践示例-因为我是管道脚本方面的新手)我认为其他人也同样面临过这个问题)

更新:(几乎已解决)

使用摘要生成器可以设置标准工具

stage('SonarQube analysis') {
  def sonarqubeScannerHome = tool name: 'Aditus SonarQube', type: 'hudson.plugins.sonar.SonarRunnerInstallation'
  withSonarQubeEnv('Aditus SonarQube') {
    sh "${sonarqubeScannerHome}/bin/sonar-scanner -Dsonar.host.url=https://myserver.com/sonarqube -Dproject.settings=/home/jenkins/workspace/g7ctrl-server/sonar-project.properties -Dsonar.projectBaseDir=/home/jenkins/workspace/g7ctrl-server"
  }
}

定义该工具将触发Jenkins下载,解压缩并安装扫描仪工具。但是,尽管项目设置参数与Freestyle构建中的参数相同(有效),扫描程序仍认为未设置根文件,如从日志中可以看到的那样

Unpacking https://repo1.maven.org/maven2/org/sonarsource/scanner/cli/sonar-scanner-cli/3.3.0.1492/sonar-scanner-cli-3.3.0.1492.zip to /home/jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/Aditus_SonarQube on docker-000dsh7hwihbw on Docker on master
[Pipeline] sh
+ /home/jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/Aditus_SonarQube/bin/sonar-scanner -Dsonar.host.url=https://myserver.com/sonarqube -Dproject.settings=/home/jenkins/workspace/g7ctrl-server/sonar-project.properties -Dsonar.projectBaseDir=/home/jenkins/workspace/g7ctrl-server
INFO: Scanner configuration file: /home/jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/Aditus_SonarQube/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE

很可能是由于我对我看不见的管道脚本缺乏掌握而出现了路径问题。 (在Freestyle和Pipeline情况下,使用相同的参数调用扫描仪)

1 个答案:

答案 0 :(得分:0)

已解决

由于工作空间路径取决于jenkins项目名称,因此路径错误。设置扫描仪参数时,我只是从(正在工作的)自由式项目中复制了路径中的原始Jenkins项目名称,而不是新的管道项目名称。

因此,用于下载,安装和运行扫描仪的完整流水线阶段可以简单地写为:

stage('SonarQube analysis') {
    def sonarqubeScannerHome = tool name: '<SONARQUBE-TOOL-NAME>'
    sh "${sonarqubeScannerHome}/bin/sonar-scanner"
}

SONARQUBE-TOOL-NAME 必须与您在Jenkins的“全局工具配置”中为声纳工具指定的名称相同的相同名称(该工具配置还决定了什么版本以及如何获取该工具)

如果在反向代理后面运行,则如果SonarQube服务器仅具有本地Bonjour名称,则找到SonarQube服务器可能会遇到问题(特别是如果您在容器中运行),在这种情况下,您需要添加服务器地址作为参数, ,如果需要为项目属性添加非默认名称(或路径)。因此,带有参数的脚本是

stage('SonarQube analysis') {
    def sonarqubeScannerHome = tool name: '<SONARQUBE-TOOL-NAME>'
    sh "${sonarqubeScannerHome}/bin/sonar-scanner -Dsonar.host.url=https://<SONAR-QUBE-SERVER> -Dproject.settings='sonar-project.properties' -Dsonar.projectBaseDir=."
}

注意:根据配置,必须相应配置project.settings文件的路径。

信用:感谢hakamairi,他让我重新审视了道路假设。