前言
基于Jenkins的服务端持续集成已在搜狗奇点系统实现,实施流程如下图。
Jenkins Pipline执行过程,需要实时获取持续集成-静态代码扫描的结果,以确定扫描结果是否符合既定的要求。通过在SonarQube中设定与Jenkins的WebHook,即可解决这个问题。
SonarQube Jenkins WebHook
该Token不会显示第二次,请备忘。
在代码扫描成功后,扫描结果需要回调Jenkins。 添加的Jenkins的Webhook结构为: http://[jenkins_url]/sonarqube-webhook/
SonarQube代码扫描阈值设定
SonarQube根据预先设定的阈值来判断此次扫描的结果,如何配置SonarQube静态代码扫描的阈值呢?
[SonarQube]-[质量阈]
可以自定义指标,设定质量阈适用的工程
Jenkins Pipline样例
Jenkins Pipline SonarQube Scan样例,在Jenkins Pipline执行过程中,会触发SonarQube进行代码扫描,同时校验SonarQube返回的扫描结果,来确定Jenkins Pipline的成功与否。
stage('SonarQube Scan') {
if (runSonar == 'true') {
withSonarQubeEnv('sonarqube') {
//注意这里withSonarQubeEnv()中的参数要与之前SonarQube servers中Name的配置相同
echo "starting codeAnalyze with SonarQube......"
//Jenkins插件
def scannerHome = tool 'sonarqube_scanner';
sh "${scannerHome}/bin/sonar-scanner -D project.settings=cifiles/sonar-project.properties"
}
script {
timeout(1) {
//这里设置超时时间1分钟,如果Sonar Webhook失败,不会出现一直卡在检查状态
//利用Sonar webhook功能通知pipeline代码检测结果,未通过质量阈,pipeline将会fail
def qg = waitForQualityGate('sonarqube')
//注意:这里waitForQualityGate()中的参数也要与之前SonarQube servers中Name的配置相同
if (qg.status != 'OK') {
error "未通过Sonarqube的代码质量阈检查,请及时修改!failure: ${qg.status}"
}
}
}
}
}