首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >终结: 持续集成 &代码质量平台(三)

终结: 持续集成 &代码质量平台(三)

作者头像
DevOps云学堂
发布2020-02-19 13:28:45
9711
发布2020-02-19 13:28:45
举报
文章被收录于专栏:DevOps持续集成DevOps持续集成

引导 您好,本章主要我们主要学习与质量管理平台Sonarqube集成。主要包含以下内容:1. 使用sonarqube接口 2. 配置多分支扫描 适合人群: 所有对DevOps感兴趣的同学。

1. 使用SonarQube接口

为什么要使用接口? 不知道大家有没有在使用SonarQube进行扫描的时候遇到这种问题: 当存在多个质量阈的时候,默认是给新项目配置默认的质量阈。也就是第一次扫描的项目直接使用的是默认的质量阈,而不是自己定义的质量阈。这种场景下就需要扫描前先指定质量阈再进行扫描了!

调研接口

可参考官方的文档,找到自己要操作的接口及使用方法。

//查找项目
api/projects/search?projects=${projectName}"

//创建项目
api/projects/create?name=${projectName}&project=${projectName}"
   
//更新语言规则集
api/qualityprofiles/add_project?language=${language}&qualityProfile=${qualityProfile}&project=${projectName}"

//项目授权
api/permissions/apply_template?projectKey=${projectKey}&templateName=${templateName}"

//更新质量阈
api/qualitygates/select?projectKey=${projectKey}&gateId=${gateId}"

共享库封装

package org.devops


//封装HTTP

def HttpReq(reqType,reqUrl,reqBody){
    def sonarServer = "http://192.168.1.200:30090/api"
   
    result = httpRequest authentication: 'sonar-admin-user',
            httpMode: reqType, 
            contentType: "APPLICATION_JSON",
            consoleLogResponseBody: true,
            ignoreSslErrors: true, 
            requestBody: reqBody,
            url: "${sonarServer}/${reqUrl}"
            //quiet: true
    
    return result
}


//获取Sonar质量阈状态
def GetProjectStatus(projectName){
    apiUrl = "project_branches/list?project=${projectName}"
    response = HttpReq("GET",apiUrl,'')
    
    response = readJSON text: """${response.content}"""
    result = response["branches"][0]["status"]["qualityGateStatus"]
    
    //println(response)
    
   return result
}

//搜索Sonar项目
def SerarchProject(projectName){
    apiUrl = "projects/search?projects=${projectName}"
    response = HttpReq("GET",apiUrl,'')

    response = readJSON text: """${response.content}"""
    result = response["paging"]["total"]

    if(result.toString() == "0"){
       return "false"
    } else {
       return "true"
    }
}

//创建Sonar项目
def CreateProject(projectName){
    apiUrl =  "projects/create?name=${projectName}&project=${projectName}"
    response = HttpReq("POST",apiUrl,'')
    println(response)
}

//配置项目质量规则

def ConfigQualityProfiles(projectName,lang,qpname){
    apiUrl = "qualityprofiles/add_project?language=${lang}&project=${projectName}&qualityProfile=${qpname}"
    response = HttpReq("POST",apiUrl,'')
    println(response)
}


//获取质量阈ID
def GetQualtyGateId(gateName){
    apiUrl= "qualitygates/show?name=${gateName}"
    response = HttpReq("GET",apiUrl,'')
    response = readJSON text: """${response.content}"""
    result = response["id"]
    
    return result
}

//配置项目质量阈

def ConfigQualityGates(projectName,gateName){
    gateId = GetQualtyGateId(gateName)
    apiUrl = "qualitygates/select?gateId=${gateId}&projectKey=${projectName}"
    response = HttpReq("POST",apiUrl,'')
    println(response)println(response)
}

应用实践

stage("QA"){
    steps {
        script{
            //搜索项目
            result = sonarapi.SerarchProject("${JOB_NAME}")
            println(result)
            
            //判断项目是否存在
            if (result == "false"){
                println("${JOB_NAME}---项目不存在,准备创建项目---> ${JOB_NAME}!")
                sonarapi.CreateProject("${JOB_NAME}")
            } else {
                println("${JOB_NAME}---项目已存在!")
            }
            
            //配置项目质量规则
            qpName="${JOB_NAME}".split("-")[0]   //Sonar%20way
            sonarapi.ConfigQualityProfiles("${JOB_NAME}","java",qpName)
        
            //配置质量阈
            sonarapi.ConfigQualityGates("${JOB_NAME}",qpName)
        
            //代码扫描
            sonar.SonarScan("test","${JOB_NAME}","${JOB_NAME}","src")
            

            sleep 30
            //获取扫描结果
            result = sonarapi.GetProjectStatus("${JOB_NAME}")
            
            
            println(result)
            if (result.toString() == "ERROR"){
                error " 代码质量阈错误!请及时修复!"
            } else {
                println(result)
            }
        }
    }
}

2. SonarQube配置多分支

将插件放到两个目录中,然后重启sonar

扫描参数增加 –Dsonar.branch.name=

效果


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DevOps持续集成 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档