Jenkins使用Pipeline方式配置SonarQupe

Jenkins使用Pipeline方式配置SonarQupe

  • 一、jenkins-->Manage Plugins:安装插件 SonarQube Scanner for Jenkins
    • 二、jenkins-->Configure System:配置 SonarQube servers
      • 三、jenkins-->Global Tool Configuration:配置 SonarQube Scanner
      • 四、新建一个 project
      • 注意点

一、jenkins–>Manage Plugins:安装插件 SonarQube Scanner for Jenkins

Jenkins使用Pipeline方式配置SonarQupe_第1张图片

二、jenkins–>Configure System:配置 SonarQube servers

1)先在 sonarQube 平台创建 token,用来配置 jenkins 登录 sonarQube
Jenkins使用Pipeline方式配置SonarQupe_第2张图片
2)添加 token凭证
Jenkins使用Pipeline方式配置SonarQupe_第3张图片

3)然后在 jenkins 的 Configure System 配置 Name、Server URL、Server authentication token
Jenkins使用Pipeline方式配置SonarQupe_第4张图片

三、jenkins–>Global Tool Configuration:配置 SonarQube Scanner

Jenkins使用Pipeline方式配置SonarQupe_第5张图片

四、新建一个 project

写pipeline script

node{
    stage ("编译准备") {
        echo '==== prepare stage start ===='
        if(params.MODULE){
            env.app=params.MODULE
        }else{
            env.app='.'
        }
        env.check_to = params.BRANCH_OR_TAG
        echo '==== prepare stage end ===='
    }
    stage ("源码下载") {
        echo '==== git pull start ===='
        echo env.image_version
        echo '||'
        git credentialsId: params.GIT_CREADENTIAL, url: params.GIT_URL
        sh '[ -n "${check_to}" ] &&  git checkout ${check_to} ||  { echo -e "切换至指定BRANCH或者TAG的版本,check:${check_to} 不存在或为空,请检查输入的BRANCH和TAG!" && exit 111; }'
        echo '||'
        echo '==== git pull end   ===='
    }
    stage ("编译打包") {
        echo '==== mvn package begin ===='
        echo '||'
        sh 'cd ${app} && mvn clean package -Dmaven.test.skip=true -U -T 1C'
         
        echo '||'
        echo '==== mvn package  end   ===='
    }
    stage('SonarQube analysis'){
        //steps {
            script {
                  // requires SonarQube Scanner 2.8+
                  //这里填写,在系统管理中配置的sonar服务器名称
                  scannerHome = tool 'sonarqube-dev'
            }
            withSonarQubeEnv('sonarqube-dev') {
                    sh "${scannerHome}/bin/sonar-scanner " +
                    //在sonar中项目的名称
                    "-Dsonar.projectKey=master " +
                    //在sonar中项目的名称
                    "-Dsonar.projectName=master " +
                    "-Dsonar.sourceEncoding=UTF-8 " +
                    //项目类型
                    "-Dsonar.language=java " +
                    //需要过滤的文件类型
                    "-Dsonar.exclusions=**/*.css,**/*.js,**/*.xml " +
                    //pom中的版本
                    "-Dsonar.projectVersion=2021.8.0 " +
                    //需要检查代码的路径
                    "-Dsonar.sources=master-business/src/main/java " +
                    //需要检查代码源码路径
                    "-Dsonar.java.binaries=**/target/classes"
            }
            sleep(10)
            // 这个睡眠时为了防止没有分析完成就去请求结果
            timeout(time: 5, unit: 'MINUTES') {
                script {
                    def qg = waitForQualityGate()
                    if (qg.status != 'OK') {
                        error "Pipeline aborted due to a quality gate failure: ${qg.status}"
                    }
                }
            }
        //}
    }
}

实际运行结果:
Jenkins使用Pipeline方式配置SonarQupe_第6张图片
Jenkins使用Pipeline方式配置SonarQupe_第7张图片

注意点

1、我之前跑用例的时候,一直提示我

ERROR: Error during SonarScanner execution
org.sonar.java.AnalysisException: Please provide compiled classes of your project with sonar.java.binaries property
找了各种文档都说只需要加
-Dsonar.java.binaries这个配置就可以了,但是实际都加了,还是不行
也有回覆说有java代码导致,让过滤掉,但是实际也没有用 使用命令:-Dsonar.exclusions
最后无意发现,这里的run命令的所有命令,都是连在一起的,如下图
Jenkins使用Pipeline方式配置SonarQupe_第8张图片
最后,就是将所有命令中都加一个空格
Jenkins使用Pipeline方式配置SonarQupe_第9张图片

2、注意点:
ERROR: Re-run SonarScanner using the -X switch to enable full debug logging.
这个地方的报错,需要开启SCM
Jenkins使用Pipeline方式配置SonarQupe_第10张图片

你可能感兴趣的:(jenkins,sonarQube,Pipeline,jenkins)