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/