十、Jenkins流水线集成Sonar

发布时间 2023-05-26 22:38:06作者: shigp1

Jenkins安装在阿里云主机上,SonarQube安装在腾讯云主机上。所使用的地址都是外网ip。

一、Jenkins配置Sonar

安装SonarQube Scanner for Jenkins插件:
 

 
我这里已经安装了。

 

配置SonarQube Server,在系统管理 -> Configure System中:
 

 
注意:这里的SonarQube的凭据选择Secret text。还有一点就是SonarQube的Server URL不能以/结尾。否则跑流水线会报jenkins hudson.remoting.ProxyException: net.sf.json.JSONException: Invalid JSON String。Secret并从SonarQube中生成:
 

 

 

在SonarQube配置sonarqube-webhook:
 

 

 
名称随便取,URL:<your Jenkins instance>/sonarqube-webhook/。末尾的/是必须的。如果未配置sonarqube-webhook则会卡在下面流水线的Quality Gate

二、修改Jenkinsfile

pipeline {
    agent any
    tools {
          maven 'my_maven'
    }

    stages {
        stage('Build') {
                steps {
                    sh 'mvn -B -DskipTests clean package'
                }
            }

        stage("SonarQube analysis") {
            steps{
              echo 'SonarQube analysis 开始'
                withSonarQubeEnv('my_sonarqube') {
                   sh 'mvn  verify sonar:sonar'
              echo 'SonarQube analysis 结束'
                }

            }
        }

         stage("Quality Gate"){
                    steps{
                        timeout(time: 15, unit: 'MINUTES') {
                            waitForQualityGate abortPipeline: true
                        }
                    }
         }

        stage("Deploy") {
            steps {
                    sshPublisher(publishers: [sshPublisherDesc(configName: 'my_server0', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''
                           cd /data
                           sudo docker stop my_test || true
                           sudo docker rm my_test || true
                           sudo docker rmi my_test || true
                           sudo docker build -t my_test  .
                           sudo docker run -d --name my_test -p 8500:8500 --privileged=true my_test:latest''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/data', remoteDirectorySDF: false, removePrefix: 'target/', sourceFiles: 'target/my-test-0.0.1-SNAPSHOT.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])

            }
        }
    }
}

增加了SonarQube analysisQuality Gate两个stage。SonarQube analysis里面的withSonarQubeEnv命令里面的my_sonarqube是Jenkins中配置系统 -> Configure System中的 SonarQube servers的NameQuality Gate是Sonar的质量门禁,如果未通过质量门禁则中断流水线,设置了15分钟的超时时间。

 

运行流水线:
 

 

并且可以查看每个stage的日志。

 
 
 
 
 

参考:https://blog.csdn.net/jiatong151/article/details/111995890
参考:https://www.jenkins.io/doc/pipeline/steps/sonar/