持续集成交付CICD:Jenkins使用GitLab共享库实现自动更新前后端项目质量配置

目录

一、实验

1.Jenkins使用GitLab共享库实现自动更新后端项目质量配置

2.Jenkins使用GitLab共享库实现自动更新前端项目质量配置

二、问题

1.Sonarqube如何添加自定义质量阈


一、实验

1.Jenkins使用GitLab共享库实现自动更新后端项目质量配置

(1)修改GitLab的Sonar.groovy

(2) 配置文件并提交

Groovy 复制代码
package org.devops

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

def SonarJava(projectName,groupName){

    withCredentials([string(credentialsId: '9a684e00-bc7b-4335-916f-1dfb0b1688fa', variable: 'AUTH_TOKEN')]) {
        sh """
                                /opt/sonar-scanner-4.8.0.2856-linux/bin/sonar-scanner -Dsonar.host.url=http://192.168.204.8:9000 \
                                    -Dsonar.projectKey=${projectName} \
                                    -Dsonar.projectName=${projectName} \
                                    -Dsonar.projectVersion=${BUILD_ID} \
                                    -Dsonar.login=${AUTH_TOKEN} \
                                    -Dsonar.ws.timeout=30 \
                                    -Dsonar.projectDescription="my first project" \
                                    -Dsonar.links.homepage=http://192.168.204.8:82/${groupName}/${projectName} \
                                    -Dsonar.links.ci=http://192.168.204.15:8080/job/${groupName}/job/${projectName}/ \
                                    -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
                                """
    }
}


def SonarWeb(projectName,groupName){

    withCredentials([string(credentialsId: '9a684e00-bc7b-4335-916f-1dfb0b1688fa', variable: 'AUTH_TOKEN')]) {
        sh """
                                /opt/sonar-scanner-4.8.0.2856-linux/bin/sonar-scanner -Dsonar.host.url=http://192.168.204.8:9000 \
                                    -Dsonar.projectKey=${projectName} \
                                    -Dsonar.projectName=${projectName} \
                                    -Dsonar.projectVersion=${BUILD_ID} \
                                    -Dsonar.login=${AUTH_TOKEN} \
                                    -Dsonar.ws.timeout=30 \
                                    -Dsonar.projectDescription="my first project" \
                                    -Dsonar.links.homepage=http://192.168.204.8:82/${groupName}/${projectName} \
                                    -Dsonar.links.ci=http://192.168.204.15:8080/job/${groupName}/job/${projectName}/ \
                                    -Dsonar.sources=src \
                                    -Dsonar.sourceEncoding=UTF-8 \
                                """
    }
}

//Main
def CodeSonar(type,projectName,groupName){
    if (SearchProject(projectName)){
        println("${projectName} exist")
    } else {
        //项目不存在
        println("${projectName} not fonud")
        //创建项目
        CreateProject(projectName)
    }
    //质量配置
    profileMap = ["maven":"java","npm": "js"]
    UpdateQualityProfiles(profileMap[type], projectName,groupName)

    switch(type){
        case "maven":
            SonarJava(projectName,groupName)
            break;
        case "gradle":
            SonarJava(projectName,groupName)
            break;
        case "npm":
            SonarWeb(projectName,groupName)
            break;
        default:
            println("No such tools ... [maven/ant/gradle/npm/yarn/go]")
            break
    }
}

(3)Jenkins手动构建后端项目流水线

(4)Blue Ocean 查看

(5)查看日志

(6)maven项目使用的质量阈为devops03

(7) Sonarqube 已新增项目

2.Jenkins使用GitLab共享库实现自动更新前端项目质量配置

(1)Sonarqube给前端项目添加质量配置

(2)根据需求添加

(3)显示已增加

(4)Jenkins手动构建前端项目流水线

(5)Blue Ocean 查看

(6)查看日志

(7)npm项目使用的质量阈为devops03

(8) Sonarqube 已新增项目

二、问题

1.Sonarqube如何添加自定义质量阈

(1)创建

(2)添加条件

(3)完成

(4)添加项目

相关推荐
xxxxxxllllllshi7 小时前
Java中Elasticsearch完全指南:从零基础到实战应用
java·开发语言·elasticsearch·面试·职场和发展·jenkins
codeの诱惑1 天前
Azure DevOps CI/CD 流水线中 Java 17 容器化部署 NullPointerException 解决方案
ci/cd·azure·devops
黑马金牌编程1 天前
Jenkins的Linux与window部署方式
linux·运维·windows·jenkins·持续集成·cicd
weixin_307779131 天前
在Linux服务器上使用Jenkins和Poetry实现Python项目自动化
linux·开发语言·python·自动化·jenkins
念念不忘 必有回响1 天前
前端自动化部署全流程(Jenkins + Nginx)
前端·自动化·jenkins
不 再 熬 夜1 天前
Docker搭建Jenkins
docker·jenkins
爱宇阳2 天前
从零开始部署 GitLab CE 18.4.2:Docker Compose 新手教程
docker·容器·gitlab
tingting01192 天前
jenkins在使用中遇到的问题
运维·jenkins
一张假钞2 天前
Windows下Jenkins服务未自动重启问题解决
jenkins
Narutolxy2 天前
从混合部署到高可用:在内网环境下搭建 GitLab-Jenkins-OpenResty的完整实战复盘20251014
gitlab·jenkins·openresty