当前位置: 首页 > article >正文

持续集成交付CICD:Sonarqube自动更新项目质量配置

目录

一、实验

1.Sonarqube手动自定义质量规则并指定项目

2.Sonarqube自动更新项目质量配置


一、实验

1.Sonarqube手动自定义质量规则并指定项目

(1)自定义质量规则

①新配置

②更多激活规则③根据需求激活相应规则④已新增配置

⑤ 查看

(2)修改质量设置(添加项目)

①点击质量配置

②修改项目

③搜索并添加

④开始扫描

⑤ 质量规则已切换为指定的devops03

(3)项目添加质量配置

①移除绑定的项目

②右上角项目配置-质量配置

③修改配置

④指定一个质量配置

⑤开始扫描

⑥质量规则已切换为指定的devops03

2.Sonarqube自动更新项目质量配置

(1)查看gradle项目质量配置为空

(2)Postman发送

(3)gradle项目已新增质量配置

(4)修改流水线

pipeline {

    agent { label "build"}

    stages {
        stage("Sonar"){
            steps{
                script {
                    projectName = "devops03-maven2-service"
                    lang = "java"
                    profileName = "devops03"
                   if (SearchProject(projectName)){
                       println("${projectName} exist")
                   } else {
                       //项目不存在
                       println("${projectName} not fonud")
                       //创建项目
                       CreateProject(projectName)
                       //质量配置
                       UpdateQualityProfiles(lang, projectName, profileName)
                   }

                }
            }
        }
    }
}

def SonarRequest(apiUrl,method){
    withCredentials([string(credentialsId: "855da77c-ad38-4f06-a941-3a5afcf6bbc6", variable: 'SONAR_TOKEN')]) {
        sonarApi = "http://192.168.204.8:9000/api"
        response = sh returnStdout: true,
                script: """
                 curl --location \
                 --request ${method} \
                 "${sonarApi}/${apiUrl}" \
                 --header "Authorization: Basic ${SONAR_TOKEN}"
                 """
        // json格式化
        try {
            response = readJSON text: """ ${response - "\n"} """
        } catch(e){
            response = readJSON text: """{"errors" : true}"""
        }
        return response

    }
}

//查找项目
def SearchProject(projectName){
    apiUrl = "projects/search?projects=${projectName}"
    response = SonarRequest(apiUrl,"GET")
    if (response.paging.total == 0){
        return false
    }
    return true

}

//创建项目
def CreateProject(projectName){
    apiUrl = "projects/create?name=${projectName}&project=${projectName}"
    response = SonarRequest(apiUrl,"POST")
    try{
        if (response.project.key == projectName ) {
            println("Project Create success!...")
            return true
        }
    }catch(e){
        println(response.errors)
        return false
    }
}

// 更新质量阈
def UpdateQualityProfiles(lang, projectName, profileName){
    apiUrl = "qualityprofiles/add_project?language=${lang}&project=${projectName}&qualityProfile=${profileName}"
    response = SonarRequest(apiUrl,"POST")

    if (response.errors != true){
        println("ERROR: UpdateQualityProfiles ${response.errors}...")
        return false
    } else {
        println("SUCCESS: UpdateQualityProfiles ${lang} > ${projectName} > ${profileName}" )
        return true
    }
}
               

(5)任意项目进入回放运行

(6)成功

(7)sonarqube已新增maven2项目

(8)并自动实现质量配置

(9)本地代码扫描

sonar-scanner -Dsonar.host.url=http://192.168.204.8:9000 \
-Dsonar.projectKey=devops03-maven2-service \
-Dsonar.projectName=devops03-maven2-service \
-Dsonar.projectVersion=1.2 \
-Dsonar.login=admin \
-Dsonar.password=Admin123 \
-Dsonar.ws.timeout=30 \
-Dsonar.projectDescription="my first project" \
-Dsonar.links.homepage=http://192.168.204.8:82/devops03/devops03-maven5-service \
-Dsonar.links.ci=http://192.168.204.15:8080/job/devops03/job/devops03-maven-service/ \
-Dsonar.sources=src \
-Dsonar.sourceEncoding=UTF-8 \
-Dsonar.java.binaries=target/classes \
-Dsonar.java.test.binaries=target/test-classes \
-Dsonar.java.surefire.report=target/surefire-reports

(10)maven2项目采用的质量阈为devops03


http://www.kler.cn/news/160537.html

相关文章:

  • 前端编码中快速填充内容--乱数假文
  • MySQL高可用
  • mvn site 命令
  • 机器学习笔记 - 使用深度学习提高传统机器学习性能
  • nodejs+vue+微信小程序+python+PHP的Sd球鞋销售平台的设计与实现-计算机毕业设计推荐
  • JVM 执行引擎篇
  • pgsql 判空并设置默认值
  • 【MySQL数据类型】
  • 计网实验7
  • 案例059:基于微信小程序的在线投稿系统
  • 《电磁场与电磁波》(谢处方第5版)anki卡片学习笔记txt文件输出
  • C#,数值计算,计算实非对称矩阵的所有特征值和特征向量,简化为Hes-senberg形式,然后进行QR迭代
  • 网络视频服务器的作用是什么?
  • Mac卸载、安装Python
  • 图像处理领域的应用
  • 1-Tornado的介绍
  • 自定义BeanPostProcessor之Feign组件服务间优雅调用
  • Istio可观测性
  • MySql MVCC 详解
  • 机器的深度强化学习算法可以被诱导
  • 【13】PyQt多线程多任务管理
  • 虚拟机配置网络(这里以centos为例)
  • 操作系统的特征
  • Java集合进阶(上)
  • 0基础学java-day14
  • logback整合rabbitmq实现消息记录日志
  • 关于域名、ssl证书的一些问题
  • ThreadX开源助力Microsoft扩大应用范围:对比亚马逊AWS的策略差异
  • 在cmd下查看当前python的版本
  • vue2+typescript使用高德地图2.0版本