如何在Jenkins Pipeline中接入SonarQube进行代码扫描

发布时间 2023-10-10 11:37:20作者: 木易-故事里的人

随着软件开发项目的不断增多,代码质量的管理变得愈发重要。SonarQube是一个开源的代码质量管理平台,它可以帮助开发团队发现和修复代码中的各种问题,从而提高代码的质量。而Jenkins是一个广泛使用的持续集成和持续交付工具,它可以自动化构建、测试和部署应用程序。本文将介绍如何在Jenkins Pipeline中接入SonarQube,以便在每次构建时自动扫描代码并生成代码质量报告。

步骤一:安装SonarQube

首先,您需要在您的服务器上安装SonarQube。您可以从SonarQube官方网站下载适用于您操作系统的安装包,并按照官方文档进行安装和配置。确保SonarQube服务器正在运行,并且可以通过Web浏览器访问。

步骤二:配置SonarQube服务器

在Jenkins中使用SonarQube插件之前,您需要配置SonarQube服务器的相关信息。在Jenkins中,转到“系统管理”>“全局工具配置”并找到“SonarQube服务器”部分。在这里,添加您SonarQube服务器的名称和URL。

步骤三:创建Jenkins Pipeline

现在,让我们创建一个Jenkins Pipeline来执行代码扫描。在您的项目中,创建一个名为“Jenkinsfile”的文件,并添加以下内容:

#!groovy

def serverDir,projectName,version
pipeline {
    agent any
    
    environment {
        gitRepositoryUrl = "http://git.xxx.work/web/xxx-systemAdmin.git"
        credentialsId = "0f305fa1-acba-4c0a-9bdf-xxxxxxx"
        PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin"
        // SonarQube
        SONAR_PROJECT_PART_URL = "/dashboard?id="
        SONAR_PROJECT_EXCLUSIONS = ""
    }

    options {
        buildDiscarder(logRotator(numToKeepStr: '5'))
    }
    tools {
        nodejs 'node12.22'
        // nodejs 'nodejs'
    }

    stages {
        stage('pull code') {
            steps {
                sh "rm -rf ./* .git*"
                script{
                    def changeLogSets = checkout([$class: 'GitSCM',
                                                  branches: [[name: "$GIT_BRANCHES"]],
                                                  doGenerateSubmoduleConfigurations: false,
                                                  extensions: [],
                                                  submoduleCfg: [],
                                                  userRemoteConfigs: [[credentialsId: "${credentialsId}", url: "${gitRepositoryUrl}"]]])
                    version = changeLogSets['GIT_COMMIT']
                }

            }
        }
        
        stage('SonarQube Analysis') {
            steps {
                echo "开始执行 SonarQube 检测 ......"
                script {
                    scannerHome = tool 'SonarQubeScanner'
                    projectVersion = "1.0.0"
                }
                withSonarQubeEnv('SonarQube') {
                    sh """
                        ${scannerHome}sonar-scanner \
                            -Dsonar.projectKey=${env.JOB_NAME} \
                            -Dsonar.projectName=${env.JOB_NAME} \
                            -Dsonar.sourceEncoding=UTF-8 \
                            -Dsonar.projectVersion=${projectVersion} \
                            -Dsonar.sources=src/ \
                            -Dsonar.exclusions=${env.SONAR_PROJECT_EXCLUSIONS} 
                    """
                }
                // 睡眠防止没有分析完成就去请求结果
                sleep(120)
                timeout(time: 3, unit: 'MINUTES') {
                    script {
                        def qualityGateResponse = waitForQualityGate()
                        if (qualityGateResponse.status != 'OK') {
                            error "SonarQube 检测不通过: ${qualityGateResponse.status} , 请前往 ${SONAR_HOST_URL}${env.SONAR_PROJECT_PART_URL}${env.JOB_NAME} 查看检测报告"
                        } else {
                            echo "SonarQube 检测通过, 请前往 ${SONAR_HOST_URL}${env.SONAR_PROJECT_PART_URL}${env.JOB_NAME} 查看检测报告"
                        }
                    }
                }
            }
        }
        stage('npm build') {
            steps {
                sh '''
                    echo $PATH
                    npm -v
                    npm config set registry https://registry.npmmirror.com
                    npm config get registry
                    npm install --unsafe-perm=true --allow-root
                    npm run build
                    #rm -rf /mnt/dev-nginx-data/html/dev-zt/*
                    #cp -ra  dist/*  /mnt/dev-nginx-data/html/dev-zt/
                '''
            }
        }       
    }
}

 

在上述代码中,您需要替换Your_Project_Name为您的项目名称,SonarQube_Server_Name为您在步骤二中配置的SonarQube服务器的名称。这个Pipeline包括了三个阶段:检出代码、构建应用程序以及执行SonarQube代码扫描。

步骤四:配置Jenkins任务

在Jenkins中,创建一个新的Pipeline任务,将其与您的代码库关联,并选择刚刚创建的Jenkinsfile。

步骤五:运行Pipeline

现在,当您运行Jenkins任务时,Pipeline将自动执行代码扫描并将结果发送到SonarQube服务器。您可以在SonarQube的Web界面上查看代码质量报告,包括代码的各种度量指标、问题和建议的改进。

通过将SonarQube集成到Jenkins Pipeline中,您可以实现持续的代码质量监控,及时发现并解决问题,从而提高您的应用程序的质量和可维护性。

希望这篇博客帮助您成功地将SonarQube集成到Jenkins Pipeline中,改进您的软件开发流程。如果您有任何问题或疑问,欢迎在评论中提出。

 

 

  --有些人来了去了,有些人近了远了,岁月不堪数,故人不如初,不过是在人间暂坐,却要历经万千沧桑。--