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

相关推荐
jasnet_u17 小时前
如何重置Gitlab的root用户密码
gitlab
全栈工程师修炼指南1 天前
告别手动构建!Jenkins 与 Gitlab 完美协作,根据参数自动化触发CI/CD流水线实践
运维·ci/cd·自动化·gitlab·jenkins
一勺菠萝丶2 天前
Jenkins 构建 Node 项目报错解析与解决——pnpm lockfile 问题实战
elasticsearch·servlet·jenkins
xixingzhe22 天前
jenkins脚本触发部署
运维·jenkins
躲在云朵里`2 天前
ElasticSearch复习指南:从零搭建一个商品搜索案例
运维·jenkins
xiaok3 天前
分支管理提交代码
git·gitlab·github
Cloud Traveler4 天前
第3天-Jenkins详解-3
运维·分布式·jenkins
u0104058364 天前
电商导购平台的搜索引擎优化:基于Elasticsearch的商品精准推荐系统
elasticsearch·搜索引擎·jenkins
*老工具人了*4 天前
Terraform整合到GitLab+Jenkins工具链
gitlab·jenkins·terraform