将SonkinsQube的Jenkins构建步骤转换为管道?

问题描述 投票:0回答:1

在使用Jenkins管道加快速度的过程中,我正在将一些使用FreeStyle类型项目的旧构建转换为使用管道。旧的Freestyle构建效果很好。

我的构建通常在容器环境中完成(通过SSH实现该构建的旋转),并以QA的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下载,解压缩并安装扫描仪工具。但是,尽管项目设置参数与自由式构建中的相同(可行),但扫描程序认为根文件未设置,可以从日志中看到

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案例中调用扫描仪的参数相同)

jenkins sonarqube jenkins-pipeline sonarqube-scan
1个回答
0
投票

解决了

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

因此,下载,安装和运行扫描仪的完整管道阶段可以简单地写成:

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

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

如果您在反向代理后面运行,则可能在查找SonarQube服务器时遇到问题(特别是如果您在容器中运行),如果它只有一个本地Bonjour名称,在这种情况下您需要将服务器地址添加为参数,如果是非默认名称(或路径)用于需要添加项目属性。所以使用脚本的参数

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让我重新审视我的路径假设。

© www.soinside.com 2019 - 2024. All rights reserved.