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

相关推荐
jason成都8 小时前
elasticsearch部署时创建用户密码
大数据·elasticsearch·jenkins
AttaGain16 小时前
GitLab数据备迁移及系统升级
运维·服务器·gitlab
我叫唧唧波16 小时前
【自动化部署】基于Docker构建CI/CD流水线
ci/cd·docker·node.js
qq_3482318516 小时前
Spring Boot 项目各模块整合
运维·jenkins
熊猫钓鱼>_>1 天前
GitHub Actions CI/CD流水线实战指南
ci/cd·github
starvapour2 天前
Ubuntu部署gitlab频繁出现500的问题
linux·ubuntu·gitlab
忍冬行者2 天前
基于docker安装jenkins+gitlab+harbor
docker·gitlab·jenkins
HIT_Weston2 天前
53、【Ubuntu】【Gitlab】拉出内网 Web 服务:http.server 单/多线程分析(五)
网络协议·http·gitlab
遇见火星2 天前
主流CI/CD工具对比分析!
ci/cd·gitlab·jenkins·云效
HIT_Weston2 天前
52、【Ubuntu】【Gitlab】拉出内网 Web 服务:http.server 单/多线程分析(四)
ubuntu·http·gitlab