Jenkins 2 Pipeline 中的声纳 - 缺少全局配置

Posted

技术标签:

【中文标题】Jenkins 2 Pipeline 中的声纳 - 缺少全局配置【英文标题】:Sonar in Jenkins 2 Pipeline - missing global config 【发布时间】:2017-03-17 01:29:45 【问题描述】:

我尝试在我的 Jenkins 管道项目中使用 maven 运行声纳测试。文档说,如果声纳是全局配置的,并且您使用withSonarQube 步骤,则注入具有全局配置的声纳属性的环境变量。到目前为止一切顺利。

http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Jenkins#AnalyzingwithSonarQubeScannerforJenkins-AnalyzingwithSonarQubeScannerforMaven

我的管道配置如下:

def stash = '********'
def branch = 'dev'

stage('git') 
    node 
        git branch: branch, credentialsId: 'Buildserver-Private.key', url: stash

    


stage('build') 
    node 
        //....
    


stage('sonar') 
    node 
        withSonarQubeEnv('Sonar') 
           sh 'mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar'
         
    

构建失败,因为声纳插件尝试连接到默认的 h2 数据库而不是配置的数据库。如果我检查日志,则没有传递给 maven 的声纳属性。

Injecting SonarQube environment variables using the configuration: Sonar
[Pipeline] 
[Pipeline] tool
[Pipeline] sh
[***********] Running shell script
+ cd .
+ /var/lib/jenkins/tools/hudson.tasks.Maven_MavenInstallation/Maven_3_3_9/bin/mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.2:sonar
[INFO] Scanning for projects...

[...]

[INFO] --- sonar-maven-plugin:3.2:sonar (default-cli) @ *******.project.build ---
[INFO] User cache: /var/lib/jenkins/.sonar/cache
[INFO] SonarQube version: 4.5.6
[INFO] Default locale: "en_US", source code encoding: "UTF-8" (analysis is platform dependent)
12:23:17.971 INFO  - Load global referentials...
12:23:18.071 INFO  - Load global referentials done: 102 ms
12:23:18.102 INFO  - User cache: /var/lib/jenkins/.sonar/cache
12:23:18.109 INFO  - Install plugins
12:23:18.176 INFO  - Install JDBC driver
12:23:18.183 INFO  - Create JDBC datasource for jdbc:h2:tcp://localhost/sonar

为什么我的配置被忽略了?如果文档说的话是什么意思?

自 Jenkins 的 SonarQube 扫描仪 2.5 版以来,有一个 Jenkins 流水线的官方支持。我们提供了一个'withSonarQubeEnv' 允许选择要交互的 SonarQube 服务器的块 和。您在 Jenkins 全局中配置的连接详细信息 配置将自动传递给扫描仪。

好像不是……

有人知道我错过了什么吗?

【问题讨论】:

【参考方案1】:

您使用的是旧版本的 SonarQube(4.5.6,之前的 LTS),需要将数据库连接参数(URL、登录名、密码)传递给扫描仪 - 这是一个安全问题。 withSonarQubeEnv 不会传播这些设置以修复此缺陷。

自 SonarQube 5.2 起,不再需要这些参数。所以你必须使用更新的版本。我建议您升级到最新的 LTS 版本的 SonarQube (5.6)。

【讨论】:

以上是关于Jenkins 2 Pipeline 中的声纳 - 缺少全局配置的主要内容,如果未能解决你的问题,请参考以下文章

声纳质量门和电子邮件 Jenkins 管道

我需要 Jenkins 的声纳和声纳跑步者吗?

Jenkins pipeline:pipeline 使用之语法详解

Jenkins 脚本管道声纳集成

Jenkins-pipeline查看内置的env种类及取值

基于声纳结果的 Jenkins 构建管道失败