本文主要介绍jenkins与sonarQube的集成,以及使用pipeline去调用sonarqube检测我们的代码质量
sonarqube设置
1.打开Force user authentication

2.创建token,并复制下来

3.添加Webhooks(格式 http://[ip]:[port]/sonarqube-webhook/),注意地址最后面要有 /

jenkins设置
下载插件
在插件中心下载安装 SonarQube Scanner for Jenkins
配置凭据

配置sonarqube servers
在 系统配置 里找到 SonarQube servers,Server authentication token选择刚刚添加的凭据

配置sonarqube scanner
在 全局工具配置 中配置sonarqube scanner

pipeline
pipeline { agent { label 'tomcatVM' } environment { //git仓库地址 git_url = '' //git凭据id credentialsId = '' //分支 git_branch = 'master' } stages { //清理工作空间 stage('clean workspace') { steps { cleanWs() } } //拉取代码 stage('push git code') { steps { git credentialsId:"${credentialsId}",url:"${git_url}",branch: "${git_branch}" } } //打包 stage('mvn build') { steps { sh "/usr/local/maven/bin/mvn clean install" } } //sonarqube分析代码 stage('sonarqube analysis') { steps { //这边withSonarQubeEnv的参数就是系统配置sonarqube servers中配置的name withSonarQubeEnv('sonarServer') { sh "/usr/local/sonar-scanner-4.4.0.2170-linux/bin/sonar-scanner "+ "-Dsonar.projectKey=myproject "+ "-Dsonar.projectName=myproject "+ "-Dsonar.projectVersion=1.0 "+ "-Dsonar.sources=. "+ "-Dsonar.java.binaries=target/classes "+ "-Dsonar.login=admin "+ "-Dsonar.password=admin "+ "-Dsonar.pdf.username=admin "+ "-Dsonar.pdf.password=admin "+ "-Dsonar.pdf.skip=false" } script { //等待webhook返回代码检查结果 //这里设置超时时间1分钟 timeout(1) { //获取结果,waitForQualityGate()中的参数也要与之前SonarQube servers中Name的配置相同 def qg = waitForQualityGate('sonarServer') if (qg.status != 'OK') { error "未通过Sonarqube的代码质量阈检查,请及时修改!failure: ${qg.status}" } } }
} } stage('copy war to tomcat') { steps { sh "cp target/myproject.war /usr/local/apache-tomcat-9.0.36/webapps/ROOT.war" } } stage('excute shell') { steps { sh "/usr/local/apache-tomcat-9.0.36/bin/startup.sh" } } } post{ success { script { cleanWs() } } always { script { emailext body: '''<html> <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"> <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"> <tr> <td><br /> <b><font color="#0B610B">构建信息</font></b> <hr size="2" width="100%" align="center" /></td> </tr> <tr> <td> <ul> <li>构建名称:${JOB_NAME}</li> <li>构建结果: <span style="color:green"> ${BUILD_STATUS}</span></li> <li>构建编号:${BUILD_NUMBER} </li> <li>构建者: ${CAUSE}</li> <li>变更记录: ${CHANGES,showPaths=true,showDependencies=true,format="<pre><ul><li>提交ID: %r</li><li>提交人:%a</li><li>提交时间:%d</li><li>提交信息:%m</li><li>提交文件:<br />%p</li></ul></pre>",pathFormat=" %p <br />"} </ul> </td> </tr> </table> </body> </html>''', subject: '${PROJECT_NAME}', to: 'xxxxxx@qq.com' } } } }
|