十、Jenkins流水线集成Sonar
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 analysis和Quality Gate两个stage。SonarQube analysis里面的withSonarQubeEnv命令里面的my_sonarqube是Jenkins中配置系统 -> Configure System中的 SonarQube servers的Name。 Quality Gate是Sonar的质量门禁,如果未通过质量门禁则中断流水线,设置了15分钟的超时时间。
运行流水线:

并且可以查看每个stage的日志。
参考:https://blog.csdn.net/jiatong151/article/details/111995890
参考:https://www.jenkins.io/doc/pipeline/steps/sonar/

浙公网安备 33010602011771号