如何在Jenkins声明式管道中设置声纳扫描仪

时间:2019-09-05 12:58:29

标签: jenkins sonarqube jenkins-pipeline sonarqube-scan

我在Jenkinsfile中为我的存储库实现SonarQube扫描程序时遇到问题。我不知道应该在Jenkinsfile中的哪里添加SonarQube扫描仪的属性。

我已经在Windows系统上本地设置了Jenkins。这些项目完全基于Python,Ruby和React。

  agent {label 'master'}
  triggers {
    GenricTrigger ([
    genricVariables: [
    key: 'pr_from_branch', value: '$.pullrequest.source.branch.name'],
    [
    expressionType: 'JsonPath',
    regexpFilter: '',
    defaultValue: ''],
    token: 'test'])
  }
  options {
    buildDiscarder (
      logRotator(numToKeepStr:'5'))
    }
   stages {
      stage ('Initialize & SonarQube Scan') {
        steps {
        def scannerHome = tool 'sonarScanner';
        withSonarQubeEnv('My SonarQube Server') {

          bat """
             ${scannerHome}/bin/sonar-runner.bat
             pip install -r requirements.txt
             """
             }
          }
      }
      stage('Quality Gate') {
      sleep time: 3000, unit: 'MILLISECONDS'
        timeout(time: 1, unit: 'MINUTES') { // Just in case something goes wrong, pipeline will be killed after a timeout
        def qg = waitForQualityGate() // Reuse taskId previously collected by withSonarQubeEnv
        if (qg.status != 'OK') {
        error "Pipeline aborted due to quality gate failure: ${qg.status}"
        }
       }
      }
      stage ('Smoke Test') {
        steps {
          bat """
             pytest -s -v tests/home/login_test.py
             currentBuild.result = 'SUCCESS'
             """
        }
      }
    }
}

属性包括:

 -----------------Sonarqube configuration........................

sonar.projectKey=<*****>
sonar.projectName=<project name>
sonar.projectVersion=1.0
sonar.login=<sonar-login-token>
sonar.sources=src
sonar.exclusions=**/*.doc,**/*.docx,**/*.ipch,/node_modules/,
sonar.host.url=http://<url>/

-----------------Sonar for bitbucket plugin configuration...................

sonar.bitbucket.repoSlug=<project name>
sonar.bitbucket.accountName=<name>
sonar.bitbucket.oauthClientKey=<OAuth_Key>
sonar.bitbucket.oauthClientSecret=<OAuth_secret>
sonar.analysis.mode=issues

我可以在sonar-project.properties文件中手动添加这些属性,并直接在我的项目根目录中设置此文件,但是它将在本地运行而不是在服务器上。因此,为了避免这种情况,我想将这些属性添加到Jenkinsfile

2 个答案:

答案 0 :(得分:1)

我们将Sonar扫描程序作为Docker容器运行,但它应该使您对如何在Jenkinsfile中的属性使用属性有个清晰的认识。

stage("Sonar Analysis"){
    sh "docker pull docker.artifactory.company.com/util-sonar-runner:latest"

    withSonarQubeEnv('sonarqube'){
        sh "docker run --rm -v ${workspace}:/opt/spring-service -w /opt/spring-service -e SONAR_HOST_URL=${SONAR_HOST_URL} -e SONAR_AUTH_TOKEN=${SONAR_AUTH_TOKEN} docker.artifactory.company.com/util-sonar-runner:latest /opt/sonar-scanner/bin/sonar-scanner -Dsonar.host.url=${SONAR_HOST_URL} -Dsonar.login=${SONAR_AUTH_TOKEN} -Dsonar.projectKey=spring-service -Dsonar.projectName=spring-service  -Dsonar.projectBaseDir=. -Dsonar.sources=./src -Dsonar.java.binaries=./build/classes -Dsonar.junit.reportPaths=./build/test-results/test -Dsonar.jacoco.reportPaths=./build/jacoco/test.exec -Dsonar.exclusions=src/test/java/**/* -Dsonar.fortify.reportPath=fortifyResults-${IMAGE_NAME}.fpr -Dsonar.password="
    }     
}

答案 1 :(得分:0)

您可以像这样运行管道步骤。声纳服务器属性可以在pom.xml文件的配置文件下定义。

steps {
      withSonarQubeEnv('SonarQube') {
       sh 'mvn -Psonar -Dsonar.sourceEncoding=UTF-8 org.sonarsource.scanner.maven:sonar-maven-plugin:3.0.2:sonar'
      }
 }

SonarQube扫描仪需要在“詹金斯全局工具配置”部分中定义。

相关问题