持续集成交付CICD: Sonarqube REST API 查找与新增项目

目录

一、实验

[1.SonarQube REST API 查找项目](#1.SonarQube REST API 查找项目)

[2.SonarQube REST API 新增项目](#2.SonarQube REST API 新增项目)


一、实验

1.SonarQube REST API 查找项目

(1)Postman测试

转换成cURL代码

(2)Jenkins添加凭证

(3)修改流水线

bash 复制代码
pipeline {

    agent { label "build"}

    stages {
        stage("Sonar"){
            steps{
                script {
                   projectName = "devops03-maven5-service"
                   if (SearchProject(projectName)){
                       println("${projectName} exist")
                   } else {
                       println("${projectName} not fonud")
                   }

                }
            }
        }
    }
}

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

}

(4)任意项目中回放进行测试

(5)成功

2.SonarQube REST API 新增项目

(1)Postman测试

(2)发送转换成cURL代码

(3)Sonarqube已新增go项目

(4)修改流水线

bash 复制代码
pipeline {

    agent { label "build"}

    stages {
        stage("Sonar"){
            steps{
                script {
//                    projectName = "devops03-maven5-service"
                    projectName = "devops03-gradle-service"
                   if (SearchProject(projectName)){
                       println("${projectName} exist")
                   } else {
                       println("${projectName} not fonud")
                       //项目不存在
                       CreateProject(projectName)
                   }

                }
            }
        }
    }
}

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
    }
}

(5)任意项目中回放进行测试

(6)成功

(7)Sonarqube已新增gradle项目

相关推荐
Mr. Cao code18 分钟前
Docker:颠覆传统虚拟化的轻量级革命
linux·运维·ubuntu·docker·容器
wanhengidc1 小时前
云手机运行流畅,秒开不卡顿
运维·网络·科技·游戏·智能手机
笨小孩@GF 知行合一2 小时前
OSPF实验:外部路由引入
运维·网络·hcip·数通·ospf
asdfg12589632 小时前
为什么要在出口路由器router配置NAT与默认路由
运维·网络·计算机网络
bug攻城狮3 小时前
Skopeo 工具介绍与 CentOS 7 安装指南
linux·运维·centos
宇宙第一小趴菜3 小时前
08 修改自己的Centos的软件源
linux·运维·centos
bug攻城狮3 小时前
彻底禁用 CentOS 7.9 中 vi/vim 的滴滴声
linux·运维·服务器·centos·vim
苹果醋33 小时前
数据库索引设计:在 MongoDB 中创建高效索引的策略
java·运维·spring boot·mysql·nginx
XMYX-03 小时前
Linux 物理机如何区分 SSD 与 HDD ——以 DELL PERC H730 Mini 为例
linux·运维
yongui478345 小时前
CentOS系统如何查看当前内存容量
linux·运维·centos