持续集成交付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项目

相关推荐
杨云龙UP1 小时前
ODA服务器RAC节点2/u01分区在线扩容操作记录及后续处理流程(Linux LVM + ext4 文件系统在线扩容操作手册)_20260307
linux·运维·服务器·数据库·ubuntu·centos
欲买桂花同载酒5828 小时前
程序人生-Hello’s P2P
运维·服务器·数据库
NineData8 小时前
AI时代的数据对比:DBA还需要盯着屏幕看差异吗?
运维·数据库
jyfool8 小时前
Ubuntu 远程桌面配置踩坑实录:从 TightVNC 到 x11vnc 的折腾之旅
linux·运维·ubuntu
网硕互联的小客服9 小时前
服务器防火墙是如何区分正常流量和攻击流量?
运维·服务器·网络
安当加密9 小时前
基于 RADIUS 的 Linux 服务器双因子认证:从 FreeRADIUS 到轻量级 ASP 方案的演进
linux·运维·服务器
A-刘晨阳9 小时前
【Prometheus】Alertmanager配置钉钉告警
运维·云原生·钉钉·prometheus·监控
wangqiaowq10 小时前
llama.cpp 启动命令优化
运维·服务器
double2li10 小时前
linux/unix 段错误捕获【续】
linux·运维·服务器·网络·unix
allway210 小时前
Linux / Unix last Command Examples
linux·运维·unix