运行 Jenkins 远程从站上的 SonarQube 扫描仪

Running SonarQube Scanner on a Jenkins remote slave

我有一个 Docker 容器 运行ning Jenkins (2.150.1) 和另一个 Docker 容器 运行ning SonarQube (7.4)。 Jenkins 正在使用 SonarQube Scanner for Jenkins 插件,扫描是在 Jenkins 容器上完成的。项目的 Jenkinsfile 如下所示:

pipeline {
  agent any
  stages {
    stage('Build') {
      steps {
        echo 'building...'
      }
    }
    stage('Test') {
      steps {
        echo 'testing...'
        withSonarQubeEnv ('SonarQube') {
          sh '/var/jenkins_home/sonar-scanner/sonar-scanner-3.2.0.1227-linux/bin/sonar-scanner'
        }
        echo 'really finished testing2'
      }
    }
    stage("Quality Gate") {
        steps {
            timeout(time: 1, unit: 'MINUTES') {
              waitForQualityGate abortPipeline: true
            }
        }
    }
    stage('Deployment') {
      steps {
        echo 'deploying...'
      }
    }
  }
}

为了让扫描作为 Jenkins 管道作业的一部分工作,我通过下载 zip 文件并将其解压缩到以下位置,在 Jenkins 容器上手动安装了 sonar-scanner/var/jenkins_home/sonar-scanner/sonar-scanner-3.2.0.1227-linux

这运行良好,但我想通过以下方式改进它:

  1. 从我的 Jenkinsfile
  2. 中取出 sonar-scanner 的硬编码路径
  3. 指定 sonar-scanner 的非本地位置,因为我现在需要 运行 在另一个 VM/container 而不是 Jenkins 容器上扫描

我尝试使用 Manage Jenkins > Global Tool Configuration > SonarQube Scanner 并更新了我的 Jenkinsfile 以使用 SONAR_RUNNER_HOME 而不是硬编码路径,但这没有用,我得到了一个错误找不到 sonar-scanner

在“管理 Jenkins”>“全局工具配置”>“SonarQube 扫描仪”中检查 install automatically

然后转到管理 Jenkins > 配置系统并添加以下内容

名称应与 Jenkinsfile 行中的参数相同:withSonarQubeEnv('SonarQube')