近期需要对公司内的代码开启
Sonar
检测,原来的项目都是采用Jenkins Pipeline
进行打包构建的,因此现在增加代码检测的开发也会基于Pipeline来展开。以下部分的操作都是基于Sonar安装完成来展开的。
Sonar配置
Sonar上需要做两个配置:
- 生成Token,用于Jenkins和Sonar之间检测通信使用;
- 配置Jenkins的回调地址,在Sonar检测之后将结果回调给Jenkins,以便于进行后续操作。
生成Token
登录管理员账号,点击“我的账号”,在“通用令牌”处进行令牌的配置。
备注:生成后的token要保存好,后续环节要使用,丢失后只能删除重新配置。
配置回调地址
点击“配置”,然后点击“配置-网络调用”,如下图
输入回调地址,如下:
URL部分格式:http://${JENKINS_URL}/sonarqube-webhook
,其中/sonarqube-webhook是固定的。
Jenkins配置
安装
以管理员角色登录Jenkins,点击“Manage Jenkins”:
找到“Manage Plugins”:
搜索“SonarQube”,并选择安装即可完成。
配置
添加凭据
凭据部分需要配置Sonar的Token,首先进入凭据管理页面:
点击新增凭据,将前面生成的Sonar token复制过来即可:
Jenkins配置
进入Jenkins配置页面,如下:
然后进行Sonar Server的配置(此处Name要记住,后面Pipeline会使用):
进入Global Tool Configuration,配置Sonar Scanner,如下:
Pipeline编写
stage("Sonar Analysis") {
// 此处可以控制某些条件才开启
when {
allOf {
expression { a == b }
}
}
steps {
script {
// tool里面的参数和上面配置Sonar Scanner的name保持一致
scannerHome = tool 'sonarqube-scanner'
}
// 此处withSonarQubeEnv里面的SonarQube和上面配置的Sonar Server的Name保持一致
withSonarQubeEnv('SonarQube') {
sh "$scannerHome/bin/sonar-scanner " +
"-Dsonar.projectKey=${params.SERVICE_NAME} " +
"-Dsonar.projectName=${params.SERVICE_NAME} " +
"-Dsonar.sourceEncoding=UTF-8 " +
"-Dsonar.language=java " +
"-Dsonar.projectVersion=1.0 " +
"-Dsonar.java.binaries=. " +
"-Dsonar.sources=."
}
// 这个睡眠时为了防止没有分析完成就去请求结果
timeout(time: 5, unit: 'MINUTES') {
script {
def qg = waitForQualityGate()
if (qg.status != 'OK') {
error "Pipeline aborted due to a quality gate failure: ${qg.status}"
}
}
}
}
}
通过以上配置后就完成了,大功告成!