首页 > 其他分享 >如何在Jenkins Pipeline中接入SonarQube进行代码扫描

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

时间:2023-10-10 11:46:28浏览次数:37  
标签:Pipeline SonarQube 代码 env SONAR Jenkins

随着软件开发项目的不断增多,代码质量的管理变得愈发重要。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中,改进您的软件开发流程。如果您有任何问题或疑问,欢迎在评论中提出。

 

 

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

标签:Pipeline,SonarQube,代码,env,SONAR,Jenkins
From: https://www.cnblogs.com/muyi-yang/p/17754263.html

相关文章

  • Docker 搭建 SonarQube8.3 社区版
    Docker搭建SonarQube8.3社区版 docker安装sonarQube 参考: https://www.cnblogs.com/shenh/p/13428029.html为了测试,使用Docker搭建SonarQube8.3社区版步骤#创建sonarqube工作目录,映射目录都放在这里mkdir-p/usr/local/sonarqube&&cd/usr/local/so......
  • jenkins安装插件报错
    1、安装插件publish-over-ssh报错 解决方案:下载publish-over.hpi文件 https://updates.jenkins.io/download/plugins/publish-over/0.22/publish-over.hpi离线安装选择的插件: 然后再安装publish-over-ssh插件 ......
  • jenkins结合Sonarqube实现代码扫描。
    #1.centos8系统环境准备: ip 主机名 软件 10.0.0.170sonarqubesonarqube8.9.9LTSpostgresql-10.17 10.0.0.160jenkins-masterjenkins-2.346.3sonar-scanner-4.7#sonarqube7.9.x版本后不在支持mysql。#sonarqube6.7.xLTS版本要求数据库需......
  • k8s部署jenkins+gitlab实现代码发布
     1.#k8s部署jenkins#k8s中运行jenkins服务,gitlab还是跑在物理机上,因为经常需要clone修改代码。#基于java命令,运⾏javawar包或jar包,本次以jenkins.war包部署⽅式为例,jenkins的数据保存⾄外部存储(NFS或者PVC)。1.1#镜像⽬录⽂件:#pwd/opt/k8s-data/docke......
  • 构造Vulkan图形管线:VkGraphicsPipeline
     创建Pipeline构造信息:它包括:基本构造信息VkStructureType构建Pipeline额外需要的结构:constvoid*pNext构建Pipeline时指定的Flags:VkPipelineCreateFlags多个ShaderStage信息:VkPipelineShaderStageCreateInfo*(数组)......
  • sklearn.pipeline的作用 函数参数解释及代码举例
    sklearn.pipeline是一个实用的工具,可以将多个数据预处理步骤和机器学习模型组合成一个整体,从而简化了机器学习的流程。Pipeline类可以将多个算法模型串联起来,比如将特征提取、归一化、分类组织在一起形成一个典型的机器学习问题工作流。主要带来两点好处:1.直接调用fit和predict方......
  • 使用docker部署jenkins和gitlab
    万字干货!使用docker部署jenkins和gitlab 万字原创文章!本文将实现通过docker部署Jenkins与GitLab,并自动化发布应用:本地机器将代码推送到GitLab,GitLab通过webhook触发Jenkins流水线,Jenkins获取GitLab的代码并生成jar包,将jar包推送到应用服务器,并运行ja......
  • Jenkins List Git Branches插件 构建选择指定git分支
    ListGitBranchesParameter|JenkinspluginAddsabilitytochoosefromgitrepositoryrevisionsortagshttps://plugins.jenkins.io/list-git-branches-parameter/1、安装组件  ListGitBranches2、验证功能1)新建任务 2)新增构建参数 3)选择git仓库我这里选择gitee,其他......
  • jenkins教程:Publish Over SSH插件远程ssh执行命令
    PublishOverSSHjenkins构建完成后需要一键发布,结构如下A服务器svnB服务器jenkinsC服务器应用服务器B从A拉取代码后打包成war,然后向C服务器拷贝war包这里解决的就是远程拷贝问题1.首先安装jenkinsSSH插件打开Jenkins的“系统管理>管理插件”,选择“可选插件”,在输入框中输入“......
  • 【尚硅谷】Jenkins教程(从配置到实战)
    课程链接:01-Jenkins教程简介_哔哩哔哩_bilibili课程笔记:https://files.cnblogs.com/files/henuliulei/Jenkins.zip?t=1696162767&download=trueJenkinsJenkins,原名Hudson,2011年改为现在的名字。它是一个开源的实现持续集成的软件工具。官方网站https://www.jenkins.io/j......