【问题标题】:Analysing manually added project with specified quality gate使用指定的质量门分析手动添加的项目
【发布时间】:2021-02-06 15:27:05
【问题描述】:

我有兴趣通过 SonarQube 分析我的 Jenkins 构建。最初,我使用了以下代码

stage('SonarCloud') {
      steps {
        withSonarQubeEnv('SonarQube') {

            sh 'mvn clean package sonar:sonar '

        }
      }
    }

但是,我已向here 询问如何指定服务器用于我的分析的质量门。根据提供的答案,我已将代码修改为如下所示

stage('SonarCloud') {
      steps {
        withSonarQubeEnv('SonarQube') {
            
          script{
            def projectName = "Some-Exp"

            // Creating a fresh project and placing it on the server - Works fine
            sh "curl -u ${env.SONAR_AUTH_TOKEN} '${env.SONAR_HOST_URL}/api/projects/create' -d 'name=${projectName}&project=${projectName}&branch=${env.BRANCH_NAME}'"

            // Specifying Quality Gate that to be used when performing our analysis - Does not quite work
            sh "curl -u ${env.SONAR_AUTH_TOKEN} '${env.SONAR_HOST_URL}/api/qualitygates/select' -d 'gateId=2&projectKey=${projectName}'"

            // Analysing our project - Creates the entirely new project, much like the initial code did
            sh "mvn sonar:sonar -Dsonar.host.url=${env.SONAR_HOST_URL}"
          }
        }
      }
    }

代码在 SonarQube 服务器上创建并放置了一个项目,但该项目仍然有一个默认质量门,并且它不包含任何分析(实际上,当前代码创建的输出与 sh 'mvn clean package sonar:sonar ' 行创建的输出相同我最初使用过)。没有错误或任何东西。问题是代码没有做我想做的事情。

这个post 提到我需要在分析之前将我的项目添加到配置文件组(这很有意义)。尝试使用一些参数添加sh "curl -u ${env.SONAR_AUTH_TOKEN} '${env.SONAR_HOST_URL}/api/qualityprofiles/add_project'",但没有太大帮助。

我想知道我错过了什么。我认为最后一行需要参数化,但我找不到任何可以使它工作的东西。

【问题讨论】:

    标签: sonarqube jenkins-pipeline multibranch-pipeline


    【解决方案1】:

    我创建了一个示例 Maven 项目并从 Jenkins 运行声纳分析。另外,我使用了 Web API 来分配 QualityGate。

    您可以使用下面的Jenkinsfile 为例,进行声纳分析。

    Jenkinsfile

    pipeline {
       agent any
    tools {
                    maven 'MAVEN_HOME1'
                    }
    
       stages {
          stage('Git') {
             steps {
                git credentialsId: 'gitlab-test', url: 'https://example.com/gitlab/repo1/simple-java-maven-app.git'
             }
          }
          
          stage('Maven Install') {
              steps {
                              sh "mvn install"
                             }
          }
          
          stage('Create Sonar Proejct') {
              steps {
                    sh 'curl -X POST -u "admin:admin" "https://example.com/sonarqube/api/projects/create?name=stackoverflow&project=stackoverflow"'
                }
          }
          
          stage('Set Quality Gate') {
              steps {
                  sh 'curl -u "admin:admin" -X POST "https://example.com/sonarqube/api/qualitygates/select?projectKey=stackoverflow&gateId=10100"'
              }
          }
          
          stage('Sonarqube Analysis') {
              steps {
                  sh """mvn -U install sonar:sonar -Dsonar.host.url=https://example.com/sonarqube/ -Dsonar.login=7yha3f47967iuednd8cd -Dsonar.projectKey=stackoverflow -Dsonar.projectName=stackoverflow -Dsonar.sources=. -Dsonar.java.binaries=**/* -Dsonar.language=java -Dsonar.exclusions=src/test/java/com/mycompany/app/AppTest.java"""
              }
          }
       }
    }
    

    请在下方找到 SonarQube 分析结果和其他屏幕截图,供您参考。

    截图:

    Jenkins 控制台输出:

    可用的 QualityGate 列表:

    注意:在上图中,"id":10040,"name":"SonarQube way" 是默认的 QualityGate。我已使用 "id":10100,"name":"SASSonarQube way" 设置 Quality Gate 以使用 Web API 分析项目 stackoverflow。都标在yellow

    SonarQube 分析

    在上图中,您可以看到 Quality Gate SASSonarQube way 已用于进行声纳分析。标记为yellow

    【讨论】:

    • 嘿!代码现在似乎在执行分析,但质量门仍设置为默认值。我的质量门如下:{"id":9,"name":"QGate","isDefault":false,"isBuiltIn":false,"actions":{"rename":false,"setAsDefault":false,"copy":false,"associateProjects":false,"delete":false,"manageConditions":false}}(以防设置出现问题)。另外,我注意到,每当我进行分析时,覆盖率总是 0%(即使你在 maven 中运行测试,它也是 85%)。目前正在研究它,但我提到它以防它有影响。
    • 在分析项目时,先创建项目,然后使用api分配质量门,然后进行分析。因此,在最后一步,即在进行分析时,提供项目密钥,以便对您创建的项目进行分析。像这样 sh "mvn sonar:sonar -Dsonar.host.url=${env.SONAR_HOST_URL} -Dsonar.projectKey=${projectName}"
    • 我确实按照您建议的方式指定了我的项目密钥。这是我的分析线:"mvn sonar:sonar -Dsonar.host.url=${env.SONAR_HOST_URL} -Dsonar.login=${env.SONAR_AUTH_TOKEN} -Dsonar.projectKey=${projectName} -Dsonar.projectName=${projectName} -Dsonar.sources=. -Dsonar.java.binaries=**/* -Dsonar.language=java -Dsonar.exclusions=src/test/java/**"
    • 我会尽快修复覆盖率 0% 的问题,看看是否有影响。完成后我会回来更新
    • 修复了“0% 覆盖率”问题。不幸的是,这与剩下的问题是质量门选择无关。
    猜你喜欢
    • 1970-01-01
    • 2017-12-26
    • 2016-12-22
    • 2021-08-22
    • 2016-07-16
    • 2015-05-28
    • 2016-04-12
    • 2017-11-15
    • 1970-01-01
    相关资源
    最近更新 更多